X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FLinker.c;h=edad92ee4da75f7f45700ea0f1a5ac73d4296fc3;hb=cdbc494c6932d2ffa32d211bb988a635124bf016;hp=70aae3b0f9cbb26d9278110017b45c40cf2ac36b;hpb=77b29b5685db2f8745d191af1599ed753bef91e7;p=ghc-hetmet.git diff --git a/rts/Linker.c b/rts/Linker.c index 70aae3b..edad92e 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -272,6 +272,7 @@ typedef struct _RtsSymbolVal { SymI_HasProto(signal_handlers) \ SymI_HasProto(stg_sig_install) \ SymI_HasProto(rtsTimerSignal) \ + SymI_HasProto(atexit) \ SymI_NeedsProto(nocldstop) #endif @@ -4690,9 +4691,12 @@ static int relocateSection( } else { - value = sections[reloc->r_symbolnum-1].offset - - sections[reloc->r_symbolnum-1].addr - + (uint64_t) image; + // If the relocation is not through the global offset table + // or external, then set the value to the baseValue. This + // will leave displacements into the __const section + // unchanged (as they ought to be). + + value = baseValue; } IF_DEBUG(linker, debugBelch("relocateSection: value = %p\n", (void *)value));