aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2008-08-07 19:58:38 +0000
committerRichard Sandiford <rdsandiford@googlemail.com>2008-08-07 19:58:38 +0000
commit634835aefb84bf887ac88dc7da998c1f992266bd (patch)
tree9f0b1528c74969525ce144c23f79adbf538784b0 /ld
parent33bb52fb4e77c96f77dee32dea89fa32869ce015 (diff)
downloadgdb-634835aefb84bf887ac88dc7da998c1f992266bd.zip
gdb-634835aefb84bf887ac88dc7da998c1f992266bd.tar.gz
gdb-634835aefb84bf887ac88dc7da998c1f992266bd.tar.bz2
bfd/
* elfxx-mips.c (GGA_NORMAL, GGA_RELOC_ONLY, GGA_NONE): New macros. (mips_elf_link_hash_entry): Add a "global_got_area" field. (mips_elf_link_hash_newfunc): Initialize it. (mips_elf_sort_hash_table_f): Use h->global_got_area instead of h->root.got.offset. Do not handle forced_local symbols specially. (mips_elf_record_global_got_symbol): Set h->global_got_area instead of h->root.got.offset. (mips_elf_recreate_got): Assert that h->global_got_area == GGA_NONE for indirect and warning symbols. (mips_elf_count_forced_local_got_symbols): Change the argument from a "elf_link_hash_entry" to "mips_elf_link_hash_entry". Use and set h->global_got_area instead of h->root.got.offset. Set it to GGA_NONE for all forced-local symbols. (mips_elf_set_global_got_offset): Set h->global_got_area instead of h->root.got.offset. Use g->global_got_area instead of a combination of dynindx, forced_local and tls_type. (mips_elf_multi_got): Remove disabled code. Pass GGA_* values to mips_elf_set_global_got_offset. (mips_elf_lay_out_got): Use mips_elf_link_hash_traverse instead of elf_link_hash_traverse. (_bfd_mips_elf_copy_indirect_symbol): Copy the indirect symbol's global_got_area to the direct symbol if the latter's value is higher. Set the indirect symbol's area to GGA_NONE. ld/testsuite/ * ld-mips-elf/got-vers-1a.s, ld-mips-elf/got-vers-1b.s, ld-mips-elf/got-vers-1.ver, ld-mips-elf/got-vers-1.dd, ld-mips-elf/got-vers-1.sd, ld-mips-elf/got-vers-1.rd: New tests. * ld-mips-elf/mips-elf.exp: Run them.
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-mips-elf/got-vers-1.dd6
-rw-r--r--ld/testsuite/ld-mips-elf/got-vers-1.rd6
-rw-r--r--ld/testsuite/ld-mips-elf/got-vers-1.sd6
-rw-r--r--ld/testsuite/ld-mips-elf/got-vers-1.ver1
-rw-r--r--ld/testsuite/ld-mips-elf/got-vers-1a.s2
-rw-r--r--ld/testsuite/ld-mips-elf/got-vers-1b.s7
-rw-r--r--ld/testsuite/ld-mips-elf/mips-elf.exp12
8 files changed, 47 insertions, 0 deletions
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 529643b..d40ec92 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,5 +1,12 @@
2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
+ * ld-mips-elf/got-vers-1a.s, ld-mips-elf/got-vers-1b.s,
+ ld-mips-elf/got-vers-1.ver, ld-mips-elf/got-vers-1.dd,
+ ld-mips-elf/got-vers-1.sd, ld-mips-elf/got-vers-1.rd: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
+2008-08-07 Richard Sandiford <rdsandiford@googlemail.com>
+
* ld-mips-elf/tlsdyn-o32-2.got, ld-mips-elf/tlsdyn-o32-3.got,
ld-mips-elf/tlsdyn-o32-2.d, ld-mips-elf/tlsdyn-o32-3.d: Change the
GOT layout as follows:
diff --git a/ld/testsuite/ld-mips-elf/got-vers-1.dd b/ld/testsuite/ld-mips-elf/got-vers-1.dd
new file mode 100644
index 0000000..98cda95
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/got-vers-1.dd
@@ -0,0 +1,6 @@
+# There must be one global GOT symbol. Its index doesn't matter.
+#...
+ 0x70000011 \(MIPS_SYMTABNO\) * 4
+#...
+ 0x70000013 \(MIPS_GOTSYM\) * 0x3
+#pass
diff --git a/ld/testsuite/ld-mips-elf/got-vers-1.rd b/ld/testsuite/ld-mips-elf/got-vers-1.rd
new file mode 100644
index 0000000..d99ead1
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/got-vers-1.rd
@@ -0,0 +1,6 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 2 entries:
+ *Offset * Info * Type * Sym\.Value * Sym\. Name
+00000000 * 00000000 * R_MIPS_NONE *
+# This index must be the same as DT_MIPS_GOTsYM.
+[^ ]+ * 00000303 * R_MIPS_REL32 * [^ ]+ * foo
diff --git a/ld/testsuite/ld-mips-elf/got-vers-1.sd b/ld/testsuite/ld-mips-elf/got-vers-1.sd
new file mode 100644
index 0000000..9c3a8c0
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/got-vers-1.sd
@@ -0,0 +1,6 @@
+# foo@@V2 must have index DT_MIPS_GOTSYM
+#...
+ *3: .* 4 * OBJECT * GLOBAL * DEFAULT * [0-9]+ * foo@@V2
+
+Symbol table '\.symtab' contains .*:
+#pass
diff --git a/ld/testsuite/ld-mips-elf/got-vers-1.ver b/ld/testsuite/ld-mips-elf/got-vers-1.ver
new file mode 100644
index 0000000..defa8e9
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/got-vers-1.ver
@@ -0,0 +1 @@
+V2 { global: foo; local: *; };
diff --git a/ld/testsuite/ld-mips-elf/got-vers-1a.s b/ld/testsuite/ld-mips-elf/got-vers-1a.s
new file mode 100644
index 0000000..b9959ff
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/got-vers-1a.s
@@ -0,0 +1,2 @@
+ .abicalls
+ .word foo
diff --git a/ld/testsuite/ld-mips-elf/got-vers-1b.s b/ld/testsuite/ld-mips-elf/got-vers-1b.s
new file mode 100644
index 0000000..dd308b4
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/got-vers-1b.s
@@ -0,0 +1,7 @@
+ .abicalls
+ .symver foo2,foo@@V2
+ .global foo2
+ .data
+ .type foo2,%object
+ .size foo2,4
+foo2: .word 0
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index b4da748..368335a 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -363,3 +363,15 @@ run_dump_test "attr-gnu-4-43"
run_dump_test "attr-gnu-4-44"
run_dump_test "attr-gnu-4-45"
run_dump_test "attr-gnu-4-51"
+
+if { $linux_gnu } {
+ run_ld_link_tests {
+ {"GOT and versioning 1"
+ "-shared -melf32btsmip --version-script got-vers-1.ver"
+ "-EB -mips2 -32" {got-vers-1a.s got-vers-1b.s}
+ {{readelf -d got-vers-1.dd}
+ {readelf --symbols got-vers-1.sd}
+ {readelf --relocs got-vers-1.rd}}
+ "got-vers-1.so"}
+ }
+}