Really fix riscv shared library __global_pointer$ problem.
ld/ * emulparams/elf32lriscv-defs.sh (SDATA_START_SYMBOLS): Remove HIDDEN. Don't define __global_pointer$ when CREATE_SHLIB. * testsuite/ld-riscv-elf/gp-hidden-64.rd, * testsuite/ld-riscv-elf/gp-hidden-lib.rd, * testsuite/ld-riscv-elf/gp-hidden-lib.s, * testsuite/ld-riscv-elf/gp-hidden-ver-64.rd, * testsuite/ld-riscv-elf/gp-hidden-ver.rd, * testsuite/ld-riscv-elf/gp-hidden-ver.s, * testsuite/ld-riscv-elf/gp-hidden-ver.ver, * testsuite/ld-riscv-elf/gp-hidden.rd, * testsuite/ld-riscv-elf/gp-hidden.s, * testsuite/ld-riscv-elf/gp-hidden.sd: Delete. * testsuite/ld-riscv-elf/gp-test-lib.sd, * testsuite/ld-riscv-elf/gp-test.s, * testsuite/ld-riscv-elf/gp-test.sd: New. * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Rewrite gp tests.
This commit is contained in:
parent
858c9d1324
commit
0527614a9b
20
ld/ChangeLog
20
ld/ChangeLog
@ -1,3 +1,23 @@
|
||||
2017-12-05 Jim Wilson <jimw@sifive.com>
|
||||
Andrew Waterman <andrew@sifive.com>
|
||||
|
||||
* emulparams/elf32lriscv-defs.sh (SDATA_START_SYMBOLS): Remove HIDDEN.
|
||||
Don't define __global_pointer$ when CREATE_SHLIB.
|
||||
* testsuite/ld-riscv-elf/gp-hidden-64.rd,
|
||||
* testsuite/ld-riscv-elf/gp-hidden-lib.rd,
|
||||
* testsuite/ld-riscv-elf/gp-hidden-lib.s,
|
||||
* testsuite/ld-riscv-elf/gp-hidden-ver-64.rd,
|
||||
* testsuite/ld-riscv-elf/gp-hidden-ver.rd,
|
||||
* testsuite/ld-riscv-elf/gp-hidden-ver.s,
|
||||
* testsuite/ld-riscv-elf/gp-hidden-ver.ver,
|
||||
* testsuite/ld-riscv-elf/gp-hidden.rd,
|
||||
* testsuite/ld-riscv-elf/gp-hidden.s,
|
||||
* testsuite/ld-riscv-elf/gp-hidden.sd: Delete.
|
||||
* testsuite/ld-riscv-elf/gp-test-lib.sd,
|
||||
* testsuite/ld-riscv-elf/gp-test.s,
|
||||
* testsuite/ld-riscv-elf/gp-test.sd: New.
|
||||
* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Rewrite gp tests.
|
||||
|
||||
2017-12-04 Jim Wilson <jimw@sifive.com>
|
||||
|
||||
* emulparams/elf32lriscv-defs.sh (SDATA_START_SYMBOLS): Mark
|
||||
|
@ -23,7 +23,8 @@ TEXT_START_ADDR=0x10000
|
||||
MAXPAGESIZE="CONSTANT (MAXPAGESIZE)"
|
||||
COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)"
|
||||
|
||||
SDATA_START_SYMBOLS="HIDDEN (__global_pointer$ = . + 0x800);
|
||||
SDATA_START_SYMBOLS="__global_pointer$ = . + 0x800;"
|
||||
SDATA_START_SYMBOLS="${CREATE_SHLIB-${SDATA_START_SYMBOLS}}
|
||||
*(.srodata.cst16) *(.srodata.cst8) *(.srodata.cst4) *(.srodata.cst2) *(.srodata .srodata.*)"
|
||||
|
||||
INITIAL_READONLY_SECTIONS=".interp : { *(.interp) } ${CREATE_PIE-${INITIAL_READONLY_SECTIONS}}"
|
||||
|
@ -1,4 +0,0 @@
|
||||
|
||||
Relocation section '\.rela\.dyn' at offset .* contains 1 entry:
|
||||
*Offset * Info * Type * Sym\. *Value * Sym\. *Name \+ Addend
|
||||
[0-9a-f]+ * [0-9a-f]+02 * R_RISCV_64 * [0-9a-f]+ * foo \+ 0
|
@ -1,5 +0,0 @@
|
||||
|
||||
Relocation section '\.rela\.dyn' at offset .* contains 1 entry:
|
||||
*Offset * Info * Type * Sym\. *Value * Sym\. *Name \+ Addend
|
||||
# This must be an absolute relocation, there must not be a _gp reference.
|
||||
[0-9a-f]+ * 0+03 * R_RISCV_RELATIVE * [0-9a-f]+
|
@ -1,6 +0,0 @@
|
||||
.data
|
||||
.globl bar
|
||||
.type bar, @object
|
||||
bar:
|
||||
.dc.a __global_pointer$
|
||||
.size bar, . - bar
|
@ -1,6 +0,0 @@
|
||||
|
||||
Relocation section '\.rela\.dyn' at offset .* contains 2 entries:
|
||||
*Offset * Info * Type * Sym\. *Value * Sym\. *Name \+ Addend
|
||||
# This must be an absolute relocation, there must not be a _gp reference.
|
||||
[0-9a-f]+ * 0+03 * R_RISCV_RELATIVE * [0-9a-f]+
|
||||
[0-9a-f]+ * [0-9a-f]+02 * R_RISCV_64 * [0-9a-f]+ * bar \+ 0
|
@ -1,6 +0,0 @@
|
||||
|
||||
Relocation section '\.rela\.dyn' at offset .* contains 2 entries:
|
||||
*Offset * Info * Type * Sym\. *Value * Sym\. *Name \+ Addend
|
||||
# This must be an absolute relocation, there must not be a _gp reference.
|
||||
[0-9a-f]+ * 0+03 * R_RISCV_RELATIVE * [0-9a-f]+
|
||||
[0-9a-f]+ * [0-9a-f]+01 * R_RISCV_32 * [0-9a-f]+ * bar \+ 0
|
@ -1,7 +0,0 @@
|
||||
.data
|
||||
.globl foo
|
||||
.type foo, @object
|
||||
foo:
|
||||
.dc.a bar
|
||||
.dc.a __global_pointer$
|
||||
.size foo, . - foo
|
@ -1 +0,0 @@
|
||||
{ global: foo; local: *; };
|
@ -1,4 +0,0 @@
|
||||
|
||||
Relocation section '\.rela\.dyn' at offset .* contains 1 entry:
|
||||
*Offset * Info * Type * Sym\. *Value * Sym\. *Name \+ Addend
|
||||
[0-9a-f]+ * [0-9a-f]+01 * R_RISCV_32 * [0-9a-f]+ * foo \+ 0
|
@ -1,9 +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
|
||||
#failif
|
||||
#...
|
||||
* [0-9a-f]+: * [0-9a-f]+ * 0 * NOTYPE * GLOBAL * DEFAULT .* __global_pointer\$
|
||||
#...
|
||||
* [0-9a-f]+: * [0-9a-f]+ * 0 * NOTYPE * LOCAL * DEFAULT .* __global_pointer\$
|
||||
#pass
|
@ -2,6 +2,5 @@
|
||||
.globl blah
|
||||
.type blah, @object
|
||||
blah:
|
||||
.dc.a foo
|
||||
.dc.a __global_pointer$
|
||||
.dc.a 0
|
||||
.size blah, . - blah
|
5
ld/testsuite/ld-riscv-elf/gp-test.sd
Normal file
5
ld/testsuite/ld-riscv-elf/gp-test.sd
Normal file
@ -0,0 +1,5 @@
|
||||
Symbol table '.symtab' contains [0-9]+ entries:
|
||||
* Num: * Value * Size * Type * Bind * Vis * Ndx * Name
|
||||
#...
|
||||
* [0-9a-f]+: * [0-9a-f]+ * 0 * NOTYPE * GLOBAL * DEFAULT .* __global_pointer\$
|
||||
#pass
|
@ -24,33 +24,22 @@ if [istarget "riscv*-*-*"] {
|
||||
|
||||
set abis { rv32gc ilp32 elf32lriscv rv64gc lp64 elf64lriscv }
|
||||
foreach { arch abi emul } $abis {
|
||||
# This checks whether our linker scripts get the scope of
|
||||
# __global_pointer$ right, and thus must therefore use default scripts.
|
||||
# This checks whether our linker scripts handle __global_pointer$
|
||||
# correctly. It should be defined in executables and PIE, but not
|
||||
# in shared libraries.
|
||||
set suff64 [string map {ilp32 "" lp64 -64} $abi]
|
||||
run_ld_link_tests [list \
|
||||
[list "gp scope test ($abi shared library)" \
|
||||
[list "gp test ($abi shared library)" \
|
||||
"-m$emul -shared" "" \
|
||||
"-march=$arch -mabi=$abi -fpic" \
|
||||
{ gp-hidden-lib.s } \
|
||||
[list \
|
||||
"readelf --relocs gp-hidden-lib.rd" \
|
||||
"readelf --syms gp-hidden.sd"] \
|
||||
"gp-hidden-lib-${abi}.so"] \
|
||||
[list "gp scope test ($abi versioned lib)" \
|
||||
"-m$emul -shared -version-script gp-hidden-ver.ver tmpdir/gp-hidden-lib-${abi}.so" "" \
|
||||
"-march=$arch -mabi=$abi -fpic" \
|
||||
{ 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)" \
|
||||
"-m$emul -e 0 -rpath-link . tmpdir/gp-hidden-ver-${abi}.so" "" \
|
||||
{ gp-test.s } \
|
||||
[list "readelf --syms gp-test-lib.sd"] \
|
||||
"gp-test-lib-${abi}.so"] \
|
||||
[list "gp test ($abi executable)" \
|
||||
"-m$emul" "" \
|
||||
"-march=$arch -mabi=$abi" \
|
||||
{gp-hidden.s} \
|
||||
[list \
|
||||
"readelf --relocs gp-hidden${suff64}.rd" \
|
||||
"readelf --syms gp-hidden.sd"]\
|
||||
"gp-hidden-${abi}"]]
|
||||
{ gp-test.s } \
|
||||
[list "readelf --syms gp-test.sd"] \
|
||||
"gp-test-${abi}"]]
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user