From 113e68452ed03bd9f48a31036ece530685751112 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Fri, 3 Apr 2009 07:45:28 +0000 Subject: * 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. --- ld/testsuite/ld-scripts/rgn-at.exp | 33 +++++++++++++++++++++++++++++++++ ld/testsuite/ld-scripts/rgn-at.s | 6 ++++++ ld/testsuite/ld-scripts/rgn-at1.d | 12 ++++++++++++ ld/testsuite/ld-scripts/rgn-at1.t | 13 +++++++++++++ ld/testsuite/ld-scripts/rgn-at2.d | 12 ++++++++++++ ld/testsuite/ld-scripts/rgn-at2.t | 14 ++++++++++++++ ld/testsuite/ld-scripts/rgn-at3.d | 12 ++++++++++++ ld/testsuite/ld-scripts/rgn-at3.t | 13 +++++++++++++ 8 files changed, 115 insertions(+) create mode 100644 ld/testsuite/ld-scripts/rgn-at.exp create mode 100644 ld/testsuite/ld-scripts/rgn-at.s create mode 100644 ld/testsuite/ld-scripts/rgn-at1.d create mode 100644 ld/testsuite/ld-scripts/rgn-at1.t create mode 100644 ld/testsuite/ld-scripts/rgn-at2.d create mode 100644 ld/testsuite/ld-scripts/rgn-at2.t create mode 100644 ld/testsuite/ld-scripts/rgn-at3.d create mode 100644 ld/testsuite/ld-scripts/rgn-at3.t (limited to 'ld/testsuite/ld-scripts') 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/ : { *(*) } +} -- cgit v1.1