summaryrefslogtreecommitdiff
path: root/rts/linker/LoadArchive.c
diff options
context:
space:
mode:
Diffstat (limited to 'rts/linker/LoadArchive.c')
-rw-r--r--rts/linker/LoadArchive.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/rts/linker/LoadArchive.c b/rts/linker/LoadArchive.c
index 89350956de..0ad3d94725 100644
--- a/rts/linker/LoadArchive.c
+++ b/rts/linker/LoadArchive.c
@@ -5,6 +5,7 @@
#include "sm/OSMem.h"
#include "RtsUtils.h"
#include "LinkerInternals.h"
+#include "CheckUnload.h" // loaded_objects, insertOCSectionIndices
#include "linker/M32Alloc.h"
/* Platform specific headers */
@@ -241,7 +242,6 @@ lookupGNUArchiveIndex(int gnuFileIndexSize, char **fileName_,
static HsInt loadArchive_ (pathchar *path)
{
- ObjectCode* oc = NULL;
char *image = NULL;
HsInt retcode = 0;
int memberSize;
@@ -521,8 +521,8 @@ static HsInt loadArchive_ (pathchar *path)
pathprintf(archiveMemberName, size, WSTR("%" PATH_FMT "(%.*s)"),
path, (int)thisFileNameSize, fileName);
- oc = mkOc(path, image, memberSize, false, archiveMemberName
- , misalignment);
+ ObjectCode *oc = mkOc(path, image, memberSize, false, archiveMemberName,
+ misalignment);
#if defined(OBJFORMAT_MACHO)
ocInit_MachO( oc );
#endif
@@ -537,8 +537,9 @@ static HsInt loadArchive_ (pathchar *path)
fclose(f);
return 0;
} else {
- oc->next = objects;
- objects = oc;
+ insertOCSectionIndices(oc); // also adds the object to `objects` list
+ oc->next_loaded_object = loaded_objects;
+ loaded_objects = oc;
}
}
else if (isGnuIndex) {