* mips-tdep.c (mips32_relative_offset): Change return type to
authorMark Kettenis <kettenis@gnu.org>
Wed, 10 Nov 2004 17:48:23 +0000 (17:48 +0000)
committerMark Kettenis <kettenis@gnu.org>
Wed, 10 Nov 2004 17:48:23 +0000 (17:48 +0000)
LONGEST, change argument type to ULONGEST.  Fix sign-extension.

gdb/ChangeLog
gdb/mips-tdep.c

index 36694a35bdabb100f60844a6fbe9b922191c0fb4..386d9f7477c7f56bfd90b2d6b727b07dc734aece 100644 (file)
@@ -1,3 +1,8 @@
+2004-11-10  Mark Kettenis  <kettenis@gnu.org>
+
+       * mips-tdep.c (mips32_relative_offset): Change return type to
+       LONGEST, change argument type to ULONGEST.  Fix sign-extension.
+
 2004-11-10  Randolph Chung  <tausq@debian.org>
 
        * hppa-tdep.c (hppa32_register_name, hppa64_register_name): Make static.
index 7ad78dac9cd40530e424428f645998054b7777ac..487e3dacc0be313d6dc777feb3155aeb67398963 100644 (file)
@@ -878,17 +878,10 @@ mips_fetch_instruction (CORE_ADDR addr)
 #define rtype_shamt(x) ((x >> 6) & 0x1f)
 #define rtype_funct(x) (x & 0x3f)
 
-static CORE_ADDR
-mips32_relative_offset (unsigned long inst)
+static LONGEST
+mips32_relative_offset (ULONGEST inst)
 {
-  long x;
-  x = itype_immediate (inst);
-  if (x & 0x8000)              /* sign bit set */
-    {
-      x |= 0xffff0000;         /* sign extension */
-    }
-  x = x << 2;
-  return x;
+  return ((itype_immediate (inst) ^ 0x8000) - 0x8000) << 2;
 }
 
 /* Determine whate to set a single step breakpoint while considering