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: Improved diagnosis of overflowed memory regions


[ For the curious - I'm doing some contract work for CodeSourcery over the summer. ]

The linker's current diagnostics when a memory region overflows are unhelpful in four ways. First, once a region is full, every output section targeted to that region will generate another "region is full" message. Second, you *also* get a flood of "section overlap" messages for those sections, even though nothing the user did would have caused section overlap if the memory regions were big enough. Third, while you do get a mapfile if you give -Map, the reported position of every section after the one that overflowed the region will be garbage. Fourth, nothing tells you how big the region needs to be.

All these problems can be fixed with a few simple changes to ldlang.c. The only nontrivial bit is that os_region_check was resetting region->current to region->origin on overflow; that was the cause of the section overlap messages and the unhelpful linker maps. As at that point we are definitely not generating output, I believe it is safe to remove it altogether; that makes the memory layout as reported in the mapfile be what it would have been if the memory regions had all been big enough, and section overlap is reported only if it's "real" (i.e. if a region at lower addresses would have to be so big that it overlapped a region at higher addresses.)

OK?

zw

ld:
	* ldlang.c (lang_check_section_addresses): Also report size of
	overflow for any overflowed memory regions.
	(os_region_check): Diagnose an overflowed region only once per
	region.  Do not reset region->current on overflow.
ld/testsuite:
	* ld-scripts/rgn-over.exp: New driver.
	* ld-scripts/rgn-over.s: New file.
	* ld-scripts/rgn-over1.d, ld-scripts/rgn-over1.t
	* ld-scripts/rgn-over2.d, ld-scripts/rgn-over2.t
	* ld-scripts/rgn-over3.d, ld-scripts/rgn-over3.t
	* ld-scripts/rgn-over4.d, ld-scripts/rgn-over4.t
	* ld-scripts/rgn-over5.d, ld-scripts/rgn-over5.t
	* ld-scripts/rgn-over6.d, ld-scripts/rgn-over6.t
	* ld-scripts/rgn-over7.d, ld-scripts/rgn-over7.t:
	New test cases.
===================================================================
Index: ld/ldlang.c
--- ld/ldlang.c	13 Jul 2007 07:34:25 -0000	1.267
+++ ld/ldlang.c	18 Jul 2007 21:31:40 -0000
@@ -4114,7 +4114,8 @@ sort_sections_by_lma (const void *arg1, 
 
 /* Check to see if any allocated sections overlap with other allocated
    sections.  This can happen if a linker script specifies the output
-   section addresses of the two sections.  */
+   section addresses of the two sections.  Also check whether any memory
+   region has overflowed.  */
 
 static void
 lang_check_section_addresses (void)
@@ -4127,6 +4128,7 @@ lang_check_section_addresses (void)
   bfd_vma os_start;
   bfd_vma os_end;
   bfd_size_type amt;
+  lang_memory_region_type *m;
 
   if (bfd_count_sections (output_bfd) <= 1)
     return;
@@ -4175,6 +4177,20 @@ lang_check_section_addresses (void)
     }
 
   free (sections);
+
+  /* If any memory region has overflowed, report by how much.
+     We do not issue this diagnostic for regions that had sections
+     explicitly placed outside their bounds; os_region_check's
+     diagnostics are adequate for that case.
+
+     FIXME: It is conceivable that m->current - (m->origin + m->length)
+     might overflow a 32-bit integer.  There is, alas, no way to print
+     a bfd_vma quantity in decimal.  */
+  for (m = lang_memory_region_list; m; m = m->next)
+    if (m->had_full_message)
+      einfo (_("%X%P: region %s overflowed by %ld bytes\n"),
+	     m->name, (long)(m->current - (m->origin + m->length)));
+
 }
 
 /* Make sure the new address is within the region.  We explicitly permit the
@@ -4202,15 +4218,15 @@ os_region_check (lang_output_section_sta
 		 os->bfd_section->name,
 		 region->name);
 	}
-      else
+      else if (!region->had_full_message)
 	{
-	  einfo (_("%X%P: region %s is full (%B section %s)\n"),
-		 region->name,
+	  region->had_full_message = TRUE;
+
+	  einfo (_("%X%P: %B section %s will not fit in region %s\n"),
 		 os->bfd_section->owner,
-		 os->bfd_section->name);
+		 os->bfd_section->name,
+		 region->name);
 	}
-      /* Reset the region pointer.  */
-      region->current = region->origin;
     }
 }
 
===================================================================
Index: testsuite/ld-scripts/rgn-over.exp
--- testsuite/ld-scripts/rgn-over.exp	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over.exp	18 Jul 2007 21:31:42 -0000
@@ -0,0 +1,46 @@
+# Test for proper diagnosis of overflowed memory regions.
+# Copyright 2007 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-over*.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
+
+    set testname "[file tail $test_name] (map check)"
+    if [file exists $map_file] {
+	# compare the map file to the expectations in the .d file
+	# (run_dump_test can't do that).
+	if [regexp_diff $map_file $test_file] {
+	    fail $testname
+	} else {
+	    pass $testname
+	}
+    } else {
+	untested $testname
+    }
+}
===================================================================
Index: testsuite/ld-scripts/rgn-over.s
--- testsuite/ld-scripts/rgn-over.s	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over.s	18 Jul 2007 21:31:42 -0000
@@ -0,0 +1,9 @@
+	.section .text, "ax", "progbits"
+	.4byte 0x11223344
+	.4byte 0x55667788
+	.4byte 0x99aabbcc
+
+	.section .data, "aw", "progbits"
+	.4byte 0x01020304
+	.4byte 0x05060708
+	.4byte 0x090a0b0c
===================================================================
Index: testsuite/ld-scripts/rgn-over1.d
--- testsuite/ld-scripts/rgn-over1.d	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over1.d	18 Jul 2007 21:31:42 -0000
@@ -0,0 +1,30 @@
+# name: rgn-over1
+# source: rgn-over.s
+# ld: -T rgn-over1.t -Map tmpdir/rgn-over1.map
+# error: \A[^:\n]*?ld[^:\n]*?: [^\n]*?section \.text will not fit in region r1\n[^:\n]*?ld[^:\n]*?: region r1 overflowed by 16 bytes\Z
+
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc
+\s*\*\(\.text\)
+\s*\.text\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc
+\s*\*\(\.data\)
+\s*\.data\s+0x0+100c\s+0xc\s+.*?
+
+LOAD\s+.*?
+OUTPUT\(.*?\)
===================================================================
Index: testsuite/ld-scripts/rgn-over1.t
--- testsuite/ld-scripts/rgn-over1.t	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over1.t	18 Jul 2007 21:31:42 -0000
@@ -0,0 +1,12 @@
+/* Memory region overflow tests: one region, first output sect doesn't fit. */
+
+MEMORY {
+  bss (rwx) : ORIGIN = 0, LENGTH = 0
+  r1  (rwx) : ORIGIN = 0x1000, LENGTH = 8
+}
+_start = 0x1000;
+SECTIONS {
+  .bss  : { *(.bss)  } > bss
+  .text : { *(.text) } > r1
+  .data : { *(.data) } > r1
+}
===================================================================
Index: testsuite/ld-scripts/rgn-over2.d
--- testsuite/ld-scripts/rgn-over2.d	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over2.d	18 Jul 2007 21:31:42 -0000
@@ -0,0 +1,30 @@
+# name: rgn-over2
+# source: rgn-over.s
+# ld: -T rgn-over2.t -Map tmpdir/rgn-over2.map
+# error: \A[^:\n]*?ld[^:\n]*?: [^\n]*?section \.data will not fit in region r1\n[^:\n]*?ld[^:\n]*?: region r1 overflowed by 4 bytes\Z
+
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0014\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc
+\s*\*\(\.text\)
+\s*\.text\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc
+\s*\*\(\.data\)
+\s*\.data\s+0x0+100c\s+0xc\s+.*?
+
+LOAD\s+.*?
+OUTPUT\(.*?\)
===================================================================
Index: testsuite/ld-scripts/rgn-over2.t
--- testsuite/ld-scripts/rgn-over2.t	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over2.t	18 Jul 2007 21:31:42 -0000
@@ -0,0 +1,13 @@
+/* Memory region overflow tests: one region, first output sect fits,
+   second doesn't. */
+
+MEMORY {
+  bss (rwx) : ORIGIN = 0, LENGTH = 0
+  r1 (rwx) : ORIGIN = 0x1000, LENGTH = 20
+}
+_start = 0x1000;
+SECTIONS {
+  .bss  : { *(.bss)  } > bss
+  .text : { *(.text) } > r1
+  .data : { *(.data) } > r1
+}
===================================================================
Index: testsuite/ld-scripts/rgn-over3.d
--- testsuite/ld-scripts/rgn-over3.d	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over3.d	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,31 @@
+# name: rgn-over3
+# source: rgn-over.s
+# ld: -T rgn-over3.t -Map tmpdir/rgn-over3.map
+# error: \A[^:\n]*?ld[^:\n]*?: [^\n]*?section \.text will not fit in region r1\n[^:\n]*?ld[^:\n]*?: [^\n]*?section \.data will not fit in region r2\n[^:\n]*?ld[^:\n]*?: region r1 overflowed by 4 bytes\n[^:\n]*?ld[^:\n]*?: region r2 overflowed by 4 bytes\Z
+
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+r2\s+0x0+2000\s+0x0+0008\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc
+\s*\*\(\.text\)
+\s*\.text\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+2000\s+0xc
+\s*\*\(\.data\)
+\s*\.data\s+0x0+2000\s+0xc\s+.*?
+
+LOAD\s+.*?
+OUTPUT\(.*?\)
===================================================================
Index: testsuite/ld-scripts/rgn-over3.t
--- testsuite/ld-scripts/rgn-over3.t	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over3.t	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,14 @@
+/* Memory region overflow tests: two regions, each too small for the single
+   section placed there. */
+
+MEMORY {
+  bss (rwx) : ORIGIN = 0, LENGTH = 0
+  r1  (rwx) : ORIGIN = 0x1000, LENGTH = 8
+  r2  (rwx) : ORIGIN = 0x2000, LENGTH = 8
+}
+_start = 0x1000;
+SECTIONS {
+  .bss  : { *(.bss)  } > bss
+  .text : { *(.text) } > r1
+  .data : { *(.data) } > r2
+}
===================================================================
Index: testsuite/ld-scripts/rgn-over4.d
--- testsuite/ld-scripts/rgn-over4.d	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over4.d	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,31 @@
+# name: rgn-over4
+# source: rgn-over.s
+# ld: -T rgn-over4.t -Map tmpdir/rgn-over4.map
+# error: \A[^:\n]*?ld[^:\n]*?: [^:\n]*?section \.text will not fit in region r1\n[^:\n]*?ld[^:\n]*?: region r1 overflowed by 16 bytes\Z
+
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+v1\s+0x0+2000\s+0x0+0018\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc\s+load\s+address\s+0x0+2000
+\s*\*\(\.text\)
+\s*\.text\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc\s+load\s+address\s+0x0+200c
+\s*\*\(\.data\)
+\s*\.data\s+0x0+100c\s+0xc\s+.*?
+
+LOAD\s+.*?
+OUTPUT\(.*?\)
===================================================================
Index: testsuite/ld-scripts/rgn-over4.t
--- testsuite/ld-scripts/rgn-over4.t	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over4.t	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,13 @@
+/* Memory region overflow tests: overflow VMA but not LMA.  */
+
+MEMORY {
+  bss (rwx) : ORIGIN = 0, LENGTH = 0
+  r1  (rwx) : ORIGIN = 0x1000, LENGTH = 8
+  v1  (rwx) : ORIGIN = 0x2000, LENGTH = 24
+}
+_start = 0x1000;
+SECTIONS {
+  .bss  : { *(.bss)  } > bss
+  .text : { *(.text) } > r1 AT> v1
+  .data : { *(.data) } > r1 AT> v1
+}
===================================================================
Index: testsuite/ld-scripts/rgn-over5.d
--- testsuite/ld-scripts/rgn-over5.d	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over5.d	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,31 @@
+# name: rgn-over5
+# source: rgn-over.s
+# ld: -T rgn-over5.t -Map tmpdir/rgn-over5.map
+# error: \A[^:\n]*?ld[^:\n]*?: [^\n]*?section \.text will not fit in region v1\n[^:\n]*?ld[^:\n]*?: region v1 overflowed by 16 bytes\Z
+
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0018\s+xrw
+v1\s+0x0+2000\s+0x0+0008\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc\s+load\s+address\s+0x0+2000
+\s*\*\(\.text\)
+\s*\.text\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc\s+load\s+address\s+0x0+200c
+\s*\*\(\.data\)
+\s*\.data\s+0x0+100c\s+0xc\s+.*?
+
+LOAD\s+.*?
+OUTPUT\(.*?\)
===================================================================
Index: testsuite/ld-scripts/rgn-over5.t
--- testsuite/ld-scripts/rgn-over5.t	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over5.t	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,13 @@
+/* Memory region overflow tests: overflow LMA but not VMA.  */
+
+MEMORY {
+  bss (rwx) : ORIGIN = 0, LENGTH = 0
+  r1  (rwx) : ORIGIN = 0x1000, LENGTH = 24
+  v1  (rwx) : ORIGIN = 0x2000, LENGTH = 8
+}
+_start = 0x1000;
+SECTIONS {
+  .bss  : { *(.bss)  } > bss
+  .text : { *(.text) } > r1 AT> v1
+  .data : { *(.data) } > r1 AT> v1
+}
===================================================================
Index: testsuite/ld-scripts/rgn-over6.d
--- testsuite/ld-scripts/rgn-over6.d	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over6.d	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,31 @@
+# name: rgn-over6
+# source: rgn-over.s
+# ld: -T rgn-over6.t -Map tmpdir/rgn-over6.map
+# error: \A[^:\n]*?ld[^:\n]*?: [^\n]*?section \.text will not fit in region r1\n[^:\n]*?ld[^:\n]*?: [^\n]*?section \.text will not fit in region v1\n[^:\n]*?ld[^:\n]*?: region r1 overflowed by 16 bytes\n[^:\n]*?ld[^:\n]*?: region v1 overflowed by 16 bytes\Z
+
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+v1\s+0x0+2000\s+0x0+0008\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc\s+load\s+address\s+0x0+2000
+\s*\*\(\.text\)
+\s*\.text\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+100c\s+0xc\s+load\s+address\s+0x0+200c
+\s*\*\(\.data\)
+\s*\.data\s+0x0+100c\s+0xc\s+.*?
+
+LOAD\s+.*?
+OUTPUT\(.*?\)
===================================================================
Index: testsuite/ld-scripts/rgn-over6.t
--- testsuite/ld-scripts/rgn-over6.t	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over6.t	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,13 @@
+/* Memory region overflow tests: overflow LMA and VMA.  */
+
+MEMORY {
+  bss (rwx) : ORIGIN = 0, LENGTH = 0
+  r1  (rwx) : ORIGIN = 0x1000, LENGTH = 8
+  v1  (rwx) : ORIGIN = 0x2000, LENGTH = 8
+}
+_start = 0x1000;
+SECTIONS {
+  .bss  : { *(.bss)  } > bss
+  .text : { *(.text) } > r1 AT> v1
+  .data : { *(.data) } > r1 AT> v1
+}
===================================================================
Index: testsuite/ld-scripts/rgn-over7.d
--- testsuite/ld-scripts/rgn-over7.d	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over7.d	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,31 @@
+# name: rgn-over7
+# source: rgn-over.s
+# ld: -T rgn-over7.t -Map tmpdir/rgn-over7.map
+# error: \A[^:\n]*?ld[^:\n]*?: [^\n]*?section \.text will not fit in region r1\n[^:\n]*?ld[^:\n]*?: section \.data \[0+1008 -> 0+1013\] overlaps section \.text \[0+1000 -> 0+100b\]\n[^:\n]*?ld[^:\n]*?: region r1 overflowed by 4 bytes\Z
+
+Memory\s+Configuration
+
+Name\s+Origin\s+Length\s+Attributes
+bss\s+0x0+0000\s+0x0+0000\s+xrw
+r1\s+0x0+1000\s+0x0+0008\s+xrw
+r2\s+0x0+1008\s+0x0+000c\s+xrw
+\*default\*\s+0x0+0000\s+0xf+ffff
+
+Linker\s+script\s+and\s+memory\s+map
+
+\s*0x0+1000\s+_start\s+=\s+0x1000
+
+\s*\.bss\s+0x0+0000\s+0x0
+\s*\*\(\.bss\)
+\s*\.bss\s+0x0+0000\s+0x0\s+.*?
+
+\s*\.text\s+0x0+1000\s+0xc
+\s*\*\(\.text\)
+\s*\.text\s+0x0+1000\s+0xc\s+.*?
+
+\s*\.data\s+0x0+1008\s+0xc
+\s*\*\(\.data\)
+\s*\.data\s+0x0+1008\s+0xc\s+.*?
+
+LOAD\s+.*?
+OUTPUT\(.*?\)
===================================================================
Index: testsuite/ld-scripts/rgn-over7.t
--- testsuite/ld-scripts/rgn-over7.t	1 Jan 1970 00:00:00 -0000
+++ testsuite/ld-scripts/rgn-over7.t	18 Jul 2007 21:31:43 -0000
@@ -0,0 +1,13 @@
+/* Memory region overflow tests: overflow r1 plus text/data collision.  */
+
+MEMORY {
+  bss (rwx) : ORIGIN = 0, LENGTH = 0
+  r1  (rwx) : ORIGIN = 0x1000, LENGTH = 8
+  r2  (rwx) : ORIGIN = 0x1008, LENGTH = 12
+}
+_start = 0x1000;
+SECTIONS {
+  .bss  : { *(.bss)  } > bss
+  .text : { *(.text) } > r1
+  .data : { *(.data) } > r2
+}

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