<short summary of the patch>
authorCamm Maguire <camm@debian.org>
Thu, 11 Aug 2022 17:16:42 +0000 (18:16 +0100)
committerCamm Maguire <camm@debian.org>
Thu, 11 Aug 2022 17:16:42 +0000 (18:16 +0100)
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

cmpnew/gcl_cmpif.lsp
cmpnew/gcl_cmpmulti.lsp
cmpnew/gcl_cmptag.lsp
configure
configure.in
h/elf64_alpha_reloc.h
h/elf64_alpha_reloc_special.h

index 37633a11d98a11eadd2d7627c516539a798cdaae..ce75b75e02f0d44efcff2032d4b3680b64d9dba4 100755 (executable)
        (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))
index d61f3fbd74533c08c49ba811a7fa2f4e9f41bb86..db2a3fe92030d9d8518b0f3b51e35abb38a1e076 100755 (executable)
 
 
 (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<vs_top) vs_base++;")))
 
   (wt-nl) (reset-top)
 
-  (let ((label (next-label)))
-    (wt-nl) (wt-go label)
-
-    (setq labels (nreverse labels))
-
-    (dolist** (v vars)
-      (wt-label (car labels))
-      (pop labels)
-      (c2bind-loc v nil))
-
-    (wt-label label))
-
   (c2expr body)
-  (when block-p (wt "}"))
-  )
+  (when block-p (wt "}")))
index 031d37953d3b3fc28126744ee77caa0f5cdfd48b..a1ea2e03ea7515674946eee0987ff1602f078a8e 100755 (executable)
                        (*value-to-go* 'trash))
                   (c2expr (car l))
                   (wt-label *exit*))
-                (unless (eq (caar l) 'go) (unwind-exit nil)))))
+                (unless (member (caar l) '(go return-from)) (unwind-exit nil)))))
       (declare (object l written))
     (cond (written (setq written nil))
           ((typep (car l) 'tag)
index cafd3474a18a5ee6f3575bec2817d96837ded3b9..33aba5c18d9a9c6ad4fa59e5573fa161b1075daf 100755 (executable)
--- a/configure
+++ b/configure
@@ -4159,7 +4159,7 @@ case $use in
        case $use in
            alpha*)
                assert_arg_to_cflags -mieee
-               if test "$enable_debug" != "yes" ; then TO3FLAGS="-O0" ; fi #FIXME needed asof gcc 4.8.1
+#              if test "$enable_debug" != "yes" ; then TO3FLAGS="-O0" ; fi #FIXME needed asof gcc 4.8.1
                ;;
            aarch64*)
                TLIBS="$TLIBS -lgcc_s";;
index baf8c2ca25ff68ec6ef99120e5bb1c0ba99e5d23..6cc7f9707b3c4b3a74cd38be1e818af92f2a9c80 100644 (file)
@@ -382,7 +382,7 @@ case $use in
        case $use in
            alpha*)
                assert_arg_to_cflags -mieee
-               if test "$enable_debug" != "yes" ; then TO3FLAGS="-O0" ; fi #FIXME needed asof gcc 4.8.1
+#              if test "$enable_debug" != "yes" ; then TO3FLAGS="-O0" ; fi #FIXME needed asof gcc 4.8.1
                ;;
            aarch64*)
                TLIBS="$TLIBS -lgcc_s";;
index 5d1dec45bf742f2d893cd5afec01890f49694297..02297f72f3bbc234735a101ec935dfac13a48c69 100644 (file)
@@ -1,5 +1,5 @@
     case R_ALPHA_GPDISP:
-      gotoff=(ul)(got+(a>>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 && s<ggote) {
-        massert(!write_stub(s,(ul *)gotoff,got+a));
+        massert(!write_stub(s,got+a));
       } else 
         got[a]=s;
       store_vals(where,MASK(16),(ul)(got+a)-gotoff);
index 1e43a7e312be8a46da8006b338b4392d95645916..3ee7e0b094f24424a1f3270c67e8fcd49ad432d3 100644 (file)
@@ -1,16 +1,16 @@
 static ul ggot1,ggote,gotoff;
 
 static int
-write_stub(ul s,ul *got,ul *gote) {
+write_stub(ul s,ul *gote) {
 
   unsigned int *goti;
 
   *gote=(ul)(goti=(void *)(gote+2));
   *++gote=s;
-  *goti++=(0x29<<26)|(0x1b<<21)|(0x1d<<16)|((void *)gote-(void *)got);
-  *goti++=(0x29<<26)|(0x1b<<21)|(0x1b<<16)|0;
-  *goti++=(0x1a<<26)|(0x1f<<21)|(0x1b<<16)|0x4000;
-  *goti++=0;
+  *goti++=(0x29<<26)|(0x1b<<21)|(0x1b<<16)|0xfff8; /*ldq       t12,-8(t12)*/
+  *goti++=(0x29<<26)|(0x1b<<21)|(0x1b<<16)|0;      /*ldq       t12,0(t12)*/
+  *goti++=(0x1a<<26)|(0x1f<<21)|(0x1b<<16)|0x4000; /*jsr       zero,(t12),$pc+4*/
+  *goti++=0;                                       /*halt*/
 
   return 0;
   
@@ -94,7 +94,10 @@ label_got_symbols(void *v1,Shdr *sec1,Shdr *sece,Sym *sym1,Sym *syme,const char
 
            q=++*gs;
 
-         massert(!(r->r_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;