]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Workaround KGDB issues on ARM by ignoring ARM EABI version higher than 5
authorzbb <zbb@FreeBSD.org>
Fri, 30 Oct 2015 12:21:37 +0000 (12:21 +0000)
committerzbb <zbb@FreeBSD.org>
Fri, 30 Oct 2015 12:21:37 +0000 (12:21 +0000)
To make KGDB working, it needs to understand kernel ELF image.
By default it is compiled using EABI_5, which is not supported
on the gdb-6. As a workaround, treat these images as EABI_2 because
they share a lot of things in common.

This workaround does not guarantee ALL funtionalities
to work.

Submitted by:  Wojciech Macek <wma@semihalf.com>
Reviewed by:   jhb
Obtained from: Semihalf
Sponsored by:  Juniper Networks Inc.
Differential Revision: https://reviews.freebsd.org/D4012

contrib/gdb/gdb/arm-tdep.c

index 128219f6ee4696f5d3104d5db662e38d39ae9297..cec90617439f9efaa432aa33f281e38d5df11cde 100644 (file)
@@ -2580,6 +2580,21 @@ arm_elf_osabi_sniffer (bfd *abfd)
              osabi = GDB_OSABI_ARM_EABI_V2;
              break;
 
+           case EF_ARM_EABI_VER3:
+           case EF_ARM_EABI_VER4:
+           case EF_ARM_EABI_VER5:
+             /*
+              * GDB does not support these EABI versions. Fallback
+              * to the highest known to make the KGDB working with
+              * kernel ELF image.
+              */
+             osabi = GDB_OSABI_ARM_EABI_V2;
+             printf ("\n%s:%d "
+                     "arm_elf_osabi_sniffer: Unsupported ARM EABI "
+                     "version 0x%x, falling back to 0x%x\n",
+                     __FILE__, __LINE__, eflags, EF_ARM_EABI_VER2);
+             break;
+
            case EF_ARM_EABI_UNKNOWN:
              /* Assume GNU tools.  */
              osabi = GDB_OSABI_ARM_APCS;