diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2020-05-01 10:11:06 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2020-05-01 10:11:23 -0700 |
commit | ccf20d460f73c48f3334e1401558df342c77ac8a (patch) | |
tree | 80cf7c6bb978934ed96849825b7c0e8e6bd14721 /gold/testsuite | |
parent | 6d520e36de0229eefe2f1671438cc8333a90b5e6 (diff) | |
download | gdb-ccf20d460f73c48f3334e1401558df342c77ac8a.zip gdb-ccf20d460f73c48f3334e1401558df342c77ac8a.tar.gz gdb-ccf20d460f73c48f3334e1401558df342c77ac8a.tar.bz2 |
gold: x86-64: Fix TLSDESC relaxation for x32
X32 TLSDESC sequences can be:
40 8d 05 00 00 00 00 rex lea foo@TLSDESC(%rip), %reg
...
67 ff 10 call *foo@TLSCALL(%eax)
or the same sequence as LP64:
48 8d 05 00 00 00 00 lea foo@TLSDESC(%rip), %reg
...
ff 10 call *foo@TLSCALL(%rax)
We need to support both sequences for x32. For both GDesc -> IE/LE
transitions,
67 ff 10 call *foo@TLSCALL(%eax)
should relaxed to
0f 1f 00 nopl (%rax)
For GDesc -> LE transition,
40 8d 05 00 00 00 00 rex lea foo@TLSDESC(%rip), %reg
should relaxed to
40 c7 c0 fc ff ff ff rex movl $foo@tpoff, %reg
For GDesc -> IE transition,
40 8d 05 00 00 00 00 rex lea foo@TLSDESC(%rip), %reg
should relaxed to
40 8b 05 00 00 00 00 rex movl foo@gottpoff(%rip), %eax
PR gold/25426
* x86_64.cc (Target_x86_64<size>::Relocate::tls_desc_gd_to_ie):
For x32, relax "rex leal foo@tlsdesc(%rip), %reg" to
"rex movl foo@gottpoff(%rip), %eax" and relax ""call *(%eax)"
to "nopl (%rax)".
(Target_x86_64<size>::Relocate::tls_desc_gd_to_le): For x32,
relax "rex leal foo@tlsdesc(%rip), %reg" to
"rex movl foo@tpoff, %eax" and relax "call *foo@tlscall(%eax)"
to "nopl (%rax)".
* testsuite/Makefile.am (tls_test_gnu2.o): Depend on
gcctestdir/as.
(tls_test_file2_gnu2.o): Likewise.
(tls_test_c_gnu2.o): Likewise.
* testsuite/Makefile.in: Regenerated.
Diffstat (limited to 'gold/testsuite')
-rw-r--r-- | gold/testsuite/Makefile.am | 6 | ||||
-rw-r--r-- | gold/testsuite/Makefile.in | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/gold/testsuite/Makefile.am b/gold/testsuite/Makefile.am index 6187554..ceba002 100644 --- a/gold/testsuite/Makefile.am +++ b/gold/testsuite/Makefile.am @@ -1032,11 +1032,11 @@ if TLS_GNU2_DIALECT check_PROGRAMS += tls_shared_gnu2_gd_to_ie_test -tls_test_gnu2.o: tls_test.cc +tls_test_gnu2.o: tls_test.cc gcctestdir/as $(CXXCOMPILE) -c -fpic -mtls-dialect=gnu2 -o $@ $< -tls_test_file2_gnu2.o: tls_test_file2.cc +tls_test_file2_gnu2.o: tls_test_file2.cc gcctestdir/as $(CXXCOMPILE) -c -fpic -mtls-dialect=gnu2 -o $@ $< -tls_test_c_gnu2.o: tls_test_c.c +tls_test_c_gnu2.o: tls_test_c.c gcctestdir/as $(COMPILE) -c -fpic -mtls-dialect=gnu2 $(TLS_TEST_C_CFLAGS) -o $@ $< tls_test_gnu2_shared2.so: tls_test_file2_gnu2.o gcctestdir/ld $(CXXLINK) -shared tls_test_file2_gnu2.o diff --git a/gold/testsuite/Makefile.in b/gold/testsuite/Makefile.in index 8d2f142..5fed355 100644 --- a/gold/testsuite/Makefile.in +++ b/gold/testsuite/Makefile.in @@ -8275,11 +8275,11 @@ uninstall-am: @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ tls_test_c_pic.o gcctestdir/ld @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_TRUE@ $(CXXLINK) $(THREADFLAGS) -pie tls_test_main_pie.o tls_test_pic.o tls_test_file2_pic.o tls_test_c_pic.o $(THREADLIBS) -@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_gnu2.o: tls_test.cc +@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_gnu2.o: tls_test.cc gcctestdir/as @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(CXXCOMPILE) -c -fpic -mtls-dialect=gnu2 -o $@ $< -@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_file2_gnu2.o: tls_test_file2.cc +@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_file2_gnu2.o: tls_test_file2.cc gcctestdir/as @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(CXXCOMPILE) -c -fpic -mtls-dialect=gnu2 -o $@ $< -@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_c_gnu2.o: tls_test_c.c +@GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_c_gnu2.o: tls_test_c.c gcctestdir/as @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(COMPILE) -c -fpic -mtls-dialect=gnu2 $(TLS_TEST_C_CFLAGS) -o $@ $< @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@tls_test_gnu2_shared2.so: tls_test_file2_gnu2.o gcctestdir/ld @GCC_TRUE@@NATIVE_LINKER_TRUE@@TLS_GNU2_DIALECT_TRUE@@TLS_TRUE@ $(CXXLINK) -shared tls_test_file2_gnu2.o |