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]

PATCH: PR ld/11998: Bogus linker warning


Hi,

This patch removes bugos linker warning on zero LMA adjustment.  I
verified that linker generates the same output as binutils 2.20.  I
am checking it in as an obvious fix.


H.J.
---
bfd/

2010-09-09  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/11998
	* elf.c (assign_file_positions_for_load_sections): Don't warn
	zero LMA adjustment.

ld/testsuite/

2010-09-09  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/11998
	* ld-scripts/rgn-at5.d: New.
	* ld-scripts/rgn-at5.s: Likewise.
	* ld-scripts/rgn-at5.t: Likewise.

diff --git a/bfd/elf.c b/bfd/elf.c
index c9e9fab..f5dfcd6 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -4481,8 +4481,9 @@ assign_file_positions_for_load_sections (bfd *abfd,
 	      bfd_vma s_start = sec->lma;
 	      bfd_vma adjust = s_start - p_end;
 
-	      if (s_start < p_end
-		  || p_end < p_start)
+	      if (adjust != 0
+		  && (s_start < p_end
+		      || p_end < p_start))
 		{
 		  (*_bfd_error_handler)
 		    (_("%B: section %A lma %#lx adjusted to %#lx"), abfd, sec,
--- /dev/null	2010-09-09 09:16:30.485584932 -0700
+++ binutils/ld/testsuite/ld-scripts/rgn-at5.d	2010-09-09 12:06:28.871872648 -0700
@@ -0,0 +1,17 @@
+# name: rgn-at5
+# source: rgn-at5.s
+# ld: -T rgn-at5.t -z max-page-size=0x1000
+# objdump: -w -h
+# xfail: rx-*-*
+#   FAILS on the RX because the linker has to set LMA == VMA for the
+#   Renesas loader.
+
+.*:     file format .*
+
+Sections:
+Idx +Name +Size +VMA +LMA +File off +Algn +Flags
+  0 .sec0 +0+2 +0+02000 +0+2000 +0+02000 +.*
+  1 .sec1 +0+2 +0+01000 +0+012c +0+01000 +.*
+  2 .sec2 +0+2 +0+04000 +0+603c +0+04000 +.*
+  3 .sec3 +0+2 +0+05000 +0+412c +0+03000 +.*
+  4 .sec4 +0+2 +0+02002 +0+2002 +0+02002 +.*
--- /dev/null	2010-09-09 09:16:30.485584932 -0700
+++ binutils/ld/testsuite/ld-scripts/rgn-at5.s	2010-09-09 11:55:12.886182438 -0700
@@ -0,0 +1,14 @@
+	.section .sec0, "a"
+	.word 0
+
+	.section .sec1, "a"
+	.word 0x11
+
+	.section .sec2, "a"
+	.word 0x22
+
+	.section .sec3, "a"
+	.word 0x33
+
+	.section .sec4, "a"
+	.word 0x44
--- /dev/null	2010-09-09 09:16:30.485584932 -0700
+++ binutils/ld/testsuite/ld-scripts/rgn-at5.t	2010-09-09 11:55:06.100873301 -0700
@@ -0,0 +1,29 @@
+MEMORY
+{
+  region1        : ORIGIN = 0x1000, LENGTH = 0x1000 ,
+  region2 (r)    :    org = 0x2000, len    =    300
+  region3 (wx)   :      o = 0x4000, l      =      4
+  region4 (!r)   : o = 0x6000 + 60, len    = 0x30 * 0x6
+}
+
+SECTIONS
+{
+  .sec0 : { *(*.sec0) }
+  
+  .sec1 ORIGIN (region1) : AT(LENGTH (region2)) { *(*.sec1) }
+
+  fred = ORIGIN (region1) + LENGTH (region1) ;
+  
+  .sec2 : { *(*.sec2) } > region3 AT> region4
+
+  .sec3 0x5000 : { *(*.sec3) }
+
+  /* In theory we could put:
+
+     /DISCARD/ : { *(*) }
+
+     here as we do not need any other sections for this test.
+     In practice however doing so breaks GOLD as it relies upon
+     being able to create/find various other sections such as
+     .dynamic, .dynsym and .gnu.hash.  */
+}


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