summaryrefslogtreecommitdiff
path: root/rts/CheckUnload.c
diff options
context:
space:
mode:
authorAdam Gundry <adam@well-typed.com>2015-10-16 13:58:52 +0100
committerAdam Gundry <adam@well-typed.com>2015-10-16 13:58:52 +0100
commit5a1b4f814f74ec1c48152d97523744518e212777 (patch)
tree7c2207ecacbd37f12c78dbcf9d4334827164e0fb /rts/CheckUnload.c
parent6757950cdd8bb0af0355539987ee78401a6a8f6b (diff)
parent808bbdf08058785ae5bc59b5b4f2b04951d4cbbf (diff)
downloadhaskell-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.c14
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;
+ }
+ }
}
}
}