[ARM] Read memory as unsigned integer

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.
This commit is contained in:
Yao Qi 2016-11-30 11:55:56 +00:00
parent e9a38e0f52
commit 7913a64cab
2 changed files with 14 additions and 8 deletions

View 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> 2016-11-28 Simon Marchi <simon.marchi@polymtl.ca>
* record-full.c (record_full_open_1): Fix debug output. * record-full.c (record_full_open_1): Fix debug output.

View 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 callee (or at the present moment if this is the innermost frame).
The value stored there should be the address of the stmfd + 8. */ The value stored there should be the address of the stmfd + 8. */
CORE_ADDR frame_loc; CORE_ADDR frame_loc;
LONGEST return_value; ULONGEST return_value;
frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM); 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; return;
else else
{ {
@ -2659,19 +2660,19 @@ arm_exidx_unwind_sniffer (const struct frame_unwind *self,
ensure this, so that e.g. pthread cancellation works. */ ensure this, so that e.g. pthread cancellation works. */
if (arm_frame_is_thumb (this_frame)) if (arm_frame_is_thumb (this_frame))
{ {
LONGEST insn; ULONGEST insn;
if (safe_read_memory_integer (get_frame_pc (this_frame) - 2, 2, if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 2,
byte_order_for_code, &insn) 2, byte_order_for_code, &insn)
&& (insn & 0xff00) == 0xdf00 /* svc */) && (insn & 0xff00) == 0xdf00 /* svc */)
exc_valid = 1; exc_valid = 1;
} }
else else
{ {
LONGEST insn; ULONGEST insn;
if (safe_read_memory_integer (get_frame_pc (this_frame) - 4, 4, if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 4,
byte_order_for_code, &insn) 4, byte_order_for_code, &insn)
&& (insn & 0x0f000000) == 0x0f000000 /* svc */) && (insn & 0x0f000000) == 0x0f000000 /* svc */)
exc_valid = 1; exc_valid = 1;
} }