summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylvain HENRY <hsyl20@gmail.com>2016-11-14 17:16:27 -0500
committerBen Gamari <ben@smart-cactus.org>2016-11-14 17:16:28 -0500
commit1b336d9064514219f370a4a12d7019f23393600e (patch)
treebcc44e4e36bba9268c78d346c5555858acd678cf
parent011af2bf448c28db68a55293abaa5b294f170e37 (diff)
downloadhaskell-1b336d9064514219f370a4a12d7019f23393600e.tar.gz
Skip 64-bit symbol tables
This patch makes the RTS linker skip 64-bit symbol table entries. See https://mail.haskell.org/pipermail/ghc-devs/2016-November/013210.html Test Plan: validate Reviewers: austin, erikd, simonmar, bgamari Reviewed By: bgamari Subscribers: osa1, thomie Differential Revision: https://phabricator.haskell.org/D2697 GHC Trac Issues: #12827
-rw-r--r--rts/linker/LoadArchive.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/rts/linker/LoadArchive.c b/rts/linker/LoadArchive.c
index 1aa4daa35d..04bd455e43 100644
--- a/rts/linker/LoadArchive.c
+++ b/rts/linker/LoadArchive.c
@@ -288,12 +288,14 @@ static HsInt loadArchive_ (pathchar *path)
memcpy(fileName, gnuFileIndex + n, thisFileNameSize);
fileName[thisFileNameSize] = '\0';
}
- else if (fileName[1] == ' ') {
+ /* Skip 32-bit symbol table ("/" + 15 blank characters)
+ and 64-bit symbol table ("/SYM64/" + 9 blank characters) */
+ else if (fileName[1] == ' ' || (0 == strncmp(&fileName[1], "SYM64/", 6))) {
fileName[0] = '\0';
thisFileNameSize = 0;
}
else {
- barf("loadArchive: GNU-variant filename offset not found while reading filename from `%s'", path);
+ barf("loadArchive: invalid GNU-variant filename `%.16s' while reading filename from `%s'", fileName, path);
}
}
/* Finally, the case where the filename field actually contains