summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoritz Angermann <moritz.angermann@gmail.com>2017-04-15 21:30:10 -0400
committerBen Gamari <ben@smart-cactus.org>2017-04-15 21:30:11 -0400
commit6c05b27e5bafe9f232e7014f4760335f5e3ba591 (patch)
tree816cd6036cb58b46348dfca6ade3b83f79f8d48c
parent8a54a4ff5565a2130f5c122ce5368446bfb2f22e (diff)
downloadhaskell-6c05b27e5bafe9f232e7014f4760335f5e3ba591.tar.gz
linker/mach-o: Catch the case where there is no symCmd
We do check for symCmd, to set the info->nlist value, but forgot to do the same check for info->names. Thus when trying to extract stroff from symCmd, we hit a segfault. Reviewers: bgamari, adinapoli, austin, erikd, simonmar Reviewed By: bgamari, adinapoli Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3459
-rw-r--r--rts/Linker.c2
-rw-r--r--rts/linker/MachO.c4
2 files changed, 5 insertions, 1 deletions
diff --git a/rts/Linker.c b/rts/Linker.c
index 7366904831..b214e9c01f 100644
--- a/rts/Linker.c
+++ b/rts/Linker.c
@@ -1215,6 +1215,8 @@ mkOc( pathchar *path, char *image, int imageSize,
IF_DEBUG(linker, debugBelch("mkOc: start\n"));
oc = stgMallocBytes(sizeof(ObjectCode), "mkOc(oc)");
+ oc->info = NULL;
+
# if defined(OBJFORMAT_ELF)
oc->formatName = "ELF";
# elif defined(OBJFORMAT_PEi386)
diff --git a/rts/linker/MachO.c b/rts/linker/MachO.c
index 16b712a804..e09d151c14 100644
--- a/rts/linker/MachO.c
+++ b/rts/linker/MachO.c
@@ -130,7 +130,9 @@ ocInit_MachO(ObjectCode * oc)
oc->info->nlist = oc->info->symCmd == NULL
? NULL
: (MachONList *)(oc->image + oc->info->symCmd->symoff);
- oc->info->names = oc->image + oc->info->symCmd->stroff;
+ oc->info->names = oc->info->symCmd == NULL
+ ? NULL
+ : (oc->image + oc->info->symCmd->stroff);
/* If we have symbols, allocate and fill the macho_symbols
* This will make relocation easier.