summaryrefslogtreecommitdiff
path: root/gold/x86_64.cc
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-01-06 12:58:54 -0800
committerH.J. Lu <hjl.tools@gmail.com>2015-01-06 12:58:54 -0800
commite749cab89d976c723ee01a3dfcfd7ec1a883f890 (patch)
tree10ae968292ef236320f243cbbab01d2dc1e9b1e1 /gold/x86_64.cc
parentec93045b400ec68b0c5716d75f27a87533b57058 (diff)
downloadbinutils-gdb-e749cab89d976c723ee01a3dfcfd7ec1a883f890.tar.gz
Handle Initial-Exec to Local-Exec for x32
PR gold/17809 * x86_64.cc (Target_x86_64<size>::Relocate::tls_ie_to_le): Handle x32.
Diffstat (limited to 'gold/x86_64.cc')
-rw-r--r--gold/x86_64.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/gold/x86_64.cc b/gold/x86_64.cc
index b45eb3bdf65..c368b039869 100644
--- a/gold/x86_64.cc
+++ b/gold/x86_64.cc
@@ -4100,6 +4100,8 @@ Target_x86_64<size>::Relocate::tls_ie_to_le(
// movq
if (op1 == 0x4c)
view[-3] = 0x49;
+ else if (size == 32 && op1 == 0x44)
+ view[-3] = 0x41;
view[-2] = 0xc7;
view[-1] = 0xc0 | reg;
}
@@ -4108,6 +4110,8 @@ Target_x86_64<size>::Relocate::tls_ie_to_le(
// Special handling for %rsp.
if (op1 == 0x4c)
view[-3] = 0x49;
+ else if (size == 32 && op1 == 0x44)
+ view[-3] = 0x41;
view[-2] = 0x81;
view[-1] = 0xc0 | reg;
}
@@ -4116,6 +4120,8 @@ Target_x86_64<size>::Relocate::tls_ie_to_le(
// addq
if (op1 == 0x4c)
view[-3] = 0x4d;
+ else if (size == 32 && op1 == 0x44)
+ view[-3] = 0x45;
view[-2] = 0x8d;
view[-1] = 0x80 | reg | (reg << 3);
}