aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-pe
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2021-03-04 16:55:01 +0100
committerJan Beulich <jbeulich@suse.com>2021-03-04 16:55:01 +0100
commit6fa7408d72b3805536e3579ba46b48f07f2e780a (patch)
tree4bf2a749afaa5ad0866b5659d2f4f6534fad2d5d /ld/testsuite/ld-pe
parent1178743e4c05d9c0daad5a105277fbc42872c9ea (diff)
downloadgdb-6fa7408d72b3805536e3579ba46b48f07f2e780a.zip
gdb-6fa7408d72b3805536e3579ba46b48f07f2e780a.tar.gz
gdb-6fa7408d72b3805536e3579ba46b48f07f2e780a.tar.bz2
ld: don't generate base relocations in PE output for absolute symbols
It is the very nature of absolute symbols that they don't change even if the loader decides to put the image at other than its link-time base address. Of the linker-defined (and PE-specific) symbols __image_base__ (and its alias) needs special casing, as it'll still appear to be absolute at this point. A new inquiry function in ldexp.c is needed because PE base relocations get generated before ldexp_finalize_syms() runs, yet whether a relocation is needed depends on the ultimate property of a symbol.
Diffstat (limited to 'ld/testsuite/ld-pe')
-rw-r--r--ld/testsuite/ld-pe/pe.exp2
-rw-r--r--ld/testsuite/ld-pe/reloc.d14
-rw-r--r--ld/testsuite/ld-pe/reloc.s13
3 files changed, 29 insertions, 0 deletions
diff --git a/ld/testsuite/ld-pe/pe.exp b/ld/testsuite/ld-pe/pe.exp
index de9e104..b1a2001 100644
--- a/ld/testsuite/ld-pe/pe.exp
+++ b/ld/testsuite/ld-pe/pe.exp
@@ -76,6 +76,8 @@ run_dump_test "longsecn-5"
run_dump_test "orphan"
run_dump_test "orphan_nu"
+run_dump_test "reloc"
+
run_dump_test "weakdef-1"
run_dump_test "pr19803"
diff --git a/ld/testsuite/ld-pe/reloc.d b/ld/testsuite/ld-pe/reloc.d
new file mode 100644
index 0000000..55888c3
--- /dev/null
+++ b/ld/testsuite/ld-pe/reloc.d
@@ -0,0 +1,14 @@
+#name: PE base relocations
+#ld: --enable-reloc-section
+#objdump: -p
+
+.*: file format .*
+
+#...
+PE File Base Relocations.*
+Virtual Address: .* Number of fixups 4
+[ ]*reloc 0 offset 0 .* (LOW|HIGHLOW|DIR64)
+[ ]*reloc 1 offset [248] .* (LOW|HIGHLOW|DIR64)
+[ ]*reloc 2 offset [124]0 .* (LOW|HIGHLOW|DIR64)
+[ ]*reloc 3 offset 0 .* ABSOLUTE
+#pass
diff --git a/ld/testsuite/ld-pe/reloc.s b/ld/testsuite/ld-pe/reloc.s
new file mode 100644
index 0000000..3ed2e02
--- /dev/null
+++ b/ld/testsuite/ld-pe/reloc.s
@@ -0,0 +1,13 @@
+ .data
+ .p2align 4
+start:
+ .dc.a __image_base__
+ .dc.a start
+ .dc.a __section_alignment__
+ .dc.a __file_alignment__
+ .dc.a __major_os_version__
+ .dc.a __minor_os_version__
+ .dc.a __major_subsystem_version__
+ .dc.a __minor_subsystem_version__
+ .dc.a end
+end: