ARM: Do not use FP reg when on AAPCS
Commit Message
Hi all,
GDB tries to dereference the frame pointer in arm_scan_prologue as a
last resort to create frame information.
However, the more recent AAPCS ABI does not make use of a frame pointer.
This patch checks whether the specified arm_abi is AAPCS before
dereferencing the "frame pointer". If so, just return as efforts to use
it for restoring frame information won't work.
Cheers,
Marius
gdb/ChangeLog
2018-10-23 Marius Muench <marius.muench@eurecom.fr>
* arm-tdeb.c (arm_scan_prologue): Don't dereference FP reg
when on aapcs.
---
gdb/arm-tdep.c | 4 ++++
1 file changed, 4 insertions(+)
Comments
On Tue, 23 Oct 2018 15:03:39 +0200
Marius Muench <munch@eurecom.fr> wrote:
> Hi all,
>
> GDB tries to dereference the frame pointer in arm_scan_prologue as a
> last resort to create frame information.
> However, the more recent AAPCS ABI does not make use of a frame pointer.
>
> This patch checks whether the specified arm_abi is AAPCS before
> dereferencing the "frame pointer". If so, just return as efforts to use
> it for restoring frame information won't work.
>
> Cheers,
> Marius
>
> gdb/ChangeLog
> 2018-10-23 Marius Muench <marius.muench@eurecom.fr>
>
> * arm-tdeb.c (arm_scan_prologue): Don't dereference FP reg
> when on aapcs.
Typo on filename above. (s/tdeb/tdep/) While you're changing it,
please capitalize AAPCS too.
Otherwise, okay.
Kevin
@@ -1801,6 +1801,10 @@ arm_scan_prologue (struct frame_info *this_frame,
CORE_ADDR frame_loc;
ULONGEST return_value;
+ /* AAPCS does not use a frame register, so we can abort here. */
+ if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_AAPCS)
+ return;
+
frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
if (!safe_read_memory_unsigned_integer (frame_loc, 4, byte_order,
&return_value))