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-75) unstable; urgency=medium . * Version_2_6_13pre64 Author: Camm Maguire --- 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: 2018-03-22 --- gcl-2.6.12.orig/cmpnew/gcl_cmpif.lsp +++ gcl-2.6.12/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)) --- gcl-2.6.12.orig/cmpnew/gcl_cmpmulti.lsp +++ gcl-2.6.12/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) + &aux (block-p nil) + (*unwind-exit* *unwind-exit*) + (*vs* *vs*) (*clink* *clink*) (*ccb-vs* *ccb-vs*) + top-data) - (dolist** (var vars) + (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,Sh 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;