This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[PATCH 3/4] MIPS/Linux/LD/test: _gp scope ABI conformance tests
- From: "Maciej W. Rozycki" <macro at codesourcery dot com>
- To: <binutils at sourceware dot org>
- Cc: Richard Sandiford <rdsandiford at googlemail dot com>
- Date: Fri, 3 Aug 2012 19:01:07 +0100
- Subject: [PATCH 3/4] MIPS/Linux/LD/test: _gp scope ABI conformance tests
Hi,
Complementing the change to correct the scope of the _gp special symbol,
here's a set of tests to verify that a set of shared libraries and a
binary that relies on _gp can be linked successfully in the presence of a
version script and that the resulting scope of _gp is limited to the
defining objects. This test case has been converted from the example
originally provided.
This passes for the usual 23 MIPS targets (the test case is ELF-only of
course). OK to apply?
2012-08-03 Maciej W. Rozycki <macro@codesourcery.com>
ld/testsuite/
* ld-mips-elf/gp-hidden.rd: New test.
* ld-mips-elf/gp-hidden.sd: New test.
* ld-mips-elf/gp-hidden-lib.rd: New test.
* ld-mips-elf/gp-hidden-ver.rd: New test.
* ld-mips-elf/gp-hidden-64.rd: New test.
* ld-mips-elf/gp-hidden-lib-64.rd: New test.
* ld-mips-elf/gp-hidden-ver-64.rd: New test.
* ld-mips-elf/gp-hidden.s: New test source.
* ld-mips-elf/gp-hidden-lib.s: New test source.
* ld-mips-elf/gp-hidden-ver.s: New test source.
* ld-mips-elf/gp-hidden-ver.ver: New test version script.
* ld-mips-elf/mips-elf.exp: Run the new tests.
Maciej
binutils-mips-gp-test.diff
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-lib.s
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-lib.s 2012-08-03 00:35:18.171478815 +0100
@@ -0,0 +1,6 @@
+ .data
+ .globl bar
+ .type bar, @object
+bar:
+ .dc.a _gp
+ .size bar, . - bar
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-ver.s
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-ver.s 2012-08-03 00:35:18.171478815 +0100
@@ -0,0 +1,7 @@
+ .data
+ .globl foo
+ .type foo, @object
+foo:
+ .dc.a bar
+ .dc.a _gp
+ .size foo, . - foo
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-ver.ver
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-ver.ver 2012-08-03 00:35:18.191780032 +0100
@@ -0,0 +1 @@
+{ global: foo; local: *; };
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden.s
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden.s 2012-08-03 00:35:18.191780032 +0100
@@ -0,0 +1,7 @@
+ .data
+ .globl blah
+ .type blah, @object
+blah:
+ .dc.a foo
+ .dc.a _gp
+ .size blah, . - blah
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-64.rd
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-64.rd 2012-08-03 00:35:18.191780032 +0100
@@ -0,0 +1,9 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 2 entries:
+ *Offset * Info * Type * Sym\. *Value * Sym\. *Name
+[0-9a-f]+ * 0+00000000 * R_MIPS_NONE *
+ * Type2: R_MIPS_NONE *
+ * Type3: R_MIPS_NONE *
+[0-9a-f]+ * [0-9a-f]+00001203 * R_MIPS_REL32 * [0-9a-f]+ * foo
+ * Type2: R_MIPS_64 *
+ * Type3: R_MIPS_NONE *
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-lib-64.rd
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-lib-64.rd 2012-08-03 00:35:18.191780032 +0100
@@ -0,0 +1,10 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 2 entries:
+ *Offset * Info * Type * Sym\. *Value * Sym\. *Name
+[0-9a-f]+ * 0+00000000 * R_MIPS_NONE *
+ * Type2: R_MIPS_NONE *
+ * Type3: R_MIPS_NONE *
+# This must be an absolute relocation, there must not be a _gp reference.
+[0-9a-f]+ * 0+00001203 * R_MIPS_REL32 *
+ * Type2: R_MIPS_64 *
+ * Type3: R_MIPS_NONE *
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-lib.rd
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-lib.rd 2012-08-03 00:35:18.201761759 +0100
@@ -0,0 +1,6 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 2 entries:
+ *Offset * Info * Type * Sym\. *Value * Sym\. *Name
+[0-9a-f]+ * 0+00 * R_MIPS_NONE *
+# This must be an absolute relocation, there must not be a _gp reference.
+[0-9a-f]+ * 0+03 * R_MIPS_REL32 *
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-ver-64.rd
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-ver-64.rd 2012-08-03 00:35:18.201761759 +0100
@@ -0,0 +1,13 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 3 entries:
+ *Offset * Info * Type * Sym\. *Value * Sym\. *Name
+[0-9a-f]+ * 0+00000000 * R_MIPS_NONE *
+ * Type2: R_MIPS_NONE *
+ * Type3: R_MIPS_NONE *
+# This must be an absolute relocation, there must not be a _gp reference.
+[0-9a-f]+ * 0+00001203 * R_MIPS_REL32 *
+ * Type2: R_MIPS_64 *
+ * Type3: R_MIPS_NONE *
+[0-9a-f]+ * [0-9a-f]+00001203 * R_MIPS_REL32 * [0-9a-f]+ * bar
+ * Type2: R_MIPS_64 *
+ * Type3: R_MIPS_NONE *
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-ver.rd
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden-ver.rd 2012-08-03 00:35:18.211765009 +0100
@@ -0,0 +1,7 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 3 entries:
+ *Offset * Info * Type * Sym\. *Value * Sym\. *Name
+[0-9a-f]+ * 0+00 * R_MIPS_NONE *
+# This must be an absolute relocation, there must not be a _gp reference.
+[0-9a-f]+ * 0+03 * R_MIPS_REL32 *
+[0-9a-f]+ * [0-9a-f]+03 * R_MIPS_REL32 * [0-9a-f]+ * bar
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden.rd
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden.rd 2012-08-03 00:35:18.211765009 +0100
@@ -0,0 +1,5 @@
+
+Relocation section '\.rel\.dyn' at offset .* contains 2 entries:
+ *Offset * Info * Type * Sym\. *Value * Sym\. *Name
+[0-9a-f]+ * 0+00 * R_MIPS_NONE *
+[0-9a-f]+ * [0-9a-f]+03 * R_MIPS_REL32 * [0-9a-f]+ * foo
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden.sd
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/gp-hidden.sd 2012-08-03 00:35:18.211765009 +0100
@@ -0,0 +1,9 @@
+
+Symbol table '.dynsym' contains [0-9]+ entries:
+ * Num: * Value * Size * Type * Bind * Vis * Ndx * Name
+#...
+Symbol table '.symtab' contains [0-9]+ entries:
+ * Num: * Value * Size * Type * Bind * Vis * Ndx * Name
+#...
+ * [0-9a-f]+: * [0-9a-f]+ * 0 * NOTYPE * LOCAL * DEFAULT * ABS * _gp
+#pass
Index: binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/mips-elf.exp
===================================================================
--- binutils-fsf-trunk-quilt.orig/ld/testsuite/ld-mips-elf/mips-elf.exp 2012-08-02 15:42:25.000000000 +0100
+++ binutils-fsf-trunk-quilt/ld/testsuite/ld-mips-elf/mips-elf.exp 2012-08-03 01:15:09.490520227 +0100
@@ -328,6 +328,44 @@ if { $linux_gnu } {
"readelf --symbols pic-and-nonpic-6-${abi}.nd" \
"readelf -d pic-and-nonpic-6-${abi}.ad"] \
"pic-and-nonpic-6-${abi}"]]
+
+ # This checks whether our linker scripts get the scope of _gp right,
+ # and must therefore use default scripts. If they don't, then -- in
+ # addition to dumps failing to match -- the final link fails with:
+ #
+ # ld: gp-hidden.o: undefined reference to symbol '_gp'
+ # ld: note: '_gp' is defined in DSO ./tmpdir/gp-hidden-lib-${abi}.so
+ # so try adding it to the linker command line
+ #
+ set suff64 [string map {o32 "" n32 "" n64 -64} $abi]
+ run_ld_link_tests [list \
+ [list \
+ "_gp scope test ($abi shared library)" \
+ "$abi_ldflags($abi) -shared" \
+ "$abi_asflags($abi) -KPIC" \
+ { gp-hidden-lib.s } \
+ [list \
+ "readelf --relocs gp-hidden-lib${suff64}.rd" \
+ "readelf --syms gp-hidden.sd"] \
+ "gp-hidden-lib-${abi}.so"] \
+ [list \
+ "_gp scope test ($abi versioned library)" \
+ "$abi_ldflags($abi) -shared -version-script gp-hidden-ver.ver tmpdir/gp-hidden-lib-${abi}.so" \
+ "$abi_asflags($abi) -KPIC" \
+ { gp-hidden-ver.s } \
+ [list \
+ "readelf --relocs gp-hidden-ver${suff64}.rd" \
+ "readelf --syms gp-hidden.sd"] \
+ "gp-hidden-ver-${abi}.so"] \
+ [list \
+ "_gp scope test ($abi executable)" \
+ "$abi_ldflags($abi) -e 0 -rpath-link . tmpdir/gp-hidden-ver-${abi}.so" \
+ "$abi_asflags($abi) -call_nonpic" \
+ { gp-hidden.s } \
+ [list \
+ "readelf --relocs gp-hidden${suff64}.rd" \
+ "readelf --syms gp-hidden.sd"] \
+ "gp-hidden-${abi}"]]
}
}