This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix disassembly of fully-linked --emit-relocs objects on ARM


objdump -dr doesn't work for fully-linked --emit-relocs objects on ARM;
we treat the final relocation field value as an in-place addend for
the reloc.

Dan pointed out that gdb has a similar problem, and checks for:

  if ((bfd_get_file_flags (objfile->obfd) & (EXEC_P | DYNAMIC)) == 0)

This patch does the same in objdump.  Tested on arm-eabi, arm-elf
and arm-wrs-vxworks.  OK to install?

Richard


binutils/
	* objdump.c (disassemble_bytes): Ignore disassembler_needs_relocs
	for executables and shared libraries.

ld/testsuite/
	* ld-arm/emit-relocs1.d, ld-arm/emit-relocs1.s,
	* ld-arm/emit-relocs1-vxworks.d: New tests.
	* ld-arm/arm-elf.exp: Run them.

Index: binutils/objdump.c
===================================================================
RCS file: /cvs/src/src/binutils/objdump.c,v
retrieving revision 1.126
diff -u -p -r1.126 objdump.c
--- binutils/objdump.c	17 May 2007 08:39:22 -0000	1.126
+++ binutils/objdump.c	18 May 2007 15:35:00 -0000
@@ -1377,6 +1377,8 @@ disassemble_bytes (struct disassemble_in
 	      info->flags = 0;
 
 	      if (info->disassembler_needs_relocs
+		  && (bfd_get_file_flags (aux->abfd) & EXEC_P) == 0
+		  && (bfd_get_file_flags (aux->abfd) & DYNAMIC) == 0
 		  && *relppp < relppend)
 		{
 		  bfd_signed_vma distance_to_rel;
Index: ld/testsuite/ld-arm/arm-elf.exp
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-arm/arm-elf.exp,v
retrieving revision 1.25
diff -u -p -r1.25 arm-elf.exp
--- ld/testsuite/ld-arm/arm-elf.exp	15 May 2007 12:22:33 -0000	1.25
+++ ld/testsuite/ld-arm/arm-elf.exp	18 May 2007 15:35:01 -0000
@@ -41,6 +41,7 @@ if {[istarget "arm-*-vxworks"]} {
     }
     run_ld_link_tests $armvxworkstests
     run_dump_test "vxworks1-static"
+    run_dump_test "emit-relocs1-vxworks"
 }
 
 # Exclude non-ARM-ELF targets.
@@ -175,6 +176,7 @@ run_dump_test "group-relocs-ldrs-bad"
 run_dump_test "group-relocs-ldc-bad"
 run_dump_test "thumb2-bl-as-thumb1-bad"
 run_dump_test "thumb2-bl-bad"
+run_dump_test "emit-relocs1"
 
 # Exclude non-ARM-EABI targets.
 
Index: ld/testsuite/ld-arm/emit-relocs1-vxworks.d
===================================================================
RCS file: ld/testsuite/ld-arm/emit-relocs1-vxworks.d
diff -N ld/testsuite/ld-arm/emit-relocs1-vxworks.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-arm/emit-relocs1-vxworks.d	18 May 2007 15:35:01 -0000
@@ -0,0 +1,12 @@
+#source: emit-relocs1.s
+#ld: -Ttext 0x10000 --defsym target=0xc000 -e0 --emit-relocs
+#objdump: -dr
+#...
+ +10000:	e1a00000 	nop	.*
+ +10004:	e1a00000 	nop	.*
+ +10008:	e1a00000 	nop	.*
+ +1000c:	e1a00000 	nop	.*
+ +10010:	eaffeffa 	b	c000 <target>
+	+10010: R_ARM_PC24	target\+0xf+8
+ +10014:	eaffeffd 	b	c010 <target\+0x10>
+	+10014: R_ARM_PC24	target\+0x8
Index: ld/testsuite/ld-arm/emit-relocs1.d
===================================================================
RCS file: ld/testsuite/ld-arm/emit-relocs1.d
diff -N ld/testsuite/ld-arm/emit-relocs1.d
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-arm/emit-relocs1.d	18 May 2007 15:35:01 -0000
@@ -0,0 +1,12 @@
+#source: emit-relocs1.s
+#ld: -Ttext 0x10000 --defsym target=0xc000 -e0 --emit-relocs
+#objdump: -dr
+#...
+ +10000:	e1a00000 	nop	.*
+ +10004:	e1a00000 	nop	.*
+ +10008:	e1a00000 	nop	.*
+ +1000c:	e1a00000 	nop	.*
+ +10010:	eaffeffa 	b	c000 <target>
+	+10010: R_ARM_(JUMP|PC)24	target
+ +10014:	eaffeffd 	b	c010 <target\+0x10>
+	+10014: R_ARM_(JUMP|PC)24	target
Index: ld/testsuite/ld-arm/emit-relocs1.s
===================================================================
RCS file: ld/testsuite/ld-arm/emit-relocs1.s
diff -N ld/testsuite/ld-arm/emit-relocs1.s
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ld/testsuite/ld-arm/emit-relocs1.s	18 May 2007 15:35:01 -0000
@@ -0,0 +1,6 @@
+	nop
+	nop
+	nop
+	nop
+	b	target
+	b	target+16
Index: ld/testsuite/ld-arm/vxworks1.dd
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-arm/vxworks1.dd,v
retrieving revision 1.2
diff -u -p -r1.2 vxworks1.dd
--- ld/testsuite/ld-arm/vxworks1.dd	10 May 2007 17:00:03 -0000	1.2
+++ ld/testsuite/ld-arm/vxworks1.dd	18 May 2007 15:35:01 -0000
@@ -26,11 +26,11 @@ Disassembly of section \.plt:
 Disassembly of section \.text:
 
 00080c00 <_start>:
-   80c00:	ebffff08 	bl	80428 <.*>
+   80c00:	ebffff08 	bl	80828 <.*>
 			80c00: R_ARM_PC24	\.plt\+0x20
-   80c04:	eb000000 	bl	80c14 <sexternal\+0x8>
+   80c04:	eb000000 	bl	80c0c <sexternal>
 			80c04: R_ARM_PC24	sexternal\+0xfffffff8
-   80c08:	eaffff00 	b	80408 <.*>
+   80c08:	eaffff00 	b	80810 <.*>
 			80c08: R_ARM_PC24	\.plt\+0x8
 
 00080c0c <sexternal>:


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]