ARM: Do not use FP reg when on AAPCS
authorMarius Muench <marius.muench@eurecom.fr>
Tue, 6 Nov 2018 17:51:39 +0000 (10:51 -0700)
committerTom Tromey <tom@tromey.com>
Tue, 6 Nov 2018 17:54:08 +0000 (10:54 -0700)
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.

gdb/ChangeLog
2018-11-06  Marius Muench  <marius.muench@eurecom.fr>

* arm-tdep.c (arm_scan_prologue): Don't dereference FP reg
when on AAPCS.

gdb/ChangeLog
gdb/arm-tdep.c

index 68ecef7728b1dc9d536d434e1ba6f59dae896ff5..bd8ce4bbc363eb45786ead888736c21648b1abac 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-06  Marius Muench  <marius.muench@eurecom.fr>
+
+       * arm-tdep.c (arm_scan_prologue): Don't dereference FP reg
+       when on AAPCS.
+
 2018-11-06  John Baldwin  <jhb@FreeBSD.org>
 
        * riscv-fbsd-nat.c (getregs_supplies): Return true for
index 53eee769263279a5a98a48528b94113255e3c930..0165e925273e17e2c9a05935a1c4c5f0eff63b44 100644 (file)
@@ -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))