Description: <short summary of the patch>
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 <camm@debian.org>
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: <vendor|upstream|other>, <url of original patch>
Bug: <url in upstream bugtracker>
Bug-Debian: https://bugs.debian.org/<bugnumber>
Bug-Ubuntu: https://launchpad.net/bugs/<bugnumber>
Forwarded: <no|not-needed|url proving that it has been forwarded>
Reviewed-By: <name and email of someone who approved the patch>
Last-Update: <YYYY-MM-DD>
--- 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<r.rlim_cur;i++)
- close(i);
- errno=0;
-
- if ((i=open("/dev/null",O_RDWR))==-1)
- FEerror("Can't open /dev/null for stdin",0);
- if ((i=dup(i))==-1)
- FEerror("Can't dup",0);
- if ((i=dup(i))==-1)
- FEerror("Can't dup twice",0);
+ close(i);/*FIXME some of this will return error*/
- if (chdir("/"))
- FEerror("Cannot chdir to /",0);
+ massert((i=open("/dev/null",O_RDWR))>=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