diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c index 7e5386e178932b0b3267a1cb29c914b3b3734786..6495ce1d65da5ac3b897f7e78dd039499b4ad062 100644 --- a/rts/linker/Elf.c +++ b/rts/linker/Elf.c @@ -1060,7 +1060,7 @@ do_Elf_Rel_relocations ( ObjectCode* oc, char* ehdrC, } else { symbol = &stab->symbols[ELF_R_SYM(info)]; /* First see if it is a local symbol. */ - if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_LOCAL) { + if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_LOCAL || strncmp(symbol->name, "_GLOBAL_OFFSET_TABLE_", 21) == 0) { S = (Elf_Addr)symbol->addr; } else { S_tmp = lookupSymbol_( symbol->name );