diff options
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf.c | 5 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at5.d | 17 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at5.s | 14 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at5.t | 29 |
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/ @@ -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. */ +} |