From a49b05bb61f73eee3ebfa6c985c1d19356d383b5 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Sat, 15 Aug 2020 15:45:49 -0700 Subject: [PATCH] [JITLink][MachO] Use correct symbol scope when N_PEXT is set and N_EXT unset. MachOLinkGraphBuilder has been treating these as hidden, but they should be treated as local. Symbols with N_PEXT set and N_EXT unset are produced when hidden symbols are run through 'ld -r' without passing -keep_private_externs. They will show up under 'nm -m' as "was private extern", hence the name of the test cases. Testcase commited as relocatable object to ensure that the test suite doesn't depend on having 'ld -r' available. --- .../lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp | 4 +--- .../JITLink/X86/Inputs/MachO_x86-64_was_private_extern.o | Bin 0 -> 480 bytes .../JITLink/X86/MachO_x86-64_was_private_extern.test | 9 +++++++++ 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 llvm/test/ExecutionEngine/JITLink/X86/Inputs/MachO_x86-64_was_private_extern.o create mode 100644 llvm/test/ExecutionEngine/JITLink/X86/MachO_x86-64_was_private_extern.test diff --git a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp index fa3f403..cf1bb23 100644 --- a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp +++ b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp @@ -64,10 +64,8 @@ Linkage MachOLinkGraphBuilder::getLinkage(uint16_t Desc) { } Scope MachOLinkGraphBuilder::getScope(StringRef Name, uint8_t Type) { - if (Type & MachO::N_PEXT) - return Scope::Hidden; if (Type & MachO::N_EXT) { - if (Name.startswith("l")) + if ((Type & MachO::N_PEXT) || Name.startswith("l")) return Scope::Hidden; else return Scope::Default; diff --git a/llvm/test/ExecutionEngine/JITLink/X86/Inputs/MachO_x86-64_was_private_extern.o b/llvm/test/ExecutionEngine/JITLink/X86/Inputs/MachO_x86-64_was_private_extern.o new file mode 100644 index 0000000000000000000000000000000000000000..c1357461b9dd2d67a130dd3acf934b0dc444bf56 GIT binary patch literal 480 zcmX^A>+L^w1_nlE1|R{%EI@1kVkiJH5J&>?3or{iAr2KT0OKy{$7H~^#-fV2@1gJ>X^fq|b3j6rOW8U{8UCQTqE0K_1D z!~l<8R*