From: Camm Maguire Date: Sun, 13 Nov 2022 12:55:14 +0000 (+0000) Subject: X-Git-Tag: archive/raspbian/2.7.1-4+rpi1~2^2^2~53 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=67de1a17e45c8f2981e660a007a7b45ba433c241;p=gcl27.git 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-75) unstable; urgency=medium * Version_2_6_13pre64 Gbp-Pq: Name Version_2_6_13pre65 --- diff --git a/cmpnew/gcl_cmpif.lsp b/cmpnew/gcl_cmpif.lsp index 37633a1..ce75b75 100755 --- a/cmpnew/gcl_cmpif.lsp +++ b/cmpnew/gcl_cmpif.lsp @@ -428,9 +428,8 @@ (wt-label label)))) (if (eq default 't) - (progn (wt-nl "FEerror(\"The ECASE key value ~s is illegal.\",1,V" cvar ");") - (unwind-exit nil 'jump)) - (c2expr default)) + (wt-nl "FEerror(\"The ECASE key value ~s is illegal.\",1,V" cvar ");") + (c2expr default)) (wt "}") (close-inline-blocks)) diff --git a/cmpnew/gcl_cmpmulti.lsp b/cmpnew/gcl_cmpmulti.lsp index d61f3fb..db2a3fe 100755 --- a/cmpnew/gcl_cmpmulti.lsp +++ b/cmpnew/gcl_cmpmulti.lsp @@ -221,56 +221,36 @@ (defun c2multiple-value-bind (vars init-form body - &aux (block-p nil) (labels nil) - (*unwind-exit* *unwind-exit*) - (*vs* *vs*) (*clink* *clink*) (*ccb-vs* *ccb-vs*) - top-data) - (declare (object block-p)) - (multiple-value-check vars init-form) - - (dolist** (var vars) + &aux (block-p nil) + (*unwind-exit* *unwind-exit*) + (*vs* *vs*) (*clink* *clink*) (*ccb-vs* *ccb-vs*) + top-data) + + (multiple-value-check vars init-form) + + (dolist (var vars) (let ((kind (c2var-kind var))) - (declare (object kind)) (if kind (let ((cvar (next-cvar))) (setf (var-kind var) kind) (setf (var-loc var) cvar) (wt-nl) (unless block-p (wt "{") (setq block-p t)) - (wt-var-decl var) - ) - (setf (var-ref var) (vs-push))))) + (wt-var-decl var)) + (setf (var-ref var) (vs-push))))) (let ((*value-to-go* 'top) *top-data*) (c2expr* init-form) (setq top-data *top-data*)) + (and *record-call-info* (record-call-info nil (car top-data))) - (let ((*clink* *clink*) - (*unwind-exit* *unwind-exit*) - (*ccb-vs* *ccb-vs*)) - (do ((vs vars (cdr vs))) - ((endp vs)) - (declare (object vs)) - (push (next-label) labels) - (wt-nl "if(vs_base>=vs_top){") - (reset-top) - (wt-go (car labels)) (wt "}") + + (wt-nl "if(vs_base>vs_top) vs_top=vs_base;*vs_top=Cnil;") + (do ((vs vars (cdr vs))) + ((endp vs)) (c2bind-loc (car vs) '(vs-base 0)) - (unless (endp (cdr vs)) (wt-nl "vs_base++;")))) + (unless (endp (cdr vs)) (wt-nl "if (vs_base>32)); + gotoff=(ul)(got+(a>>32)-1); s=gotoff-p; store_val(where,MASK(16),(s-(short)s)>>16); store_val((void *)where+(a&MASK(32)),MASK(16),s); @@ -23,7 +23,7 @@ s+=a&MASK(32); a=(a>>32)-1; if (s>=ggot1 && sr_addend>>32)); + if (r->r_addend>>32) + fprintf(stderr,"zeroing high addend %lx\n",r->r_addend>>32); + r->r_addend&=0xffffffff; + massert((q&0xffffffff)==q); r->r_addend|=(q<<32); q=(q-gotp)*sizeof(*gs); @@ -111,6 +114,10 @@ label_got_symbols(void *v1,Shdr *sec1,Shdr *sece,Sym *sym1,Sym *syme,const char gotp=*gs+1; } + if (r->r_addend>>32) + fprintf(stderr,"zeroing high addend %lx\n",r->r_addend>>32); + r->r_addend&=0xffffffff; + massert((gotp&0xffffffff)==gotp); r->r_addend|=(gotp<<32); break;