Description: TODO: Put a short summary on the line above and replace this paragraph with a longer explanation of this change. Complete the meta-information with other relevant fields (see below for details). To make it easier, the information below has been extracted from the changelog. Adjust it or drop it. . gcl (2.6.12-29) unstable; urgency=medium . * Version_2_6_13pre35; support latest binutils * Bug fix: "gcl ftbfs on amd64 and i386 with binutils from experimental", thanks to Matthias Klose (Closes: #803214). Author: Camm Maguire Bug-Debian: https://bugs.debian.org/803214 --- The information above should follow the Patch Tagging Guidelines, please checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here are templates for supplementary fields that you might want to add: Origin: , Bug: Bug-Debian: https://bugs.debian.org/ Bug-Ubuntu: https://launchpad.net/bugs/ Forwarded: Reviewed-By: Last-Update: --- gcl-2.6.12.orig/cmpnew/gcl_cmpvs.lsp +++ gcl-2.6.12/cmpnew/gcl_cmpvs.lsp @@ -75,8 +75,8 @@ (defun wt-vs* (vs) (wt "(" )(wt-vs vs) (wt "->c.c_car)")) -(defun wt-ccb-vs (ccb-vs) - (wt "(fun->cc.cc_turbo[" (- *initial-ccb-vs* ccb-vs) "]->c.c_car)")) +(defun wt-ccb-vs (ccb-vs);;FIXME harmonize *closure-p* with *clink* + (wt "(" (if *closure-p* "fun->cc.cc_turbo" "base0") "[" (- *initial-ccb-vs* ccb-vs) "]->c.c_car)")) (defun clink (vs) (setq *clink* vs)) --- gcl-2.6.12.orig/configure +++ gcl-2.6.12/configure @@ -7663,7 +7663,7 @@ fi if test "${enable_ansi+set}" = set; then : enableval=$enable_ansi; else - enable_ansi="no" + enable_ansi="yes" fi --- gcl-2.6.12.orig/configure.in +++ gcl-2.6.12/configure.in @@ -2133,7 +2133,7 @@ AC_ARG_ENABLE(readline, # ansi lisp AC_ARG_ENABLE(ansi,[--enable-ansi builds a large gcl aiming for ansi compliance, - --disable-ansi builds the smaller traditional CLtL1 image],,enable_ansi="no") + --disable-ansi builds the smaller traditional CLtL1 image],,enable_ansi="yes") if test "$enable_ansi" = "yes" ; then SYSTEM=ansi_gcl --- gcl-2.6.12.orig/o/alloc.c +++ gcl-2.6.12/o/alloc.c @@ -1241,7 +1241,7 @@ gcl_init_alloc(void *cs_start) { massert(!getrlimit(RLIMIT_STACK, &rl)); if (rl.rlim_cur!=RLIM_INFINITY && (rl.rlim_max == RLIM_INFINITY || rl.rlim_max > rl.rlim_cur)) { - rl.rlim_cur = rl.rlim_max == RLIM_INFINITY ? rl.rlim_max : rl.rlim_max/64; + rl.rlim_cur = rl.rlim_max; massert(!setrlimit(RLIMIT_STACK,&rl)); } cssize = rl.rlim_cur/sizeof(*cs_org) - sizeof(*cs_org)*CSGETA; --- gcl-2.6.12.orig/o/file.d +++ gcl-2.6.12/o/file.d @@ -2407,17 +2407,18 @@ object x=Cnil; inPort = (myport == Cnil ? 0 : fix(Iis_fixnum(myport))); #ifdef BSD + if (isServer && daemon != Cnil) { long pid,i; struct rlimit r; - struct sigaction sa; + struct sigaction sa,osa; sa.sa_handler=SIG_IGN; sa.sa_flags=SA_NOCLDWAIT; sigemptyset(&sa.sa_mask); - sigaction(SIGCHLD,&sa,NULL); + massert(!sigaction(SIGCHLD,&sa,&osa)); switch((pid=pfork())) { case -1: @@ -2425,8 +2426,7 @@ object x=Cnil; break; case 0: - if (setsid()<0) - FEerror("setsid error", 0); + massert(setsid()>=0); if (daemon == sKpersistent) switch(pfork()) { @@ -2440,23 +2440,17 @@ object x=Cnil; break; } + massert(!chdir("/")); + memset(&r,0,sizeof(r)); - if (getrlimit(RLIMIT_NOFILE,&r)) - FEerror("Cannot get resourse usage",0); + massert(!getrlimit(RLIMIT_NOFILE,&r)); for (i=0;i=0); + massert((i=dup(i))>=0); + massert((i=dup(i))>=0); umask(0); @@ -2473,16 +2467,14 @@ object x=Cnil; FD_ZERO(&fds); FD_SET(fd,&fds); - i=select(fd+1,&fds,NULL,NULL,NULL); - if (i>0) { + if (select(fd+1,&fds,NULL,NULL,NULL)>0) { y=maccept(x); - sigaction(SIGCHLD,&sa,NULL); - switch((pid=pfork())) { case 0: + massert(!sigaction(SIGCHLD,&osa,NULL)); ifuncall1(server,y); exit(0); break; @@ -2506,6 +2498,8 @@ object x=Cnil; break; } + massert(!sigaction(SIGCHLD,&osa,NULL)); + } else #endif --- gcl-2.6.12.orig/o/main.c +++ gcl-2.6.12/o/main.c @@ -227,9 +227,9 @@ get_phys_pages1(char freep) { static void get_gc_environ(void) { - const char *e;; + const char *e; - mem_multiple=1.0; + mem_multiple=0.85; if ((e=getenv("GCL_MEM_MULTIPLE"))) { massert(sscanf(e,"%lf",&mem_multiple)==1); massert(mem_multiple>=0.0); --- gcl-2.6.12.orig/o/nsocket.c +++ gcl-2.6.12/o/nsocket.c @@ -630,50 +630,43 @@ doReverse(char *s, int n) of the buffer may be changed. */ int -getCharGclSocket(object strm, object block) -{ - object bufp = SOCKET_STREAM_BUFFER(strm); - if (bufp->ust.ust_fillp > 0) { - dprintf("getchar returns (%c)\n",bufp->ust.ust_self[-1+(bufp->ust.ust_fillp)]); +getCharGclSocket(object strm, object block) { + + object bufp=SOCKET_STREAM_BUFFER(strm); + int fd=SOCKET_STREAM_FD(strm); + + if (bufp->ust.ust_fillp > 0) return bufp->ust.ust_self[--(bufp->ust.ust_fillp)]; - } - else { + + if (fd>=0) { + fd_set readfds; - struct timeval timeout; - int fd = SOCKET_STREAM_FD(strm); - if (1) - { int high; - AGAIN: - /* under cygwin a too large timout like (1<<30) does not work */ - timeout.tv_sec = 0; - timeout.tv_usec = 10000; - FD_ZERO(&readfds); - FD_SET(fd,&readfds); - high = select(fd+1,&readfds,NULL,NULL,block==Ct ? NULL : &timeout); - if (high > 0) - { object bufp = SOCKET_STREAM_BUFFER(strm); - int n; - n = SAFE_READ(fd,bufp->st.st_self ,bufp->ust.ust_dim); + struct timeval t,t1={0,10000},*tp=block==Ct ? NULL : &t; + int high,n; + + FD_ZERO(&readfds); + FD_SET(fd,&readfds); + + for (;(errno=0,t=t1,high=select(fd+1,&readfds,NULL,NULL,tp))==-1 && !tp && errno==EINTR;); + + if (high > 0) { + + massert((n=SAFE_READ(fd,bufp->st.st_self,bufp->ust.ust_dim))>=0); + + if (n) { doReverse(bufp->st.st_self,n); bufp->ust.ust_fillp=n; - if (n > 0) - { - dprintf("getchar returns (%c)\n",bufp->ust.ust_self[-1+(bufp->ust.ust_fillp)]); - return bufp->ust.ust_self[--(bufp->ust.ust_fillp)]; - } - else - { - SOCKET_STREAM_FD(strm)=-1; - return EOF; - FEerror("select said there was stuff there but there was not",0); - } - } - /* probably a signal interrupted us.. */ - if (block == Ct) - goto AGAIN; - return EOF; - } + } else + SOCKET_STREAM_FD(strm)=-1; + + return getCharGclSocket(strm,block); + + } + } + + return EOF; + } #else --- gcl-2.6.12.orig/o/prelink.c +++ gcl-2.6.12/o/prelink.c @@ -7,6 +7,7 @@ extern FILE *stdin __attribute__((weak)) extern FILE *stderr __attribute__((weak)); extern FILE *stdout __attribute__((weak)); +#ifdef HAVE_READLINE #if RL_READLINE_VERSION < 0x0600 extern Function *rl_completion_entry_function __attribute__((weak)); extern char *rl_readline_name __attribute__((weak)); @@ -15,6 +16,7 @@ extern rl_compentry_func_t *rl_completio extern const char *rl_readline_name __attribute__((weak)); #endif #endif +#endif void prelink_init(void) { --- gcl-2.6.12.orig/o/sfasli.c +++ gcl-2.6.12/o/sfasli.c @@ -116,14 +116,20 @@ int use_symbols(double d,...) { #ifndef DARWIN + extern void sincos(double,double *,double *); + double d2; + + sincos(d,&d,&d2); - sincos(d,&d,&d); #else + d=sin(d)+cos(d); + d2=sin(d)+cos(d); + #endif - return (int)d; + return (int)(d+d2); } #endif