aboutsummaryrefslogtreecommitdiff
path: root/gold/ChangeLog
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2020-05-01 10:11:06 -0700
committerH.J. Lu <hjl.tools@gmail.com>2020-05-01 10:11:23 -0700
commitccf20d460f73c48f3334e1401558df342c77ac8a (patch)
tree80cf7c6bb978934ed96849825b7c0e8e6bd14721 /gold/ChangeLog
parent6d520e36de0229eefe2f1671438cc8333a90b5e6 (diff)
downloadgdb-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/ChangeLog')
-rw-r--r--gold/ChangeLog17
1 files changed, 17 insertions, 0 deletions
diff --git a/gold/ChangeLog b/gold/ChangeLog
index 0b7cb07..23fb070 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,5 +1,22 @@
2020-05-01 H.J. Lu <hongjiu.lu@intel.com>
+ 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.
+
+2020-05-01 H.J. Lu <hongjiu.lu@intel.com>
+
PR gold/25473
* x86_64.cc (Target_x86_64<size>::Relocate::tls_desc_gd_to_ie):
Properly check r8 - r15 in "lea foo@TLSDESC(%rip), %reg".