diff options
Diffstat (limited to 'rts/linker/SymbolExtras.c')
| -rw-r--r-- | rts/linker/SymbolExtras.c | 5 |
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; |
