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]

Tweak region overflow check


This patch fixes a problem with region overflow checking on bss-style ALLOC but !LOAD sections. When such sections have an explicitly set LMA, as one might have with:
.data {...} >ram AT>rom
.bss {...} >ram AT>rom
we shouldn't test whether they overflow the LMA region, for they will occupy no space there.


One could not override the bss section's LMA region, I suppose, but that might be confusing. And I for one find it aesthetically unpleasing to have .data and .bss differ in such a manner.

ok?

nathan
--
Nathan Sidwell    ::   http://www.codesourcery.com   ::         CodeSourcery

2008-04-23  Nathan Sidwell  <nathan@codesourcery.com>

	* ldlang.c (lang_size_sections_1): Don't check LMA overflow on
	non-load sections.

	* ld-scripts/rgn-over.exp: Allow -ok file names to pass.
	* ld-scripts/rgn-over8.s: New.
	* ld-scripts/rgn-over8.t: New.
	* ld-scripts/rgn-over8-ok.d: New.

Index: ldlang.c
===================================================================
RCS file: /cvs/src/src/ld/ldlang.c,v
retrieving revision 1.283
diff -c -3 -p -r1.283 ldlang.c
*** ldlang.c	22 Feb 2008 14:19:43 -0000	1.283
--- ldlang.c	23 Apr 2008 20:56:10 -0000
*************** lang_size_sections_1
*** 4699,4705 ****
  		  os_region_check (os, os->region, os->addr_tree,
  				   os->bfd_section->vma);
  
! 		if (os->lma_region != NULL && os->lma_region != os->region)
  		  {
  		    os->lma_region->current
  		      = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
--- 4699,4706 ----
  		  os_region_check (os, os->region, os->addr_tree,
  				   os->bfd_section->vma);
  
! 		if (os->lma_region != NULL && os->lma_region != os->region
! 		    && (os->bfd_section->flags & SEC_LOAD))
  		  {
  		    os->lma_region->current
  		      = os->bfd_section->lma + TO_ADDR (os->bfd_section->size);
Index: testsuite/ld-scripts/rgn-over.exp
===================================================================
RCS file: /cvs/src/src/ld/testsuite/ld-scripts/rgn-over.exp,v
retrieving revision 1.2
diff -c -3 -p -r1.2 rgn-over.exp
*** testsuite/ld-scripts/rgn-over.exp	14 Dec 2007 21:54:50 -0000	1.2
--- testsuite/ld-scripts/rgn-over.exp	23 Apr 2008 20:56:13 -0000
*************** foreach test_file $test_list {
*** 36,52 ****
      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
      }
  }
  set LDFLAGS $old_ldflags
--- 36,54 ----
      verbose $test_name
      run_dump_test $test_name
  
!     if { ! [regexp ".*-ok.d" $test_file] } {
! 	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
  	}
      }
  }
  set LDFLAGS $old_ldflags
Index: testsuite/ld-scripts/rgn-over8-ok.d
===================================================================
RCS file: testsuite/ld-scripts/rgn-over8-ok.d
diff -N testsuite/ld-scripts/rgn-over8-ok.d
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/ld-scripts/rgn-over8-ok.d	23 Apr 2008 20:56:13 -0000
***************
*** 0 ****
--- 1,12 ----
+ # name: rgn-over8
+ # source: rgn-over8.s
+ # ld: -T rgn-over8.t
+ # objdump: -w -h
+ 
+ .*:     file format .*
+ 
+ Sections:
+ Idx +Name +Size +VMA +LMA +File off +Algn +Flags
+   0 .text         0+0000400  0+0000000  0+0000000  [0-9a-f]+  2\*\*0  CONTENTS, ALLOC, LOAD, READONLY, CODE
+   1 .data         0+0000400  0+0001000  0+0000400  [0-9a-f]+  2\*\*0  CONTENTS, ALLOC, LOAD, DATA
+   2 .bss          0+0000400  0+0001400  0+0000800  [0-9a-f]+  2\*\*0  ALLOC
Index: testsuite/ld-scripts/rgn-over8.s
===================================================================
RCS file: testsuite/ld-scripts/rgn-over8.s
diff -N testsuite/ld-scripts/rgn-over8.s
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/ld-scripts/rgn-over8.s	23 Apr 2008 20:56:13 -0000
***************
*** 0 ****
--- 1,7 ----
+ 	.text
+ 	.globl main
+ 	.zero 1024
+ 	.data
+ 	.zero 1024
+ 	.bss
+ 	.zero 1024
Index: testsuite/ld-scripts/rgn-over8.t
===================================================================
RCS file: testsuite/ld-scripts/rgn-over8.t
diff -N testsuite/ld-scripts/rgn-over8.t
*** /dev/null	1 Jan 1970 00:00:00 -0000
--- testsuite/ld-scripts/rgn-over8.t	23 Apr 2008 20:56:13 -0000
***************
*** 0 ****
--- 1,13 ----
+ /* Memory region overflow tests: bss to LMA doesn't cause overflow.  */
+ 
+ MEMORY {
+   rom (rwx) : ORIGIN = 0, LENGTH = 2048
+   ram (rwx) : ORIGIN = 0x1000, LENGTH = 2048
+ }
+ _start = 0x0;
+ SECTIONS {
+   .text : { *(.text) } >rom AT>rom
+   .data : { *(.data) } >ram AT>rom
+   .bss : { *(.bss) } >ram AT>rom
+   /DISCARD/ : { *(*) }
+ }

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