[ARM] Read memory as unsigned integer
authorYao Qi <yao.qi@linaro.org>
Wed, 30 Nov 2016 11:55:56 +0000 (11:55 +0000)
committerYao Qi <yao.qi@linaro.org>
Wed, 30 Nov 2016 11:55:56 +0000 (11:55 +0000)
When GDB read inferior memory as an address or an instruction,
it should be unsigned.

gdb:

2016-11-30  Yao Qi  <yao.qi@linaro.org>

* arm-tdep.c (arm_scan_prologue): Read memory as unsigned integer.
(arm_exidx_unwind_sniffer): Likewise.

gdb/ChangeLog
gdb/arm-tdep.c

index 59c39feca6b7c91a91a062564058cf8d9558ec17..03e5f0fb5991e04ac16395da0c9426201ac999f1 100644 (file)
@@ -1,3 +1,8 @@
+2016-11-30  Yao Qi  <yao.qi@linaro.org>
+
+       * arm-tdep.c (arm_scan_prologue): Read memory as unsigned integer.
+       (arm_exidx_unwind_sniffer): Likewise.
+
 2016-11-28  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * record-full.c (record_full_open_1): Fix debug output.
index 0b93df7ec9bbb4c6d69b74947c7e9468885ba553..fd5d0de552626de0b365309de755c7c4bf65da59 100644 (file)
@@ -1807,10 +1807,11 @@ arm_scan_prologue (struct frame_info *this_frame,
         the callee (or at the present moment if this is the innermost frame).
         The value stored there should be the address of the stmfd + 8.  */
       CORE_ADDR frame_loc;
-      LONGEST return_value;
+      ULONGEST return_value;
 
       frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
-      if (!safe_read_memory_integer (frame_loc, 4, byte_order, &return_value))
+      if (!safe_read_memory_unsigned_integer (frame_loc, 4, byte_order,
+                                             &return_value))
         return;
       else
         {
@@ -2659,19 +2660,19 @@ arm_exidx_unwind_sniffer (const struct frame_unwind *self,
         ensure this, so that e.g. pthread cancellation works.  */
       if (arm_frame_is_thumb (this_frame))
        {
-         LONGEST insn;
+         ULONGEST insn;
 
-         if (safe_read_memory_integer (get_frame_pc (this_frame) - 2, 2,
-                                       byte_order_for_code, &insn)
+         if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 2,
+                                                2, byte_order_for_code, &insn)
              && (insn & 0xff00) == 0xdf00 /* svc */)
            exc_valid = 1;
        }
       else
        {
-         LONGEST insn;
+         ULONGEST insn;
 
-         if (safe_read_memory_integer (get_frame_pc (this_frame) - 4, 4,
-                                       byte_order_for_code, &insn)
+         if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 4,
+                                                4, byte_order_for_code, &insn)
              && (insn & 0x0f000000) == 0x0f000000 /* svc */)
            exc_valid = 1;
        }