* irix5-nat.c (fill_gregset): Sign extend registers before
authorPeter Schauer <Peter.Schauer@mytum.de>
Sat, 21 Dec 1996 10:10:43 +0000 (10:10 +0000)
committerPeter Schauer <Peter.Schauer@mytum.de>
Sat, 21 Dec 1996 10:10:43 +0000 (10:10 +0000)
filling in the gregset structure.

gdb/ChangeLog
gdb/irix5-nat.c

index a5682049362e0863748367f8cae64836c3e77be7..772c44c6c1e7179136d0166b4149055dde9e9874 100644 (file)
@@ -1,3 +1,8 @@
+Sat Dec 21 02:08:14 1996  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * irix5-nat.c (fill_gregset):  Sign extend registers before
+       filling in the gregset structure.
+
 Fri Dec 20 11:06:03 1996  Stu Grossman  (grossman@critters.cygnus.com)
 
        * mswin/genmakes:  Don't define _DEBUG.  This breaks wingdb.
index 60ab6894d358d23f47a0522ce233f27e2cec36d1..4ba686a8a1790d6ed4946f043c63ee2bcc034c47 100644 (file)
@@ -75,31 +75,35 @@ fill_gregset (gregsetp, regno)
   int regi;
   register greg_t *regp = &(*gregsetp)[0];
 
+  /* Under Irix6, if GDB is built with N32 ABI and is debugging an O32
+     executable, we have to sign extend the registers to 64 bits before
+     filling in the gregset structure.  */
+
   for (regi = 0; regi <= CTX_RA; regi++)
     if ((regno == -1) || (regno == regi))
       *(regp + regi) =
-       extract_address (&registers[REGISTER_BYTE (regi)],
-                        REGISTER_RAW_SIZE (regi));
+       extract_signed_integer (&registers[REGISTER_BYTE (regi)],
+                               REGISTER_RAW_SIZE (regi));
 
   if ((regno == -1) || (regno == PC_REGNUM))
     *(regp + CTX_EPC) =
-      extract_address (&registers[REGISTER_BYTE (PC_REGNUM)],
-                      REGISTER_RAW_SIZE (PC_REGNUM));
+      extract_signed_integer (&registers[REGISTER_BYTE (PC_REGNUM)],
+                             REGISTER_RAW_SIZE (PC_REGNUM));
 
   if ((regno == -1) || (regno == CAUSE_REGNUM))
     *(regp + CTX_CAUSE) =
-      extract_address (&registers[REGISTER_BYTE (CAUSE_REGNUM)],
-                      REGISTER_RAW_SIZE (CAUSE_REGNUM));
+      extract_signed_integer (&registers[REGISTER_BYTE (CAUSE_REGNUM)],
+                             REGISTER_RAW_SIZE (CAUSE_REGNUM));
 
   if ((regno == -1) || (regno == HI_REGNUM))
     *(regp + CTX_MDHI) =
-      extract_address (&registers[REGISTER_BYTE (HI_REGNUM)],
-                      REGISTER_RAW_SIZE (HI_REGNUM));
+      extract_signed_integer (&registers[REGISTER_BYTE (HI_REGNUM)],
+                             REGISTER_RAW_SIZE (HI_REGNUM));
 
   if ((regno == -1) || (regno == LO_REGNUM))
     *(regp + CTX_MDLO) =
-      extract_address (&registers[REGISTER_BYTE (LO_REGNUM)],
-                      REGISTER_RAW_SIZE (LO_REGNUM));
+      extract_signed_integer (&registers[REGISTER_BYTE (LO_REGNUM)],
+                             REGISTER_RAW_SIZE (LO_REGNUM));
 }
 
 /*