summaryrefslogtreecommitdiffstats
path: root/patches/elf2flt-20110404-g40f0d17/0001-Arm-support-update-exidx-sections.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/elf2flt-20110404-g40f0d17/0001-Arm-support-update-exidx-sections.patch')
-rw-r--r--patches/elf2flt-20110404-g40f0d17/0001-Arm-support-update-exidx-sections.patch115
1 files changed, 115 insertions, 0 deletions
diff --git a/patches/elf2flt-20110404-g40f0d17/0001-Arm-support-update-exidx-sections.patch b/patches/elf2flt-20110404-g40f0d17/0001-Arm-support-update-exidx-sections.patch
new file mode 100644
index 0000000..ccb1d59
--- /dev/null
+++ b/patches/elf2flt-20110404-g40f0d17/0001-Arm-support-update-exidx-sections.patch
@@ -0,0 +1,115 @@
+From: Paul Chavent <paul.chavent@fnac.net>
+Date: Thu, 17 May 2012 08:10:44 +0200
+Subject: [PATCH] Arm support update (exidx sections).
+
+---
+ .gitignore | 1 +
+ elf2flt.c | 27 +++++++++++++++++++++++++++
+ elf2flt.ld.in | 17 ++++++++++++++---
+ 3 files changed, 42 insertions(+), 3 deletions(-)
+
+diff --git a/.gitignore b/.gitignore
+index 92ff5f6..e0e0bd5 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -22,3 +22,4 @@ elf2flt
+ elf2flt.ld
+ flthdr
+ ld-elf2flt
++ld-elf2flt.sh
+\ No newline at end of file
+diff --git a/elf2flt.c b/elf2flt.c
+index 2fea9b5..1a7ef88 100644
+--- a/elf2flt.c
++++ b/elf2flt.c
+@@ -54,6 +54,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_microblaze)
+@@ -639,12 +641,16 @@ dump_symbols(symbols, number_of_symbols);
+ 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_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:
+@@ -1702,6 +1708,27 @@ int main(int argc, char *argv[])
+ }
+ }
+
++ if (verbose) {
++ printf(" verbose = %d\n"
++ " load_to_ram = %d\n"
++ " ktrace = %d\n"
++ " docompress = %d\n"
++ " pfile = \"%s\"\n"
++ " ofile = \"%s\"\n"
++ " use_resolved = %d\n"
++ " stack = %d\n"
++ " rel_file = \"%s\\n",
++ verbose ,
++ load_to_ram ,
++ ktrace ,
++ docompress ,
++ pfile ,
++ ofile ,
++ use_resolved,
++ stack ,
++ rel_file );
++ }
++
+ /*
+ * if neither the -r or -p options was given, default to
+ * a RAM load as that is the only option that makes sense.
+diff --git a/elf2flt.ld.in b/elf2flt.ld.in
+index c7e01a6..56b8f96 100644
+--- a/elf2flt.ld.in
++++ b/elf2flt.ld.in
+@@ -32,6 +32,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
+@@ -40,11 +42,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 = . ;