summaryrefslogtreecommitdiff
path: root/rts/linker/SymbolExtras.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/linker/SymbolExtras.c')
-rw-r--r--rts/linker/SymbolExtras.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/rts/linker/SymbolExtras.c b/rts/linker/SymbolExtras.c
index f5147f8036..e209e211e1 100644
--- a/rts/linker/SymbolExtras.c
+++ b/rts/linker/SymbolExtras.c
@@ -182,9 +182,10 @@ SymbolExtra* makeSymbolExtra( ObjectCode const* oc,
#if defined(x86_64_HOST_ARCH)
// jmp *-14(%rip)
// 0xFF 25 is opcode + ModRM of near absolute indirect jump
- static uint8_t jmp[] = { 0xFF, 0x25, 0xF2, 0xFF, 0xFF, 0xFF };
+ // Two bytes trailing padding, needed for TLSGD GOT entries
+ static uint8_t jmp[] = { 0xFF, 0x25, 0xF2, 0xFF, 0xFF, 0xFF, 0x00, 0x00 };
extra->addr = target;
- memcpy(extra->jumpIsland, jmp, 6);
+ memcpy(extra->jumpIsland, jmp, 8);
#endif /* x86_64_HOST_ARCH */
return extra;