[PATCH] allow to build arm flat binaries

Waldemar Brodkorb <[email protected]> Sat, 12 Mar 2016 22:09:30 +0100
Newsgroups gmane.linux.uclinux.devel
Message-ID <[email protected]>
Add patchset from ptxdist which is required to produce working
ARM flat binaries. Tested with busybox on Kinetis K70.

Signed-off-by: Waldemar Brodkorb <[email protected]>
---

After this patch is upstream, I want to send an update
patch to buildroot to use your repository. Then I will
take my copy of elf2flt offline.

Without the fprintf changes I get segfaults.

---
 elf2flt.c     |   19 ++++++++++++-------
 elf2flt.ld.in |   17 ++++++++++++++---
 2 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/elf2flt.c b/elf2flt.c
index fcd797c..c6978e1 100644
--- 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)
@@ -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:
@@ -871,9 +880,7 @@ dump_symbols(symbols, number_of_symbols);
 					relocation_needed = 1;
 					if (verbose)
 						fprintf(stderr,
-							"%s vma=0x%x, "
-							"value=0x%"BFD_VMA_FMT"x, "
-							"address=0x%"BFD_VMA_FMT"x "
+							"%s vma=0x%x, value=0x%x, address=0x%x "
 							"sym_addr=0x%x rs=0x%x, opcode=0x%x\n",
 							"ABS32",
 							sym_vma, (*(q->sym_ptr_ptr))->value,
@@ -890,9 +897,7 @@ dump_symbols(symbols, number_of_symbols);
 				case R_ARM_PLT32:
 					if (verbose)
 						fprintf(stderr,
-							"%s vma=0x%x, "
-							"value=0x%"BFD_VMA_FMT"x, "
-							"address=0x%"BFD_VMA_FMT"x "
+							"%s vma=0x%x, value=0x%x, address=0x%x "
 							"sym_addr=0x%x rs=0x%x, opcode=0x%x\n",
 							"PLT32",
 							sym_vma, (*(q->sym_ptr_ptr))->value,
@@ -1446,7 +1451,7 @@ DIS29_RELOCATION:
 				}
 			}
 
-			sprintf(&addstr[0], "+0x%lx", sym_addr - (*(q->sym_ptr_ptr))->value -
+			sprintf(&addstr[0], "+0x%x", sym_addr - (*(q->sym_ptr_ptr))->value -
 					 bfd_section_vma(abs_bfd, sym_section));
 
 
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 = . ;
-- 
1.7.10.4

_______________________________________________
uClinux-dev mailing list
[email protected]
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by [email protected]
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev