aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog4
-rw-r--r--bfd/peXXigen.c12
-rw-r--r--ld/ChangeLog15
-rw-r--r--ld/testsuite/ld-scripts/alignof.exp9
-rw-r--r--ld/testsuite/ld-scripts/data.exp4
-rw-r--r--ld/testsuite/ld-scripts/default-script.exp2
-rw-r--r--ld/testsuite/ld-scripts/default-script1.d2
-rw-r--r--ld/testsuite/ld-scripts/default-script2.d2
-rw-r--r--ld/testsuite/ld-scripts/default-script3.d2
-rw-r--r--ld/testsuite/ld-scripts/default-script4.d2
-rw-r--r--ld/testsuite/ld-scripts/log2.exp9
-rw-r--r--ld/testsuite/ld-scripts/print-memory-usage.exp6
-rw-r--r--ld/testsuite/ld-scripts/sizeof.exp9
-rw-r--r--ld/testsuite/ld-undefined/weak-undef.exp10
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*