summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rts/linker/MachO.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/rts/linker/MachO.c b/rts/linker/MachO.c
index 21e46a30d2..9516eac1f2 100644
--- a/rts/linker/MachO.c
+++ b/rts/linker/MachO.c
@@ -1122,8 +1122,12 @@ ocBuildSegments_MachO(ObjectCode *oc)
n_activeSegments++;
}
- mem = mmapForLinker(size_compound, MAP_ANON, -1, 0);
- if (NULL == mem) return 0;
+ // N.B. it's possible that there is nothing mappable in an object. In this
+ // case we avoid the mmap call since it would fail. See #16701.
+ if (size_compound > 0) {
+ mem = mmapForLinker(size_compound, MAP_ANON, -1, 0);
+ if (NULL == mem) return 0;
+ }
IF_DEBUG(linker, debugBelch("ocBuildSegments: allocating %d segments\n", n_activeSegments));
segments = (Segment*)stgCallocBytes(n_activeSegments, sizeof(Segment),