diff options
author | Adam Gundry <adam@well-typed.com> | 2015-10-16 13:58:52 +0100 |
---|---|---|
committer | Adam Gundry <adam@well-typed.com> | 2015-10-16 13:58:52 +0100 |
commit | 5a1b4f814f74ec1c48152d97523744518e212777 (patch) | |
tree | 7c2207ecacbd37f12c78dbcf9d4334827164e0fb /rts/CheckUnload.c | |
parent | 6757950cdd8bb0af0355539987ee78401a6a8f6b (diff) | |
parent | 808bbdf08058785ae5bc59b5b4f2b04951d4cbbf (diff) | |
download | haskell-wip/orf-reboot.tar.gz |
Merge remote-tracking branch 'origin/master' into wip/orf-rebootwip/orf-reboot
Conflicts:
compiler/rename/RnNames.hs
compiler/typecheck/TcRnMonad.hs
utils/haddock
Diffstat (limited to 'rts/CheckUnload.c')
-rw-r--r-- | rts/CheckUnload.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/rts/CheckUnload.c b/rts/CheckUnload.c index 7802754445..c75673847e 100644 --- a/rts/CheckUnload.c +++ b/rts/CheckUnload.c @@ -40,15 +40,21 @@ static void checkAddress (HashTable *addrs, void *addr) { ObjectCode *oc; + int i; if (!lookupHashTable(addrs, (W_)addr)) { insertHashTable(addrs, (W_)addr, addr); for (oc = unloaded_objects; oc; oc = oc->next) { - if ((W_)addr >= (W_)oc->image && - (W_)addr < (W_)oc->image + oc->fileSize) { - oc->referenced = 1; - break; + for (i = 0; i < oc->n_sections; i++) { + if (oc->sections[i].kind != SECTIONKIND_OTHER) { + if ((W_)addr >= (W_)oc->sections[i].start && + (W_)addr < (W_)oc->sections[i].start + + oc->sections[i].size) { + oc->referenced = 1; + return; + } + } } } } |