]> git.wh0rd.org Git - elf2flt.git/commitdiff
allow to build arm flat binaries
authorWaldemar Brodkorb <wbx@openadk.org>
Mon, 14 Mar 2016 05:01:58 +0000 (06:01 +0100)
committerGreg Ungerer <gerg@uclinux.org>
Sat, 19 Mar 2016 03:44:50 +0000 (13:44 +1000)
Add patchset from ptxdist which is required to produce working
ARM flat binaries. Tested with busybox on Kinetis K70.

Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Greg Ungerer <gerg@uclinux.org>
elf2flt.c
elf2flt.ld.in

index fcd797c5a4b08cee9e05befa30d038505b0c2222..7d0e639c60a61a4d6a5b3c84d58a97a898fe4079 100644 (file)
--- a/elf2flt.c
+++ b/elf2flt.c
@@ -56,6 +56,8 @@ const char *elf2flt_progname;
 
 #if defined(TARGET_h8300)
 #include <elf/h8.h>      /* TARGET_* ELF support for the BFD library            */
+#elif defined(TARGET_arm)
+#include <elf/arm.h>
 #elif defined(__CYGWIN__) || defined(__MINGW32__) || defined(TARGET_nios) || defined(TARGET_nios2)
 #include "cygwin-elf.h"        /* Cygwin uses a local copy */
 #elif defined(TARGET_xtensa)
@@ -451,7 +453,7 @@ dump_symbols(symbols, number_of_symbols);
                qsort (relpp, relcount, sizeof *relpp, compare_relocs);
 #endif
                for (p = relpp; (relcount && (*p != NULL)); p++, relcount--) {
-                       unsigned char *r_mem;
+                       unsigned char *r_mem = NULL;
                        int relocation_needed = 0;
 
 #ifdef TARGET_microblaze
@@ -646,16 +648,23 @@ dump_symbols(symbols, number_of_symbols);
                                default:
                                        goto good_32bit_resolved_reloc;
 #elif defined(TARGET_arm)
+                               case R_ARM_TARGET1:
+                               case R_ARM_TARGET2:
                                case R_ARM_ABS32:
                                        relocation_needed = 1;
                                        break;
                                case R_ARM_REL32:
+                               case R_ARM_JUMP24:
+                               case R_ARM_CALL:
                                case R_ARM_THM_PC11:
                                case R_ARM_THM_PC22:
+                               case R_ARM_THM_JUMP24:
                                case R_ARM_PC24:
                                case R_ARM_PLT32:
                                case R_ARM_GOTPC:
                                case R_ARM_GOT32:
+                               case R_ARM_PREL31:
+                               case R_ARM_NONE:
                                        relocation_needed = 0;
                                        break;
                                default:
index bfda0ef933b84077817a0302c4716a8b6b7f68ed..ec1fe6fc8bf88951f9ad2c757d72bd3c87ea25fb 100644 (file)
@@ -35,6 +35,8 @@ W_RODAT               *(.rodata1)
 W_RODAT                *(.rodata.*)
 W_RODAT                *(.gnu.linkonce.r*)
 
+               /* .ARM.extab name sections containing exception unwinding information */
+               *(.ARM.extab* .gnu.linkonce.armextab.*)
                /* This is special code area at the end of the normal
                   text section.  It contains a small lookup table at
                   the start followed by the code pointed to by entries
@@ -43,11 +45,20 @@ W_RODAT             *(.gnu.linkonce.r*)
                PROVIDE(@SYMBOL_PREFIX@__ctbp = .);
                *(.call_table_data)
                *(.call_table_text)
-
-               . = ALIGN(0x20) ;
-               @SYMBOL_PREFIX@_etext = . ;
        } > flatmem :text
 
+       /* .ARM.exidx name sections containing index entries for section unwinding */
+       /* .ARM.exidx is sorted, so has to go in its own output section.  */
+       @SYMBOL_PREFIX@__exidx_start = .;
+       .ARM.exidx :
+       {
+               *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+       } > flatmem
+       @SYMBOL_PREFIX@__exidx_end = .;
+
+       . = ALIGN(0x20) ;
+       @SYMBOL_PREFIX@_etext = . ;
+
        .data : {
                . = ALIGN(0x4) ;
                @SYMBOL_PREFIX@_sdata = . ;