diff options
-rw-r--r-- | bfd/ChangeLog | 4 | ||||
-rw-r--r-- | bfd/peXXigen.c | 12 | ||||
-rw-r--r-- | ld/ChangeLog | 15 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/alignof.exp | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/data.exp | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/default-script.exp | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/default-script1.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/default-script2.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/default-script3.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/default-script4.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/log2.exp | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/print-memory-usage.exp | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-scripts/sizeof.exp | 9 | ||||
-rw-r--r-- | ld/testsuite/ld-undefined/weak-undef.exp | 10 |
14 files changed, 69 insertions, 19 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a43a3c2..6c633eb 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +2021-03-09 Jan Beulich <jbeulich@suse.com> + + * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Diagnose out of range RVA. + 2021-03-05 H.J. Lu <hongjiu.lu@intel.com> PR ld/27425 diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index 513b593..83bbac5 100644 --- a/bfd/peXXigen.c +++ b/bfd/peXXigen.c @@ -933,11 +933,13 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) memcpy (scnhdr_ext->s_name, scnhdr_int->s_name, sizeof (scnhdr_int->s_name)); - PUT_SCNHDR_VADDR (abfd, - ((scnhdr_int->s_vaddr - - pe_data (abfd)->pe_opthdr.ImageBase) - & 0xffffffff), - scnhdr_ext->s_vaddr); + ss = scnhdr_int->s_vaddr - pe_data (abfd)->pe_opthdr.ImageBase; + if (scnhdr_int->s_vaddr < pe_data (abfd)->pe_opthdr.ImageBase) + _bfd_error_handler ("%pB:%.8s: section below image base", + abfd, scnhdr_int->s_name); + else if(ss != (ss & 0xffffffff)) + _bfd_error_handler ("%pB:%.8s: RVA truncated", abfd, scnhdr_int->s_name); + PUT_SCNHDR_VADDR (abfd, ss & 0xffffffff, scnhdr_ext->s_vaddr); /* NT wants the size data to be rounded up to the next NT_FILE_ALIGNMENT, but zero if it has no content (as in .bss, diff --git a/ld/ChangeLog b/ld/ChangeLog index 367aa7b..1b98c81 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,18 @@ +2021-03-09 Jan Beulich <jbeulich@suse.com> + + * testsuite/ld-scripts/alignof.exp, + testsuite/ld-scripts/data.exp, + testsuite/ld-scripts/default-script.exp, + testsuite/ld-scripts/log2.exp, + testsuite/ld-scripts/print-memory-usage.exp, + testsuite/ld-scripts/sizeof.exp, + testsuite/ld-undefined/weak-undef.exp: Set image base to zero + for PE/COFF. + * testsuite/ld-scripts/default-script1.d, + testsuite/ld-scripts/default-script2.d, + testsuite/ld-scripts/default-script3.d, + testsuite/ld-scripts/default-script4.d: Drop xfail and comment. + 2021-03-05 H.J. Lu <hongjiu.lu@intel.com> PR ld/27425 diff --git a/ld/testsuite/ld-scripts/alignof.exp b/ld/testsuite/ld-scripts/alignof.exp index b94f227..44aa931 100644 --- a/ld/testsuite/ld-scripts/alignof.exp +++ b/ld/testsuite/ld-scripts/alignof.exp @@ -32,7 +32,14 @@ if ![ld_assemble $as $srcdir/$subdir/alignof.s tmpdir/alignof.o] { return } -if ![ld_link $ld tmpdir/alignof "-T $srcdir/$subdir/alignof.t tmpdir/alignof.o"] { +if { [is_pecoff_format] } { + set IMAGE_BASE "--image-base 0" +} else { + set IMAGE_BASE "" +} + +if ![ld_link $ld tmpdir/alignof "-T $srcdir/$subdir/alignof.t \ + $IMAGE_BASE tmpdir/alignof.o"] { fail $testname return } diff --git a/ld/testsuite/ld-scripts/data.exp b/ld/testsuite/ld-scripts/data.exp index 772be15..8f7fe2d 100644 --- a/ld/testsuite/ld-scripts/data.exp +++ b/ld/testsuite/ld-scripts/data.exp @@ -20,7 +20,9 @@ # MA 02110-1301, USA. set old_LDFLAGS $LDFLAGS -if { [is_xcoff_format] } then { +if { [is_pecoff_format] } then { + set LDFLAGS "$LDFLAGS --image-base 0" +} elseif { [is_xcoff_format] } then { set LDFLAGS "$LDFLAGS -bnogc" } diff --git a/ld/testsuite/ld-scripts/default-script.exp b/ld/testsuite/ld-scripts/default-script.exp index 9894239..753085e 100644 --- a/ld/testsuite/ld-scripts/default-script.exp +++ b/ld/testsuite/ld-scripts/default-script.exp @@ -21,6 +21,8 @@ set old_ldflags $LDFLAGS if { [istarget spu*-*-*] } { set LDFLAGS "$LDFLAGS --local-store 0:0" +} elseif { [is_pecoff_format] } { + set LDFLAGS "$LDFLAGS --image-base 0" } elseif { [is_xcoff_format] } { set LDFLAGS "$LDFLAGS -bnogc" } diff --git a/ld/testsuite/ld-scripts/default-script1.d b/ld/testsuite/ld-scripts/default-script1.d index ec88067..9775808 100644 --- a/ld/testsuite/ld-scripts/default-script1.d +++ b/ld/testsuite/ld-scripts/default-script1.d @@ -1,8 +1,6 @@ #source: default-script.s #ld: -defsym _START=0x800 -T default-script.t #nm: -n -#xfail: {[is_pecoff_format x86_64-*]} -# Skipped on Mingw64 and Cygwin because the image base defaults to 0x100000000 #... 0*800 . _START diff --git a/ld/testsuite/ld-scripts/default-script2.d b/ld/testsuite/ld-scripts/default-script2.d index b10ac96..39c24e0 100644 --- a/ld/testsuite/ld-scripts/default-script2.d +++ b/ld/testsuite/ld-scripts/default-script2.d @@ -1,8 +1,6 @@ #source: default-script.s #ld: -T default-script.t -defsym _START=0x800 #nm: -n -#xfail: {[is_pecoff_format x86_64-*]} -# Skipped on Mingw64 and Cygwin because the image base defaults to 0x100000000 #... 0*800 . _START diff --git a/ld/testsuite/ld-scripts/default-script3.d b/ld/testsuite/ld-scripts/default-script3.d index 4742bc3..7a7dda6 100644 --- a/ld/testsuite/ld-scripts/default-script3.d +++ b/ld/testsuite/ld-scripts/default-script3.d @@ -1,8 +1,6 @@ #source: default-script.s #ld: -defsym _START=0x800 -dT default-script.t #nm: -n -#xfail: {[is_pecoff_format x86_64-*]} -# Skipped on Mingw64 and Cygwin because the image base defaults to 0x100000000 #... 0*800 . _START diff --git a/ld/testsuite/ld-scripts/default-script4.d b/ld/testsuite/ld-scripts/default-script4.d index 09b6dbf..7f905b3 100644 --- a/ld/testsuite/ld-scripts/default-script4.d +++ b/ld/testsuite/ld-scripts/default-script4.d @@ -1,8 +1,6 @@ #source: default-script.s #ld: --default-script default-script.t -defsym _START=0x800 #nm: -n -#xfail: {[is_pecoff_format x86_64-*]} -# Skipped on Mingw64 and Cygwin because the image base defaults to 0x100000000 #... 0*800 . _START diff --git a/ld/testsuite/ld-scripts/log2.exp b/ld/testsuite/ld-scripts/log2.exp index c91dcc1..ba00d95 100644 --- a/ld/testsuite/ld-scripts/log2.exp +++ b/ld/testsuite/ld-scripts/log2.exp @@ -26,7 +26,14 @@ if {![ld_assemble $as $srcdir/$subdir/log2.s tmpdir/log2.o]} { return } -if {![ld_link $ld tmpdir/log2 "$LDFLAGS -T $srcdir/$subdir/log2.t tmpdir/log2.o"]} { +if { [is_pecoff_format] } { + set IMAGE_BASE "--image-base 0" +} else { + set IMAGE_BASE "" +} + +if {![ld_link $ld tmpdir/log2 "$LDFLAGS -T $srcdir/$subdir/log2.t \ + $IMAGE_BASE tmpdir/log2.o"]} { fail $testname } else { pass $testname diff --git a/ld/testsuite/ld-scripts/print-memory-usage.exp b/ld/testsuite/ld-scripts/print-memory-usage.exp index 74087bf..a84c525 100644 --- a/ld/testsuite/ld-scripts/print-memory-usage.exp +++ b/ld/testsuite/ld-scripts/print-memory-usage.exp @@ -33,6 +33,11 @@ if { [istarget mips*-*-*] return } +set old_LDFLAGS $LDFLAGS +if { [is_pecoff_format] } { + set LDFLAGS "$LDFLAGS --image-base 0" +} + run_ld_link_tests { { "print-memory-usage-1" @@ -66,3 +71,4 @@ run_ld_link_tests { } +set LDFLAGS $old_LDFLAGS diff --git a/ld/testsuite/ld-scripts/sizeof.exp b/ld/testsuite/ld-scripts/sizeof.exp index 6d306c8..4624fa1 100644 --- a/ld/testsuite/ld-scripts/sizeof.exp +++ b/ld/testsuite/ld-scripts/sizeof.exp @@ -27,7 +27,14 @@ if ![ld_assemble $as $srcdir/$subdir/sizeof.s tmpdir/sizeof.o] { return } -if ![ld_link $ld tmpdir/sizeof "$LDFLAGS -T $srcdir/$subdir/sizeof.t tmpdir/sizeof.o"] { +if { [is_pecoff_format] } { + set IMAGE_BASE "--image-base 0" +} else { + set IMAGE_BASE "" +} + +if ![ld_link $ld tmpdir/sizeof "$LDFLAGS -T $srcdir/$subdir/sizeof.t \ + $IMAGE_BASE tmpdir/sizeof.o"] { fail $testname return } diff --git a/ld/testsuite/ld-undefined/weak-undef.exp b/ld/testsuite/ld-undefined/weak-undef.exp index 4f470e5..443dce2 100644 --- a/ld/testsuite/ld-undefined/weak-undef.exp +++ b/ld/testsuite/ld-undefined/weak-undef.exp @@ -23,14 +23,20 @@ # some a.out targets too. set testname "weak undefined data symbols" +if { [is_pecoff_format] } then { + set IMAGE_BASE "--image-base 0" +} else { + set IMAGE_BASE "" +} + if { ![is_elf_format] && ![is_pecoff_format] } then { unsupported $testname } elseif {![ld_assemble $as $srcdir/$subdir/weak-undef.s \ tmpdir/weak-undef.o]} then { # It's OK if .weak doesn't work on this target. unsupported $testname -} elseif {![ld_link $ld tmpdir/weak-undef \ - "tmpdir/weak-undef.o -T $srcdir/$subdir/weak-undef.t"]} then { +} elseif {![ld_link $ld tmpdir/weak-undef "tmpdir/weak-undef.o \ + -T $srcdir/$subdir/weak-undef.t $IMAGE_BASE"]} then { # Weak symbols are broken for non-i386 PE targets. if {! [istarget i?86-*-*]} { setup_xfail *-*-pe* |