aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf.c5
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-scripts/rgn-at5.d17
-rw-r--r--ld/testsuite/ld-scripts/rgn-at5.s14
-rw-r--r--ld/testsuite/ld-scripts/rgn-at5.t29
6 files changed, 76 insertions, 2 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index acc0813..0fb449a 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+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.
+
2010-09-09 Bernd Schmidt <bernds@codesourcery.com>
bfd/
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,
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 5730d8c..d4a9b9e 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+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.
+
2010-09-07 Andrew Burgess <aburgess@broadcom.com>
* ld-x86-64/split-by-file.rd: New test.
diff --git a/ld/testsuite/ld-scripts/rgn-at5.d b/ld/testsuite/ld-scripts/rgn-at5.d
new file mode 100644
index 0000000..ad7d98c
--- /dev/null
+++ b/ld/testsuite/ld-scripts/rgn-at5.d
@@ -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 +.*
diff --git a/ld/testsuite/ld-scripts/rgn-at5.s b/ld/testsuite/ld-scripts/rgn-at5.s
new file mode 100644
index 0000000..dbb63ea
--- /dev/null
+++ b/ld/testsuite/ld-scripts/rgn-at5.s
@@ -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
diff --git a/ld/testsuite/ld-scripts/rgn-at5.t b/ld/testsuite/ld-scripts/rgn-at5.t
new file mode 100644
index 0000000..7bcb877
--- /dev/null
+++ b/ld/testsuite/ld-scripts/rgn-at5.t
@@ -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. */
+}