From: Waldemar Brodkorb Date: Mon, 14 Mar 2016 05:01:58 +0000 (+0100) Subject: allow to build arm flat binaries X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=8a3e74446fe7d866f0517ee089a37f4bdf4bc9f7;p=elf2flt.git allow to build arm flat binaries Add patchset from ptxdist which is required to produce working ARM flat binaries. Tested with busybox on Kinetis K70. Signed-off-by: Waldemar Brodkorb Tested-by: Thomas Petazzoni Signed-off-by: Greg Ungerer --- diff --git a/elf2flt.c b/elf2flt.c index fcd797c..7d0e639 100644 --- a/elf2flt.c +++ b/elf2flt.c @@ -56,6 +56,8 @@ const char *elf2flt_progname; #if defined(TARGET_h8300) #include /* TARGET_* ELF support for the BFD library */ +#elif defined(TARGET_arm) +#include #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: diff --git a/elf2flt.ld.in b/elf2flt.ld.in index bfda0ef..ec1fe6f 100644 --- a/elf2flt.ld.in +++ b/elf2flt.ld.in @@ -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 = . ;