From 1b336d9064514219f370a4a12d7019f23393600e Mon Sep 17 00:00:00 2001 From: Sylvain HENRY Date: Mon, 14 Nov 2016 17:16:27 -0500 Subject: 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 --- rts/linker/LoadArchive.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'rts') 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 -- cgit v1.2.1