diff options
Diffstat (limited to 'rts/linker/elf_got.c')
-rw-r--r-- | rts/linker/elf_got.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/rts/linker/elf_got.c b/rts/linker/elf_got.c index 9be2490a17..83d0f39a4e 100644 --- a/rts/linker/elf_got.c +++ b/rts/linker/elf_got.c @@ -86,9 +86,13 @@ fillGot(ObjectCode * oc) { if(0x0 == symbol->addr) { symbol->addr = lookupSymbol_(symbol->name); if(0x0 == symbol->addr) { - errorBelch("Failed to lookup symbol: %s\n", - symbol->name); - return EXIT_FAILURE; + if(0 == strncmp(symbol->name,"_GLOBAL_OFFSET_TABLE_",21)) { + symbol->addr = oc->info->got_start; + } else { + errorBelch("Failed to lookup symbol: %s\n", + symbol->name); + return EXIT_FAILURE; + } } } else { // we already have the address. |