This routine should be aware of Mach-O misalignment of malloc'ed memory regions.
char tmp[12];
char *gnuFileIndex;
int gnuFileIndexSize;
char tmp[12];
char *gnuFileIndex;
int gnuFileIndexSize;
+#if !defined(USE_MMAP) && defined(darwin_HOST_OS)
+ int misalignment;
+#endif
IF_DEBUG(linker, debugBelch("loadArchive: Loading archive `%s'\n", path));
IF_DEBUG(linker, debugBelch("loadArchive: Loading archive `%s'\n", path));
we use malloc then we can be given memory above 2^32.
In the mmap case we're probably wasting lots of space;
we could do better. */
we use malloc then we can be given memory above 2^32.
In the mmap case we're probably wasting lots of space;
we could do better. */
image = mmapForLinker(memberSize, MAP_ANONYMOUS, -1);
image = mmapForLinker(memberSize, MAP_ANONYMOUS, -1);
+#elif defined(darwin_HOST_OS)
+ /* See loadObj() */
+ misalignment = machoGetMisalignment(f);
+ image = stgMallocBytes(memberSize + misalignment, "loadArchive(image)");
+ image += misalignment;
#else
image = stgMallocBytes(memberSize, "loadArchive(image)");
#endif
#else
image = stgMallocBytes(memberSize, "loadArchive(image)");
#endif
oc = mkOc(path, image, memberSize, archiveMemberName
#ifndef USE_MMAP
#ifdef darwin_HOST_OS
oc = mkOc(path, image, memberSize, archiveMemberName
#ifndef USE_MMAP
#ifdef darwin_HOST_OS