diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2009-04-03 07:45:28 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@codesourcery.com> | 2009-04-03 07:45:28 +0000 |
commit | 113e68452ed03bd9f48a31036ece530685751112 (patch) | |
tree | 12447d582791dafd93f0dd90779c035fdc29e687 /ld | |
parent | 4cebb668fe6ee94269a0d7eff61ff7a81a8dfa64 (diff) | |
download | gdb-113e68452ed03bd9f48a31036ece530685751112.zip gdb-113e68452ed03bd9f48a31036ece530685751112.tar.gz gdb-113e68452ed03bd9f48a31036ece530685751112.tar.bz2 |
* ldlang.c (lang_leave_output_section_statement): Set lma_region
if it is not overridden and section is for the same vma region as
the previous section.
* ld-scripts/rgn-at.exp: New.
* ld-scripts/rgn-at.s: New.
* ld-scripts/rgn-at1.d: New.
* ld-scripts/rgn-at1.t: New.
* ld-scripts/rgn-at2.d: New.
* ld-scripts/rgn-at2.t: New.
* ld-scripts/rgn-at3.d: New.
* ld-scripts/rgn-at3.t: New.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rw-r--r-- | ld/ldlang.c | 9 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at.exp | 33 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at.s | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at1.d | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at1.t | 13 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at2.d | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at2.t | 14 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at3.d | 12 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/rgn-at3.t | 13 |
11 files changed, 141 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 0d4e015..78605ab 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,9 @@ +2009-04-03 Nathan Sidwell <nathan@codesourcery.com> + + * ldlang.c (lang_leave_output_section_statement): Set lma_region + if it is not overridden and section is for the same vma region as + the previous section. + 2009-04-02 Dave Korn <dave.korn.cygwin@gmail.com> PR ld/6744 diff --git a/ld/ldlang.c b/ld/ldlang.c index 55d1043..a32dd51 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -6543,6 +6543,15 @@ lang_leave_output_section_statement (fill_type *fill, const char *memspec, memspec, lma_memspec, current_section->load_base != NULL, current_section->addr_tree != NULL); + + /* If this section has no load region or base, but has the same + region as the previous section, then propagate the previous + section's load region. */ + + if (!current_section->lma_region && !current_section->load_base + && current_section->region == current_section->prev->region) + current_section->lma_region = current_section->prev->lma_region; + current_section->fill = fill; current_section->phdrs = phdrs; pop_stat_ptr (); diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 5950091..f29db21 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2009-04-03 Nathan Sidwell <nathan@codesourcery.com> + + * ld-scripts/rgn-at.exp: New. + * ld-scripts/rgn-at.s: New. + * ld-scripts/rgn-at1.d: New. + * ld-scripts/rgn-at1.t: New. + * ld-scripts/rgn-at2.d: New. + * ld-scripts/rgn-at2.t: New. + * ld-scripts/rgn-at3.d: New. + * ld-scripts/rgn-at3.t: New. + 2009-04-03 Dave Korn <dave.korn.cygwin@gmail.com> * ld-pe/export_dynamic_warning.s: Make dummy code portable. diff --git a/ld/testsuite/ld-scripts/rgn-at.exp b/ld/testsuite/ld-scripts/rgn-at.exp new file mode 100644 index 0000000..9095273 --- /dev/null +++ b/ld/testsuite/ld-scripts/rgn-at.exp @@ -0,0 +1,33 @@ +# Test for proper diagnosis of overflowed memory regions. +# Copyright 2009 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. + +if ![is_elf_format] { + return +} + +load_lib ld-lib.exp + +set test_list [lsort [glob -nocomplain $srcdir/$subdir/rgn-at*.d]] +foreach test_file $test_list { + set test_name [file rootname $test_file] + set map_file "tmpdir/[file tail $test_name].map" + verbose $test_name + run_dump_test $test_name +} diff --git a/ld/testsuite/ld-scripts/rgn-at.s b/ld/testsuite/ld-scripts/rgn-at.s new file mode 100644 index 0000000..406f875 --- /dev/null +++ b/ld/testsuite/ld-scripts/rgn-at.s @@ -0,0 +1,6 @@ + .text + .long 0x12345678 + .data + .long 0x9abcdef0 + .bss + .long 0 diff --git a/ld/testsuite/ld-scripts/rgn-at1.d b/ld/testsuite/ld-scripts/rgn-at1.d new file mode 100644 index 0000000..f7de2c3 --- /dev/null +++ b/ld/testsuite/ld-scripts/rgn-at1.d @@ -0,0 +1,12 @@ +# name: rgn-at1 +# source: rgn-at.s +# ld: -T rgn-at1.t +# objdump: -w -h + +.*: file format .* + +Sections: +Idx +Name +Size +VMA +LMA +File off +Algn +Flags + 0 .text +0+[0-9a-f] +0+0010000 +0+0020000 +.* + 1 .data +0+[0-9a-f] +0+00100[0-9a-f]+ +0+00200[0-9a-f]+ +.* + 2 .bss +0+[0-9a-f] +0+00100[0-9a-f]+ +0+00200[0-9a-f]+ +.* diff --git a/ld/testsuite/ld-scripts/rgn-at1.t b/ld/testsuite/ld-scripts/rgn-at1.t new file mode 100644 index 0000000..610be2a --- /dev/null +++ b/ld/testsuite/ld-scripts/rgn-at1.t @@ -0,0 +1,13 @@ +/* Memory region at test, >AT should propagate by default */ + +MEMORY { + ram : ORIGIN = 0x10000, LENGTH = 0x100 + rom : ORIGIN = 0x20000, LENGTH = 0x200 +} +_start = 0x1000; +SECTIONS { + .text : { *(.text) } >ram AT>rom + .data : { *(.data) } >ram /* default AT>rom */ + .bss : { *(.bss) } >ram + /DISCARD/ : { *(*) } +} diff --git a/ld/testsuite/ld-scripts/rgn-at2.d b/ld/testsuite/ld-scripts/rgn-at2.d new file mode 100644 index 0000000..1dae8af --- /dev/null +++ b/ld/testsuite/ld-scripts/rgn-at2.d @@ -0,0 +1,12 @@ +# name: rgn-at2 +# source: rgn-at.s +# ld: -T rgn-at2.t +# objdump: -w -h + +.*: file format .* + +Sections: +Idx +Name +Size +VMA +LMA +File off +Algn +Flags + 0 .text +0+[0-9a-f] +0+0010000 +0+0020000 +.* + 1 .data +0+[0-9a-f] +0+0030000 +0+0030000 +.* + 2 .bss +0+[0-9a-f] +0+00300[0-9a-f]+ +0+00300[0-9a-f]+ +.* diff --git a/ld/testsuite/ld-scripts/rgn-at2.t b/ld/testsuite/ld-scripts/rgn-at2.t new file mode 100644 index 0000000..57fd88c --- /dev/null +++ b/ld/testsuite/ld-scripts/rgn-at2.t @@ -0,0 +1,14 @@ +/* Memory region at test, >AT should propagate by default */ + +MEMORY { + ram : ORIGIN = 0x10000, LENGTH = 0x100 + rom : ORIGIN = 0x20000, LENGTH = 0x200 + other : ORIGIN = 0x30000, LENGTH = 0x200 +} +_start = 0x1000; +SECTIONS { + .text : { *(.text) } >ram AT>rom + .data : { *(.data) } >other /* No default AT>rom */ + .bss : { *(.bss) } >other + /DISCARD/ : { *(*) } +} diff --git a/ld/testsuite/ld-scripts/rgn-at3.d b/ld/testsuite/ld-scripts/rgn-at3.d new file mode 100644 index 0000000..b4ffc74 --- /dev/null +++ b/ld/testsuite/ld-scripts/rgn-at3.d @@ -0,0 +1,12 @@ +# name: rgn-at3 +# source: rgn-at.s +# ld: -T rgn-at3.t +# objdump: -w -h + +.*: file format .* + +Sections: +Idx +Name +Size +VMA +LMA +File off +Algn +Flags + 0 .text +0+[0-9a-f] +0+0010000 +0+0020000 +.* + 1 .data +0+[0-9a-f] +0+00100[0-9a-f]+ +0+0030000 +.* + 2 .bss +0+[0-9a-f] +0+00100[0-9a-f]+ +0+00300[0-9a-f]+ +.* diff --git a/ld/testsuite/ld-scripts/rgn-at3.t b/ld/testsuite/ld-scripts/rgn-at3.t new file mode 100644 index 0000000..4622e7e --- /dev/null +++ b/ld/testsuite/ld-scripts/rgn-at3.t @@ -0,0 +1,13 @@ +/* Memory region at test, >AT should propagate by default */ + +MEMORY { + ram : ORIGIN = 0x10000, LENGTH = 0x100 + rom : ORIGIN = 0x20000, LENGTH = 0x200 +} +_start = 0x1000; +SECTIONS { + .text : { *(.text) } >ram AT>rom + .data : AT (0x30000) { *(.data) } >ram /* NO default AT>rom */ + .bss : { *(.bss) } >ram /* NO default AT>rom */ + /DISCARD/ : { *(*) } +} |