diff options
author | Sylvain HENRY <hsyl20@gmail.com> | 2016-11-14 17:16:27 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2016-11-14 17:16:28 -0500 |
commit | 1b336d9064514219f370a4a12d7019f23393600e (patch) | |
tree | bcc44e4e36bba9268c78d346c5555858acd678cf /rts | |
parent | 011af2bf448c28db68a55293abaa5b294f170e37 (diff) | |
download | haskell-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
Diffstat (limited to 'rts')
-rw-r--r-- | rts/linker/LoadArchive.c | 6 |
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 |