aboutsummaryrefslogtreecommitdiff
path: root/ld/testsuite
diff options
context:
space:
mode:
authorRoland McGrath <mcgrathr@google.com>2013-11-19 10:54:00 -0800
committerRoland McGrath <mcgrathr@google.com>2013-11-19 10:54:00 -0800
commitc2763e270c6627e55ac7a75ed3c0a717fbca9bd0 (patch)
tree832667bc181fa2fc7640c1a1e5084b86261ace12 /ld/testsuite
parent03e621be975dacc9cec9f5782698bdb098f6a49c (diff)
downloadfsf-binutils-gdb-c2763e270c6627e55ac7a75ed3c0a717fbca9bd0.zip
fsf-binutils-gdb-c2763e270c6627e55ac7a75ed3c0a717fbca9bd0.tar.gz
fsf-binutils-gdb-c2763e270c6627e55ac7a75ed3c0a717fbca9bd0.tar.bz2
Fix references to __ehdr_start when it cannot be defined
ld/ * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): Don't use bfd_elf_record_link_assignment to mark __ehdr_start hidden. Instead, just do it directly here, and only if it was referenced but not defined. ld/testsuite/ * ld-elf/ehdr_start-userdef.t: New file. * ld-elf/ehdr_start-userdef.d: New file. * ld-elf/ehdr_start-strongref.s: New file. * ld-elf/ehdr_start-missing.t: New file. * ld-elf/ehdr_start-missing.d: New file. * ld-elf/ehdr_start-weak.d: New file. * ld-mips-elf/ehdr_start-2.nd: Expect __ehdr_start to be global.
Diffstat (limited to 'ld/testsuite')
-rw-r--r--ld/testsuite/ChangeLog10
-rw-r--r--ld/testsuite/ld-elf/ehdr_start-missing.d4
-rw-r--r--ld/testsuite/ld-elf/ehdr_start-missing.t8
-rw-r--r--ld/testsuite/ld-elf/ehdr_start-strongref.s9
-rw-r--r--ld/testsuite/ld-elf/ehdr_start-userdef.d9
-rw-r--r--ld/testsuite/ld-elf/ehdr_start-userdef.t10
-rw-r--r--ld/testsuite/ld-elf/ehdr_start-weak.d8
-rw-r--r--ld/testsuite/ld-mips-elf/ehdr_start-2.nd2
8 files changed, 59 insertions, 1 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 2462cd3..a00cddf 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2013-11-19 Roland McGrath <mcgrathr@google.com>
+
+ * ld-elf/ehdr_start-userdef.t: New file.
+ * ld-elf/ehdr_start-userdef.d: New file.
+ * ld-elf/ehdr_start-strongref.s: New file.
+ * ld-elf/ehdr_start-missing.t: New file.
+ * ld-elf/ehdr_start-missing.d: New file.
+ * ld-elf/ehdr_start-weak.d: New file.
+ * ld-mips-elf/ehdr_start-2.nd: Expect __ehdr_start to be global.
+
2013-11-17 H.J. Lu <hongjiu.lu@intel.com>
* ld-x86-64/mpx.exp: New file.
diff --git a/ld/testsuite/ld-elf/ehdr_start-missing.d b/ld/testsuite/ld-elf/ehdr_start-missing.d
new file mode 100644
index 0000000..5c2090f
--- /dev/null
+++ b/ld/testsuite/ld-elf/ehdr_start-missing.d
@@ -0,0 +1,4 @@
+#source: ehdr_start-strongref.s
+#ld: -e _start -T ehdr_start-missing.t
+#error: .*: undefined reference to `__ehdr_start'
+#target: *-*-linux* *-*-gnu* *-*-nacl*
diff --git a/ld/testsuite/ld-elf/ehdr_start-missing.t b/ld/testsuite/ld-elf/ehdr_start-missing.t
new file mode 100644
index 0000000..a4daf06
--- /dev/null
+++ b/ld/testsuite/ld-elf/ehdr_start-missing.t
@@ -0,0 +1,8 @@
+SECTIONS
+{
+ . = 0x10000000;
+ .text : { *(.text) }
+
+ . = 0x20000000;
+ .rodata : { *(.rodata) }
+}
diff --git a/ld/testsuite/ld-elf/ehdr_start-strongref.s b/ld/testsuite/ld-elf/ehdr_start-strongref.s
new file mode 100644
index 0000000..3937507
--- /dev/null
+++ b/ld/testsuite/ld-elf/ehdr_start-strongref.s
@@ -0,0 +1,9 @@
+ .text
+ .globl _start
+_start:
+ .space 16
+
+ .section .rodata,"a"
+ .globl foo
+foo:
+ .dc.a __ehdr_start
diff --git a/ld/testsuite/ld-elf/ehdr_start-userdef.d b/ld/testsuite/ld-elf/ehdr_start-userdef.d
new file mode 100644
index 0000000..16d2749
--- /dev/null
+++ b/ld/testsuite/ld-elf/ehdr_start-userdef.d
@@ -0,0 +1,9 @@
+#source: ehdr_start-strongref.s
+#ld: -e _start -T ehdr_start-userdef.t
+#readelf: -Ws
+#target: *-*-linux* *-*-gnu* *-*-nacl*
+
+Symbol table '\.symtab' contains [0-9]+ entries:
+#...
+ *[0-9]+: 0*12345678 +0 +NOTYPE +GLOBAL +DEFAULT +ABS +__ehdr_start
+#pass
diff --git a/ld/testsuite/ld-elf/ehdr_start-userdef.t b/ld/testsuite/ld-elf/ehdr_start-userdef.t
new file mode 100644
index 0000000..6ef1de7
--- /dev/null
+++ b/ld/testsuite/ld-elf/ehdr_start-userdef.t
@@ -0,0 +1,10 @@
+SECTIONS
+{
+ . = 0x10000000;
+ .text : { *(.text) }
+
+ __ehdr_start = 0x12345678;
+
+ . = 0x20000000;
+ .rodata : { *(.rodata) }
+}
diff --git a/ld/testsuite/ld-elf/ehdr_start-weak.d b/ld/testsuite/ld-elf/ehdr_start-weak.d
new file mode 100644
index 0000000..8bd9035
--- /dev/null
+++ b/ld/testsuite/ld-elf/ehdr_start-weak.d
@@ -0,0 +1,8 @@
+#source: ehdr_start.s
+#ld: -e _start -T ehdr_start-missing.t
+#nm: -n
+#target: *-*-linux* *-*-gnu* *-*-nacl*
+
+#...
+\s+[wU] __ehdr_start
+#pass
diff --git a/ld/testsuite/ld-mips-elf/ehdr_start-2.nd b/ld/testsuite/ld-mips-elf/ehdr_start-2.nd
index 986c2a2..0a6c06e 100644
--- a/ld/testsuite/ld-mips-elf/ehdr_start-2.nd
+++ b/ld/testsuite/ld-mips-elf/ehdr_start-2.nd
@@ -1,4 +1,4 @@
Symbol table '\.symtab' contains [0-9]+ entries:
#...
- *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ __ehdr_start
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +GLOBAL +DEFAULT +[0-9]+ __ehdr_start
#pass