Your message dated Mon, 07 Nov 2005 15:17:24 -0800
with message-id <[EMAIL PROTECTED]>
and subject line Bug#289121: fixed in hercules 3.0.2-1
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--------------------------------------
Received: (at submit) by bugs.debian.org; 7 Jan 2005 10:17:07 +0000
>From [EMAIL PROTECTED] Fri Jan 07 02:17:07 2005
Return-path: <[EMAIL PROTECTED]>
Received: from c186057.adsl.hansenet.de (localhost.localdomain) [213.39.186.57] 
        by spohr.debian.org with esmtp (Exim 3.35 1 (Debian))
        id 1CmrB4-0004zm-00; Fri, 07 Jan 2005 02:17:06 -0800
Received: from aj by localhost.localdomain with local (Exim 4.34)
        id 1CmrGm-0002Db-53; Fri, 07 Jan 2005 11:23:00 +0100
To: Debian Bug Tracking System <[EMAIL PROTECTED]>
From: Andreas Jochens <[EMAIL PROTECTED]>
Subject: hercules: FTBFS (amd64/gcc-4.0): invalid lvalue in assignment
Message-Id: <[EMAIL PROTECTED]>
Date: Fri, 07 Jan 2005 11:23:00 +0100
Delivered-To: [EMAIL PROTECTED]
X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2005_01_02 
        (1.212-2003-09-23-exp) on spohr.debian.org
X-Spam-Status: No, hits=-2.5 required=4.0 tests=BAYES_30,DRUGSPAM,HAS_PACKAGE 
        autolearn=no version=2.60-bugs.debian.org_2005_01_02
X-Spam-Level: 

Package: hercules
Severity: normal
Tags: patch

When building 'hercules' on amd64 with gcc-4.0,
I get the following error:

general1.c:3549: error: invalid lvalue in assignment
general1.c: In function 'z900_move_string':
general1.c:3682: error: invalid lvalue in assignment
general1.c:3698: error: invalid lvalue in assignment
general1.c:3699: error: invalid lvalue in assignment
general1.c: In function 'z900_multiply_halfword':
general1.c:3907: error: invalid lvalue in assignment
general1.c: In function 'z900_multiply_halfword_immediate':
general1.c:3929: error: invalid lvalue in assignment
general1.c: In function 'z900_multiply_single_register':
general1.c:3944: error: invalid lvalue in assignment
general1.c: In function 'z900_multiply_single':
general1.c:3965: error: invalid lvalue in assignment
make[3]: *** [general1.o] Error 1
make[3]: Leaving directory `/hercules-2.17.1'

With the attached patch 'hercules' can be compiled
on amd64 using gcc-4.0.

Regards
Andreas Jochens

diff -urN ../tmp-orig/hercules-2.17.1/cckddasd.c ./cckddasd.c
--- ../tmp-orig/hercules-2.17.1/cckddasd.c      2003-01-24 16:53:54.000000000 
+0100
+++ ./cckddasd.c        2005-01-07 10:11:42.648875672 +0100
@@ -2501,7 +2501,7 @@
     /* Inactivate the previous entry */
     if (cckd->l2active)
         cckd->l2active->flags &= ~CCKD_CACHE_ACTIVE;
-    cckd->l2active = (void *)cckd->l2 = NULL;
+    cckd->l2active = cckd->l2 = NULL;
     cckd->sfx = cckd->l1x = -1;
 
 cckd_read_l2_retry:
@@ -2638,7 +2638,7 @@
     {
         cckd = dev->cckd_ext;
         cckd->sfx = cckd->l1x = -1;
-        cckd->l2 = (void *)cckd->l2active = NULL;
+        cckd->l2 = cckd->l2active = NULL;
     }
 
     for (i = 0; i < cckdblk.l2cachenbr && cckdblk.l2cache; i++)
diff -urN ../tmp-orig/hercules-2.17.1/cmpsc.c ./cmpsc.c
--- ../tmp-orig/hercules-2.17.1/cmpsc.c 2003-01-08 03:46:41.000000000 +0100
+++ ./cmpsc.c   2005-01-07 09:58:35.057607744 +0100
@@ -224,8 +224,8 @@
 #if !defined(ADJUSTREGS)
 #define ADJUSTREGS(r, regs, iregs, len) \
 {\
-  GR_A((r), (iregs)) = (GR_A((r), (iregs)) + (len)) & ADDRESS_MAXWRAP((regs));\
-  GR_A((r) + 1, (iregs)) -= (len);\
+  GR_A_COPY((GR_A((r), (iregs)) + (len)) & ADDRESS_MAXWRAP((regs)), (r), 
(iregs));\
+  GR_A_COPY(GR_A((r) + 1, (iregs)) - (len), (r) + 1, (iregs));\
 }
 #endif /* !defined(ADJUSTREGS) */
 
@@ -238,11 +238,11 @@
 #if !defined(COMMITREGS)
 #define COMMITREGS(regs, iregs, r1, r2) \
 {\
-  GR_A(1, (regs)) = GR_A(1, (iregs));\
-  GR_A((r1), (regs)) = GR_A((r1), (iregs));\
-  GR_A((r1) + 1, (regs)) = GR_A((r1) + 1, (iregs));\
-  GR_A((r2), (regs)) = GR_A((r2), (iregs));\
-  GR_A((r2) + 1, (regs)) = GR_A((r2) + 1, (iregs));\
+  GR_A_COPY(GR_A(1, (iregs)), 1, (regs));\
+  GR_A_COPY(GR_A((r1), (iregs)), (r1), (regs));\
+  GR_A_COPY(GR_A((r1) + 1, (iregs)), (r1) + 1, (regs));\
+  GR_A_COPY(GR_A((r2), (iregs)), (r2), (regs));\
+  GR_A_COPY(GR_A((r2) + 1, (iregs)), (r2) + 1, (regs));\
 }
 #endif /* !defined(COMMITREGS) */
 
diff -urN ../tmp-orig/hercules-2.17.1/control.c ./control.c
--- ../tmp-orig/hercules-2.17.1/control.c       2003-01-31 00:27:41.000000000 
+0100
+++ ./control.c 2005-01-07 09:50:49.117441416 +0100
@@ -5746,7 +5746,7 @@
     PERFORM_SERIALIZATION (regs);
 
     /* Clear general register 0 */
-    GR_A(0, regs) = 0;
+    GR_A_COPY(0, 0, regs);
 
 }
 #endif /*defined(FEATURE_TEST_BLOCK)*/
diff -urN ../tmp-orig/hercules-2.17.1/esame.c ./esame.c
--- ../tmp-orig/hercules-2.17.1/esame.c 2003-02-12 21:26:53.000000000 +0100
+++ ./esame.c   2005-01-07 10:10:50.931737872 +0100
@@ -652,7 +652,7 @@
     {
         if( (S64)dreg == -1LL )
             ovf = 1;
-        (S64)dreg = -((S64)dreg);
+        dreg = -((S64)dreg);
     }
 
     /* Store result into R1 register */
@@ -1531,8 +1531,8 @@
 
     RIL(inst, execflag, regs, r1, opcd, i2);
 
-    GR_A(r1, regs) = ((!execflag ? (regs->psw.IA - 6) : regs->ET)
-                               + 2LL*(S32)i2) & ADDRESS_MAXWRAP(regs);
+    GR_A_COPY(((!execflag ? (regs->psw.IA - 6) : regs->ET)
+                               + 2LL*(S32)i2) & ADDRESS_MAXWRAP(regs), r1, 
regs);
 
 } /* end DEF_INST(load_address_relative_long) */
 #endif /*defined(FEATURE_ESAME_N3_ESA390) || defined(FEATURE_ESAME)*/
@@ -2119,7 +2119,7 @@
     j = (r3 & 1) ? (S64)regs->GR_G(r3) : (S64)regs->GR_G(r3+1);
 
     /* Add the increment value to the R1 register */
-    (S64)regs->GR_G(r1) += i;
+    regs->GR_G(r1) = (S64)regs->GR_G(r1) + i;
 
     /* Branch if result compares high */
     if ( (S64)regs->GR_G(r1) > j )
@@ -2160,7 +2160,7 @@
     j = (r3 & 1) ? (S64)regs->GR_G(r3) : (S64)regs->GR_G(r3+1);
 
     /* Add the increment value to the R1 register */
-    (S64)regs->GR_G(r1) += i;
+    regs->GR_G(r1) = (S64)regs->GR_G(r1) + i;
 
     /* Branch if result compares low or equal */
     if ( (S64)regs->GR_G(r1) <= j )
@@ -2202,7 +2202,7 @@
     j = (r3 & 1) ? (S64)regs->GR_G(r3) : (S64)regs->GR_G(r3+1);
 
     /* Add the increment value to the R1 register */
-    (S64)regs->GR_G(r1) += i;
+    regs->GR_G(r1) = (S64)regs->GR_G(r1) + i;
 
     /* Branch if result compares high */
     if ( (S64)regs->GR_G(r1) > j )
@@ -2243,7 +2243,7 @@
     j = (r3 & 1) ? (S64)regs->GR_G(r3) : (S64)regs->GR_G(r3+1);
 
     /* Add the increment value to the R1 register */
-    (S64)regs->GR_G(r1) += i;
+    regs->GR_G(r1) = (S64)regs->GR_G(r1) + i;
 
     /* Branch if result compares low or equal */
     if ( (S64)regs->GR_G(r1) <= j )
@@ -2859,7 +2859,7 @@
     }
 
     /* Load positive value of second operand and set cc */
-    (S64)regs->GR_G(r1) = (S64)regs->GR_G(r2) < 0 ?
+    regs->GR_G(r1) = (S64)regs->GR_G(r2) < 0 ?
                             -((S64)regs->GR_G(r2)) :
                             (S64)regs->GR_G(r2);
 
@@ -2883,7 +2883,7 @@
     gpr2l = (S32)regs->GR_L(r2);
 
     /* Load positive value of second operand and set cc */
-    (S64)regs->GR_G(r1) = gpr2l < 0 ? -gpr2l : gpr2l;
+    regs->GR_G(r1) = gpr2l < 0 ? -gpr2l : gpr2l;
 
     regs->psw.cc = (S64)regs->GR_G(r1) == 0 ? 0 : 2;
 
@@ -2902,7 +2902,7 @@
     RRE(inst, execflag, regs, r1, r2);
 
     /* Load negative value of second operand and set cc */
-    (S64)regs->GR_G(r1) = (S64)regs->GR_G(r2) > 0 ?
+    regs->GR_G(r1) = (S64)regs->GR_G(r2) > 0 ?
                             -((S64)regs->GR_G(r2)) :
                             (S64)regs->GR_G(r2);
 
@@ -2926,7 +2926,7 @@
     gpr2l = (S32)regs->GR_L(r2);
 
     /* Load negative value of second operand and set cc */
-    (S64)regs->GR_G(r1) = gpr2l > 0 ? -gpr2l : gpr2l;
+    regs->GR_G(r1) = gpr2l > 0 ? -gpr2l : gpr2l;
 
     regs->psw.cc = (S64)regs->GR_G(r1) == 0 ? 0 : 1;
 
@@ -2965,7 +2965,7 @@
     RRE(inst, execflag, regs, r1, r2);
 
     /* Copy second operand and set condition code */
-    (S64)regs->GR_G(r1) = (S32)regs->GR_L(r2);
+    regs->GR_G(r1) = (S32)regs->GR_L(r2);
 
     regs->psw.cc = (S64)regs->GR_G(r1) < 0 ? 1 :
                    (S64)regs->GR_G(r1) > 0 ? 2 : 0;
@@ -2995,7 +2995,7 @@
     }
 
     /* Load complement of second operand and set condition code */
-    (S64)regs->GR_G(r1) = -((S64)regs->GR_G(r2));
+    regs->GR_G(r1) = -((S64)regs->GR_G(r2));
 
     regs->psw.cc = (S64)regs->GR_G(r1) < 0 ? 1 :
                    (S64)regs->GR_G(r1) > 0 ? 2 : 0;
@@ -3018,7 +3018,7 @@
     gpr2l = (S32)regs->GR_L(r2);
 
     /* Load complement of second operand and set condition code */
-    (S64)regs->GR_G(r1) = -gpr2l;
+    regs->GR_G(r1) = -gpr2l;
 
     regs->psw.cc = (S64)regs->GR_G(r1) < 0 ? 1 :
                    (S64)regs->GR_G(r1) > 0 ? 2 : 0;
@@ -3383,7 +3383,7 @@
     n = effective_addr2 & 0x3F;
 
     /* Copy and shift the signed value of the R3 register */
-    (S64)regs->GR_G(r1) = (n > 62) ?
+    regs->GR_G(r1) = (n > 62) ?
                     ((S64)regs->GR_G(r3) < 0 ? -1LL : 0) :
                     (S64)regs->GR_G(r3) >> n;
 
@@ -3412,7 +3412,7 @@
     n = ARCH_DEP(vfetch4) ( effective_addr2, b2, regs );
 
     /* Multiply signed operands ignoring overflow */
-    (S64)regs->GR_G(r1) *= (S32)n;
+    regs->GR_G(r1) = (S64)regs->GR_G(r1) * (S32)n;
 
 } /* end DEF_INST(multiply_single_long_fullword) */
 #endif /*defined(FEATURE_ESAME)*/
@@ -3435,7 +3435,7 @@
     n = ARCH_DEP(vfetch8) ( effective_addr2, b2, regs );
 
     /* Multiply signed operands ignoring overflow */
-    (S64)regs->GR_G(r1) *= (S64)n;
+    regs->GR_G(r1) = (S64)regs->GR_G(r1) * (S64)n;
 
 } /* end DEF_INST(multiply_single_long) */
 #endif /*defined(FEATURE_ESAME)*/
@@ -3452,7 +3452,7 @@
     RRE(inst, execflag, regs, r1, r2);
 
     /* Multiply signed registers ignoring overflow */
-    (S64)regs->GR_G(r1) *= (S32)regs->GR_L(r2);
+    regs->GR_G(r1) = (S64)regs->GR_G(r1) * (S32)regs->GR_L(r2);
 
 } /* end DEF_INST(multiply_single_long_fullword_register) */
 #endif /*defined(FEATURE_ESAME)*/
@@ -3469,7 +3469,7 @@
     RRE(inst, execflag, regs, r1, r2);
 
     /* Multiply signed registers ignoring overflow */
-    (S64)regs->GR_G(r1) *= (S64)regs->GR_G(r2);
+    regs->GR_G(r1) = (S64)regs->GR_G(r1) * (S64)regs->GR_G(r2);
 
 } /* end DEF_INST(multiply_single_long_register) */
 #endif /*defined(FEATURE_ESAME)*/
@@ -3488,7 +3488,7 @@
     RI(inst, execflag, regs, r1, opcd, i2);
 
     /* Load operand into register */
-    (S64)regs->GR_G(r1) = (S16)i2;
+    regs->GR_G(r1) = (S16)i2;
 
 } /* end DEF_INST(load_long_halfword_immediate) */
 #endif /*defined(FEATURE_ESAME)*/
@@ -3532,7 +3532,7 @@
     RI(inst, execflag, regs, r1, opcd, i2);
 
     /* Multiply register by operand ignoring overflow  */
-    (S64)regs->GR_G(r1) *= (S16)i2;
+    regs->GR_G(r1) = (S64)regs->GR_G(r1) * (S16)i2;
 
 } /* end DEF_INST(multiply_long_halfword_immediate) */
 #endif /*defined(FEATURE_ESAME)*/
@@ -3724,7 +3724,7 @@
     RRE(inst, execflag, regs, r1, r2);
 
     /* Copy second operand to first operand */
-    (S64)regs->GR_G(r1) = (S32)regs->GR_L(r2);
+    regs->GR_G(r1) = (S32)regs->GR_L(r2);
 
 } /* end DEF_INST(load_long_fullword_register) */
 #endif /*defined(FEATURE_ESAME)*/
@@ -4356,7 +4356,7 @@
     RXE(inst, execflag, regs, r1, b2, effective_addr2);
 
     /* Load R1 register from second operand */
-    (S64)regs->GR_G(r1) = (S32)ARCH_DEP(vfetch4) ( effective_addr2, b2, regs );
+    regs->GR_G(r1) = (S32)ARCH_DEP(vfetch4) ( effective_addr2, b2, regs );
 
 } /* end DEF_INST(load_long_fullword) */
 #endif /*defined(FEATURE_ESAME)*/
@@ -4375,7 +4375,7 @@
     RXE(inst, execflag, regs, r1, b2, effective_addr2);
 
     /* Load R1 register from second operand */
-    (S64)regs->GR_G(r1) = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
+    regs->GR_G(r1) = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
 
 } /* end DEF_INST(load_long_halfword) */
 #endif /*defined(FEATURE_ESAME)*/
@@ -4958,9 +4958,9 @@
         len--;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r1 + 1, regs) = len;
-        GR_A(r2, regs) = addr2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(len, r1 + 1, regs);
+        GR_A_COPY(addr2, r2, regs);
 
         /* Set cc0 when all values have been processed */
         regs->psw.cc = len ? 3 : 0;
@@ -5030,9 +5030,9 @@
         len--;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r1 + 1, regs) = len;
-        GR_A(r2, regs) = addr2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(len, r1 + 1, regs);
+        GR_A_COPY(addr2, r2, regs);
 
         /* Set cc0 when all values have been processed */
         regs->psw.cc = len ? 3 : 0;
@@ -5104,9 +5104,9 @@
         len -= 2;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r1 + 1, regs) = len;
-        GR_A(r2, regs) = addr2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(len, r1 + 1, regs);
+        GR_A_COPY(addr2, r2, regs);
 
         /* Set cc0 when all values have been processed */
         regs->psw.cc = len ? 3 : 0;
@@ -5177,9 +5177,9 @@
         len -= 2;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r1 + 1, regs) = len;
-        GR_A(r2, regs) = addr2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(len, r1 + 1, regs);
+        GR_A_COPY(addr2, r2, regs);
 
         /* Set cc0 when all values have been processed */
         regs->psw.cc = len ? 3 : 0;
@@ -5265,10 +5265,10 @@
         len1 -= 2;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r1 + 1, regs) = len1;
-        GR_A(r3, regs) = addr3;
-        GR_A(r3 + 1, regs) = len3;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(len1, r1 + 1, regs);
+        GR_A_COPY(addr3, r3, regs);
+        GR_A_COPY(len3, r3 + 1, regs);
 
     } /* end for(i) */
 
@@ -5358,10 +5358,10 @@
     } /* end for(i) */
 
     /* Update the registers */
-    GR_A(r1, regs) = addr1;
-    GR_A(r1 + 1, regs) = len1;
-    GR_A(r3, regs) = addr3;
-    GR_A(r3 + 1, regs) = len3;
+    GR_A_COPY(addr1, r1, regs);
+    GR_A_COPY(len1, r1 + 1, regs);
+    GR_A_COPY(addr3, r3, regs);
+    GR_A_COPY(len3, r3 + 1, regs);
 
     regs->psw.cc = cc;
 
diff -urN ../tmp-orig/hercules-2.17.1/feature.h ./feature.h
--- ../tmp-orig/hercules-2.17.1/feature.h       2003-01-24 16:53:54.000000000 
+0100
+++ ./feature.h 2005-01-07 09:39:11.323522216 +0100
@@ -70,6 +70,7 @@
 #undef CR
 #undef GR
 #undef GR_A
+#undef GR_A_COPY
 #undef MONCODE
 #undef TEA
 #undef DXC
@@ -162,6 +163,7 @@
 #define CR(_r) CR_L(_r)
 #define GR(_r) GR_L(_r)
 #define GR_A(_r, _regs) ((_regs)->GR_L((_r)))
+#define GR_A_COPY(source, _r, _regs) ((_regs)->GR_L((_r))) = source
 #define MONCODE MC_L
 #define TEA    EA_L
 #define DXC     tea
@@ -262,6 +264,7 @@
 #define CR(_r) CR_L(_r)
 #define GR(_r) GR_L(_r)
 #define GR_A(_r, _regs) ((_regs)->GR_L((_r)))
+#define GR_A_COPY(source, _r, _regs) ((_regs)->GR_L((_r))) = source
 #define MONCODE MC_L
 #define TEA    EA_L
 #define DXC     tea
@@ -362,6 +365,7 @@
 #define CR(_r) CR_G(_r)
 #define GR(_r) GR_G(_r)
 #define GR_A(_r, _regs) ((_regs)->psw.amode64 ? (_regs)->GR_G((_r)) : 
(_regs)->GR_L((_r)))
+#define GR_A_COPY(source, _r, _regs) if ((_regs)->psw.amode64) 
(_regs)->GR_G((_r)) = source; else (_regs)->GR_L((_r)) = source
 #define MONCODE MC_G
 #define TEA    EA_G
 #define DXC     dataexc
diff -urN ../tmp-orig/hercules-2.17.1/general1.c ./general1.c
--- ../tmp-orig/hercules-2.17.1/general1.c      2003-01-24 16:53:55.000000000 
+0100
+++ ./general1.c        2005-01-07 09:42:46.477813792 +0100
@@ -98,7 +98,7 @@
     RX(inst, execflag, regs, r1, b2, effective_addr2);
 
     /* Load 2 bytes from operand address */
-    (S32)n = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
+    n = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
 
     /* Add signed operands and set condition code */
     regs->psw.cc =
@@ -821,7 +821,7 @@
     j = (r3 & 1) ? (S32)regs->GR_L(r3) : (S32)regs->GR_L(r3+1);
 
     /* Add the increment value to the R1 register */
-    (S32)regs->GR_L(r1) += i;
+    regs->GR_L(r1) = (S32)regs->GR_L(r1) + i;
 
     /* Branch if result compares high */
     if ( (S32)regs->GR_L(r1) > j )
@@ -860,7 +860,7 @@
     j = (r3 & 1) ? (S32)regs->GR_L(r3) : (S32)regs->GR_L(r3+1);
 
     /* Add the increment value to the R1 register */
-    (S32)regs->GR_L(r1) += i;
+    regs->GR_L(r1) = (S32)regs->GR_L(r1) + i;
 
     /* Branch if result compares low or equal */
     if ( (S32)regs->GR_L(r1) <= j )
@@ -1001,7 +1001,7 @@
     j = (r3 & 1) ? (S32)regs->GR_L(r3) : (S32)regs->GR_L(r3+1);
 
     /* Add the increment value to the R1 register */
-    (S32)regs->GR_L(r1) += i;
+    regs->GR_L(r1) = (S32)regs->GR_L(r1) + i;
 
     /* Branch if result compares high */
     if ( (S32)regs->GR_L(r1) > j )
@@ -1042,7 +1042,7 @@
     j = (r3 & 1) ? (S32)regs->GR_L(r3) : (S32)regs->GR_L(r3+1);
 
     /* Add the increment value to the R1 register */
-    (S32)regs->GR_L(r1) += i;
+    regs->GR_L(r1) = (S32)regs->GR_L(r1) + i;
 
     /* Branch if result compares low or equal */
     if ( (S32)regs->GR_L(r1) <= j )
@@ -1138,8 +1138,8 @@
     regs->GR_L(r1) = dreg;
 
     /* Update the operand address and length registers */
-    GR_A(r2, regs) = addr2;
-    GR_A(r2+1, regs) = len;
+    GR_A_COPY(addr2, r2, regs);
+    GR_A_COPY(len, r2+1, regs);
 
     /* Set condition code 0 or 3 */
     regs->psw.cc = cc;
@@ -1414,7 +1414,7 @@
     RX(inst, execflag, regs, r1, b2, effective_addr2);
 
     /* Load rightmost 2 bytes of comparand from operand address */
-    (S32)n = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
+    n = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
 
     /* Compare signed operands and set condition code */
     regs->psw.cc =
@@ -1641,8 +1641,8 @@
         /* Update Regs if cross half page - may get access rupt */
         if ((addr1 & 0x7ff) == 0 || (addr2 & 0x7ff) == 0)
         {
-            GR_A(r1, regs) = addr1;
-            GR_A(r2, regs) = addr2;
+            GR_A_COPY(addr1, r1, regs);
+            GR_A_COPY(addr2, r2, regs);
 
             regs->GR_LA24(r1+1) = len1;
             regs->GR_LA24(r2+1) = len2;
@@ -1663,8 +1663,8 @@
     } /* end while(len1||len2) */
 
     /* Update the registers */
-    GR_A(r1, regs) = addr1;
-    GR_A(r2, regs) = addr2;
+    GR_A_COPY(addr1, r1, regs);
+    GR_A_COPY(addr2, r2, regs);
 
     regs->GR_LA24(r1+1) = len1;
     regs->GR_LA24(r2+1) = len2;
@@ -1745,10 +1745,10 @@
     } /* end for(i) */
 
     /* Update the registers */
-    GR_A(r1, regs) = addr1;
-    GR_A(r1+1, regs) = len1;
-    GR_A(r3, regs) = addr2;
-    GR_A(r3+1, regs) = len2;
+    GR_A_COPY(addr1, r1, regs);
+    GR_A_COPY(len1, r1+1, regs);
+    GR_A_COPY(addr2, r3, regs);
+    GR_A_COPY(len2, r3+1, regs);
 
     regs->psw.cc = cc;
 
@@ -1827,8 +1827,8 @@
     } /* end for(i) */
 
     /* Set R1 and R2 to point to current character of each operand */
-    GR_A(r1, regs) = addr1;
-    GR_A(r2, regs) = addr2;
+    GR_A_COPY(addr1, r1, regs) = addr1;
+    GR_A_COPY(addr2, r2, regs) = addr2;
 
     /* Set condition code */
     regs->psw.cc =  cc;
@@ -1873,8 +1873,8 @@
     addr2 = regs->GR(r2) & ADDRESS_MAXWRAP(regs);
 
     /* update regs so unused bits zeroed */
-    GR_A(r1, regs) = addr1;
-    GR_A(r2, regs) = addr2;
+    GR_A_COPY(addr1, r1, regs);
+    GR_A_COPY(addr2, r2, regs);
 
     /* Load signed operand lengths from R1+1 and R2+1 */
     len1 =
@@ -1986,12 +1986,12 @@
         if ((addr1 & 0x7FF) == 0 || (addr2 & 0x7FF) == 0)
             {
                 /* Update R1 and R2 to point to next bytes to compare */
-                GR_A(r1, regs) = addr1;
-                GR_A(r2, regs) = addr2;
+                GR_A_COPY(addr1, r1, regs);
+                GR_A_COPY(addr2, r2, regs);
 
                 /* Set R1+1 and R2+1 to remaining operand lengths */
-                GR_A(r1+1, regs) = len1;
-                GR_A(r2+1, regs) = len2;
+                GR_A_COPY(len1, r1+1, regs);
+                GR_A_COPY(len2, r2+1, regs);
             }
 
         /* If equal byte count has reached substring length
@@ -2008,23 +2008,23 @@
     if (cc < 2)
     {
         /* Update R1 and R2 to point to the equal substring */
-        GR_A(r1, regs) = eqaddr1;
-        GR_A(r2, regs) = eqaddr2;
+        GR_A_COPY(eqaddr1, r1, regs);
+        GR_A_COPY(eqaddr2, r2, regs);
 
         /* Set R1+1 and R2+1 to length remaining in each
            operand after the start of the substring */
-        GR_A(r1+1, regs) = remlen1;
-        GR_A(r2+1, regs) = remlen2;
+        GR_A_COPY(remlen1, r1+1, regs);
+        GR_A_COPY(remlen2, r2+1, regs);
     }
     else
     {
         /* Update R1 and R2 to point to next bytes to compare */
-        GR_A(r1, regs) = addr1;
-        GR_A(r2, regs) = addr2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(addr2, r2, regs);
 
         /* Set R1+1 and R2+1 to remaining operand lengths */
-        GR_A(r1+1, regs) = len1;
-        GR_A(r2+1, regs) = len2;
+        GR_A_COPY(len1, r1+1, regs);
+        GR_A_COPY(len2, r2+1, regs);
     }
 
     /* Set condition code */
@@ -2149,10 +2149,10 @@
         len2 = nlen2;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r1+1, regs) = len1;
-        GR_A(r2, regs) = addr2;
-        GR_A(r2+1, regs) = len2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(len1, r1+1, regs);
+        GR_A_COPY(addr2, r2, regs);
+        GR_A_COPY(len2, r2+1, regs);
 
         if (len1 == 0)
             cc = 1;
@@ -2310,10 +2310,10 @@
         len2 -= n + 1;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r1+1, regs) = len1;
-        GR_A(r2, regs) = addr2;
-        GR_A(r2+1, regs) = len2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(len1, r1+1, regs);
+        GR_A_COPY(addr2, r2, regs);
+        GR_A_COPY(len2, r2+1, regs);
 
         if (len1 == 0)
             cc = 1;
@@ -2398,7 +2398,7 @@
     /* Result is negative if sign is X'B' or X'D' */
     if (d == 0x0B || d == 0x0D)
     {
-        (S64)dreg = -((S64)dreg);
+        dreg = -((S64)dreg);
     }
 
     /* Store low-order 32 bits of result into R1 register */
@@ -2928,7 +2928,7 @@
     RX(inst, execflag, regs, r1, b2, effective_addr2);
 
     /* Load operand address into register */
-    GR_A(r1, regs) = effective_addr2;
+    GR_A_COPY(effective_addr2, r1, regs);
 }
 
 
@@ -2945,7 +2945,7 @@
     RX(inst, execflag, regs, r1, b2, effective_addr2);
 
     /* Load operand address into register */
-    GR_A(r1, regs) = effective_addr2;
+    GR_A_COPY(effective_addr2, r1, regs);
 
     /* Load corresponding value into access register */
     if ( PRIMARY_SPACE_MODE(&(regs->psw)) )
@@ -2999,7 +2999,7 @@
     }
 
     /* Load complement of second operand and set condition code */
-    (S32)regs->GR_L(r1) = -((S32)regs->GR_L(r2));
+    regs->GR_L(r1) = -((S32)regs->GR_L(r2));
 
     regs->psw.cc = (S32)regs->GR_L(r1) < 0 ? 1 :
                    (S32)regs->GR_L(r1) > 0 ? 2 : 0;
@@ -3018,7 +3018,7 @@
     RX(inst, execflag, regs, r1, b2, effective_addr2);
 
     /* Load rightmost 2 bytes of register from operand address */
-    (S32)regs->GR_L(r1) = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
+    regs->GR_L(r1) = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
 }
 
 
@@ -3035,7 +3035,7 @@
     RI(inst, execflag, regs, r1, opcd, i2);
 
     /* Load operand into register */
-    (S32)regs->GR_L(r1) = (S16)i2;
+    regs->GR_L(r1) = (S16)i2;
 
 }
 #endif /*defined(FEATURE_IMMEDIATE_AND_RELATIVE)*/
@@ -3085,7 +3085,7 @@
     RR(inst, execflag, regs, r1, r2);
 
     /* Load negative value of second operand and set cc */
-    (S32)regs->GR_L(r1) = (S32)regs->GR_L(r2) > 0 ?
+    regs->GR_L(r1) = (S32)regs->GR_L(r2) > 0 ?
                             -((S32)regs->GR_L(r2)) :
                             (S32)regs->GR_L(r2);
 
@@ -3113,7 +3113,7 @@
     }
 
     /* Load positive value of second operand and set cc */
-    (S32)regs->GR_L(r1) = (S32)regs->GR_L(r2) < 0 ?
+    regs->GR_L(r1) = (S32)regs->GR_L(r2) < 0 ?
                             -((S32)regs->GR_L(r2)) :
                             (S32)regs->GR_L(r2);
 
@@ -3280,8 +3280,8 @@
           || (n <= addr2
                 && (addr1 > addr2 || addr1 <= n)))
         {
-            GR_A(r1, regs) = addr1;
-            GR_A(r2, regs) = addr2;
+            GR_A_COPY(addr1, r1, regs);
+            GR_A_COPY(addr2, r2, regs);
             regs->psw.cc =  3;
 #if 0
             logmsg (_("MVCL destructive overlap: "));
@@ -3325,7 +3325,7 @@
             addr1 &= ADDRESS_MAXWRAP(regs);
 
             /* Update the registers */
-            GR_A(r1, regs) = addr1;
+            GR_A_COPY(addr1, r1, regs);
             regs->GR_LA24(r1+1) = len1;
 
             /* The instruction can be interrupted when a CPU determined
@@ -3368,8 +3368,8 @@
 #endif /*defined(FEATURE_PER)*/
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1 + len1;
-        GR_A(r2, regs) = addr2 + len2;
+        GR_A_COPY(addr1 + len1, r1, regs);
+        GR_A_COPY(addr2 + len2, r2, regs);
         regs->GR_LA24(r1+1) = 0;
         regs->GR_LA24(r2+1) = 0;
         regs->psw.cc = cc;
@@ -3405,8 +3405,8 @@
         len2 -= 256;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r2, regs) = addr2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(addr2, r2, regs);
         regs->GR_LA24(r1+1) = len1;
         regs->GR_LA24(r2+1) = len2;
 
@@ -3448,8 +3448,8 @@
         len1--;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r2, regs) = addr2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(addr2, r2, regs);
         regs->GR_LA24(r1+1) = len1;
         regs->GR_LA24(r2+1) = len2;
 
@@ -3543,10 +3543,10 @@
         len1--;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r1+1, regs) = len1;
-        GR_A(r3, regs) = addr2;
-        GR_A(r3+1, regs) = len2;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(len1, r1+1, regs);
+        GR_A_COPY(addr2, r3, regs);
+        GR_A_COPY(len2, r3+1, regs);
 
     } /* end for(i) */
 
@@ -3679,7 +3679,7 @@
         if (sbyte == termchar)
         {
             /* Set r1 to point to terminating character */
-            GR_A(r1, regs) = addr1;
+            GR_A_COPY(addr1, r1, regs);
 
             /* Set condition code 1 */
             regs->psw.cc = 1;
@@ -3695,8 +3695,8 @@
     } /* end for(i) */
 
     /* Set R1 and R2 to point to next character of each operand */
-    GR_A(r1, regs) = addr1;
-    GR_A(r2, regs) = addr2;
+    GR_A_COPY(addr1, r1, regs);
+    GR_A_COPY(addr2, r2, regs);
 
     /* Set condition code 3 */
     regs->psw.cc = 3;
@@ -3904,7 +3904,7 @@
     RX(inst, execflag, regs, r1, b2, effective_addr2);
 
     /* Load 2 bytes from operand address */
-    (S32)n = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
+    n = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
 
     /* Multiply R1 register by n, ignore leftmost 32 bits of
        result, and place rightmost 32 bits in R1 register */
@@ -3926,7 +3926,7 @@
     RI(inst, execflag, regs, r1, opcd, i2);
 
     /* Multiply register by operand ignoring overflow  */
-    (S32)regs->GR_L(r1) *= (S16)i2;
+    regs->GR_L(r1) = (S32)regs->GR_L(r1) * (S16)i2;
 
 } /* end DEF_INST(multiply_halfword_immediate) */
 
@@ -3941,7 +3941,7 @@
     RRE(inst, execflag, regs, r1, r2);
 
     /* Multiply signed registers ignoring overflow */
-    (S32)regs->GR_L(r1) *= (S32)regs->GR_L(r2);
+    regs->GR_L(r1) = (S32)regs->GR_L(r1) * (S32)regs->GR_L(r2);
 
 } /* end DEF_INST(multiply_single_register) */
 
@@ -3962,7 +3962,7 @@
     n = ARCH_DEP(vfetch4) ( effective_addr2, b2, regs );
 
     /* Multiply signed operands ignoring overflow */
-    (S32)regs->GR_L(r1) *= (S32)n;
+    regs->GR_L(r1) = (S32)regs->GR_L(r1) * (S32)n;
 
 } /* end DEF_INST(multiply_single) */
 #endif /*defined(FEATURE_IMMEDIATE_AND_RELATIVE)*/
diff -urN ../tmp-orig/hercules-2.17.1/general2.c ./general2.c
--- ../tmp-orig/hercules-2.17.1/general2.c      2003-01-31 00:27:43.000000000 
+0100
+++ ./general2.c        2005-01-07 09:51:48.041483600 +0100
@@ -473,7 +473,7 @@
            code 1 and load the address of the character into R1 */
         if (sbyte == termchar)
         {
-            GR_A(r1, regs) = addr2;
+            GR_A_COPY(addr2, r1, regs);
             regs->psw.cc = 1;
             return;
         }
@@ -485,7 +485,7 @@
     } /* end for(i) */
 
     /* Set R2 to point to next character of operand */
-    GR_A(r2, regs) = addr2;
+    GR_A_COPY(addr2, r2, regs);
 
     /* Return condition code 3 */
     regs->psw.cc = 3;
@@ -757,7 +757,7 @@
     n = effective_addr2 & 0x3F;
 
     /* Shift the signed value of the R1 register */
-    (S32)regs->GR_L(r1) = n > 30 ?
+    regs->GR_L(r1) = n > 30 ?
                     ((S32)regs->GR_L(r1) < 0 ? -1 : 0) :
                     (S32)regs->GR_L(r1) >> n;
 
@@ -1122,7 +1122,7 @@
     RX(inst, execflag, regs, r1, b2, effective_addr2);
 
     /* Load 2 bytes from operand address */
-    (S32)n = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
+    n = (S16)ARCH_DEP(vfetch2) ( effective_addr2, b2, regs );
 
     /* Subtract signed operands and set condition code */
     regs->psw.cc =
@@ -1600,8 +1600,8 @@
         len1--;
 
         /* Update the registers */
-        GR_A(r1, regs) = addr1;
-        GR_A(r1+1, regs) = len1;
+        GR_A_COPY(addr1, r1, regs);
+        GR_A_COPY(len1, r1+1, regs);
 
     } /* end for(i) */
 
diff -urN ../tmp-orig/hercules-2.17.1/service.c ./service.c
--- ../tmp-orig/hercules-2.17.1/service.c       2003-01-08 03:46:43.000000000 
+0100
+++ ./service.c 2005-01-07 09:50:31.551111904 +0100
@@ -1194,7 +1194,7 @@
                     }
                 }
                 mcd_len -= obj_len;
-                (BYTE*)obj_hdr += obj_len;
+                obj_hdr = (BYTE*)obj_hdr + obj_len;
             }
     
             /* Indicate Event Processed */
diff -urN ../tmp-orig/hercules-2.17.1/sie.c ./sie.c
--- ../tmp-orig/hercules-2.17.1/sie.c   2003-01-31 00:27:43.000000000 +0100
+++ ./sie.c     2005-01-07 09:59:16.647285152 +0100
@@ -125,7 +125,7 @@
     ARCH_DEP(program_interrupt) (regs, PGM_ADDRESSING_EXCEPTION);
 
     /* Direct pointer to state descriptor block */
-    STATEBK = (void*)(regs->mainstor + effective_addr2);
+    GUESTREGS->siebk = (void*)(regs->mainstor + effective_addr2);
 
     obtain_lock(&sysblk.intlock);
 
diff -urN ../tmp-orig/hercules-2.17.1/timer.c ./timer.c
--- ../tmp-orig/hercules-2.17.1/timer.c 2003-01-31 00:27:43.000000000 +0100
+++ ./timer.c   2005-01-07 09:54:09.422990344 +0100
@@ -140,7 +140,7 @@
          * [2] Decrement the CPU timer for each CPU  *
          *-------------------------------------------*/
 
-        (S64)regs->ptimer -= (S64)sysblk.todclock_diff << 8;
+        regs->ptimer = (S64)regs->ptimer - (S64)sysblk.todclock_diff << 8;
 
         /* Set interrupt flag if the CPU timer is negative */
         if ((S64)regs->ptimer < 0)
@@ -159,7 +159,7 @@
         if(regs->sie_active)
         {
             /* Decrement the guest CPU timer */
-            (S64)regs->guestregs->ptimer -= (S64)sysblk.todclock_diff << 8;
+            regs->guestregs->ptimer = (S64)regs->guestregs->ptimer - 
(S64)sysblk.todclock_diff << 8;
 
             /* Set interrupt flag if the CPU timer is negative */
             if ((S64)regs->guestregs->ptimer < 0)

---------------------------------------
Received: (at 289121-close) by bugs.debian.org; 7 Nov 2005 23:22:25 +0000
>From [EMAIL PROTECTED] Mon Nov 07 15:22:25 2005
Return-path: <[EMAIL PROTECTED]>
Received: from katie by spohr.debian.org with local (Exim 3.36 1 (Debian))
        id 1EZGEu-00083p-00; Mon, 07 Nov 2005 15:17:24 -0800
From: Peter De Schrijver (p2) <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
X-Katie: $Revision: 1.56 $
Subject: Bug#289121: fixed in hercules 3.0.2-1
Message-Id: <[EMAIL PROTECTED]>
Sender: Archive Administrator <[EMAIL PROTECTED]>
Date: Mon, 07 Nov 2005 15:17:24 -0800
Delivered-To: [EMAIL PROTECTED]
X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2005_01_02 
        (1.212-2003-09-23-exp) on spohr.debian.org
X-Spam-Level: 
X-Spam-Status: No, hits=-6.0 required=4.0 tests=BAYES_00,HAS_BUG_NUMBER 
        autolearn=no version=2.60-bugs.debian.org_2005_01_02
X-CrossAssassin-Score: 5

Source: hercules
Source-Version: 3.0.2-1

We believe that the bug you reported is fixed in the latest version of
hercules, which is due to be installed in the Debian FTP archive:

hercules_3.0.2-1.diff.gz
  to pool/main/h/hercules/hercules_3.0.2-1.diff.gz
hercules_3.0.2-1.dsc
  to pool/main/h/hercules/hercules_3.0.2-1.dsc
hercules_3.0.2-1_i386.deb
  to pool/main/h/hercules/hercules_3.0.2-1_i386.deb
hercules_3.0.2.orig.tar.gz
  to pool/main/h/hercules/hercules_3.0.2.orig.tar.gz



A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to [EMAIL PROTECTED],
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Peter De Schrijver (p2) <[EMAIL PROTECTED]> (supplier of updated hercules 
package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [EMAIL PROTECTED])


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.7
Date: Mon, 24 Oct 2005 01:38:32 +0200
Source: hercules
Binary: hercules
Architecture: source i386
Version: 3.0.2-1
Distribution: unstable
Urgency: low
Maintainer: Peter De Schrijver (p2) <[EMAIL PROTECTED]>
Changed-By: Peter De Schrijver (p2) <[EMAIL PROTECTED]>
Description: 
 hercules   - System/370, ESA/390 and z/Architecture Emulator
Closes: 184217 241064 251287 289121 318130
Changes: 
 hercules (3.0.2-1) unstable; urgency=low
 .
   * New maintainer
   * New upstream release (Closes: #289121, #184217, #241064, #251287)
   * Remove x3270 from suggests (Closes: #318130)
Files: 
 bce4c6058dcf26d0232b4af5da90b807 613 otherosfs extra hercules_3.0.2-1.dsc
 d765ad315a1eba281bd816e63d854dc5 1832443 otherosfs extra 
hercules_3.0.2.orig.tar.gz
 6ea7a7583e7c942219a453dd90008752 37032 otherosfs extra hercules_3.0.2-1.diff.gz
 13cde54970f4a638d8f6347bef0ab612 1735988 otherosfs extra 
hercules_3.0.2-1_i386.deb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)

iD8DBQFDb9wuKLKVw/RurbsRAsXdAJoCI9Ca1l+oCxUYWS05L5KCrYp75QCdG4gr
qspIvE9BuqhhvtGMnLohU7Q=
=jghC
-----END PGP SIGNATURE-----


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to