Do arm_abi detection for ELFOSABI_GNU binaries
authorKyle Huey <me@kylehuey.com>
Thu, 28 May 2015 08:12:12 +0000 (09:12 +0100)
committerYao Qi <yao.qi@linaro.org>
Thu, 28 May 2015 08:15:35 +0000 (09:15 +0100)
On ARM systems, gdb must determine which style of breakpoint to use
(see the comments at the beginning of gdb/arm-linux-tdep.c).  In
arm_gdbarch_init we only attempt to extract the eabi version from the
ELF binary if it is a ELFOSABI_NONE binary.  If the binary is
ELFOSABI_GNU instead, we end up defaulting to the old style OABI
syscall breakpoint instruction.  On a Linux kernel built without
CONFIG_OABI_COMPAT, this triggers a SIGILL in ld when attempting to
execute any ELFOSABI_GNU program.
(e.g. https://github.com/raspberrypi/linux/issues/766)

gdb/

2015-05-28  Kyle Huey  <me@kylehuey.com>  (tiny patch)

* gdb/arm-tdep.c (arm_gdbarch_init): Perform arm_abi detection on
ELFOSABI_GNU binaries.

gdb/ChangeLog
gdb/arm-tdep.c

index 971187f..a75d3bb 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-28  Kyle Huey  <me@kylehuey.com>  (tiny patch)
+
+       * gdb/arm-tdep.c (arm_gdbarch_init): Perform arm_abi detection on
+       ELFOSABI_GNU binaries.
+
 2015-05-27  Doug Evans  <dje@google.com>
 
        * dwarf2read.c (lnp_state_machine): New typedef.
index 638855b..750749d 100644 (file)
@@ -9950,7 +9950,7 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
                 anyway, so assume APCS.  */
              arm_abi = ARM_ABI_APCS;
            }
-         else if (ei_osabi == ELFOSABI_NONE)
+         else if (ei_osabi == ELFOSABI_NONE || ei_osabi == ELFOSABI_GNU)
            {
              int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
              int attr_arch, attr_profile;