From f214fe8b32b78d414838f85d6e758cfca0e5c234 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 9 Dec 2014 16:50:57 +0000 Subject: [PATCH] Remember the unmangled name in the plugin. This allows it to work with non trivial manglings like the one in COFF. Amusingly, this can be tested with gold, as emit-llvm causes the plugin to exit before any COFF is generated. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223790 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/gold/coff.ll | 22 ++++++++++++++++++++++ tools/gold/gold-plugin.cpp | 6 +++--- 2 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 test/tools/gold/coff.ll diff --git a/test/tools/gold/coff.ll b/test/tools/gold/coff.ll new file mode 100644 index 00000000000..b66f028a14d --- /dev/null +++ b/test/tools/gold/coff.ll @@ -0,0 +1,22 @@ +; RUN: llvm-as %s -o %t.o +; RUN: ld -plugin %llvmshlibdir/LLVMgold.so -plugin-opt=emit-llvm \ +; RUN: -shared %t.o -o %t2.o +; RUN: llvm-dis %t2.o -o - | FileCheck %s + + +target datalayout = "m:w" + +; CHECK: define void @f() { +define void @f() { + ret void +} + +; CHECK: define internal void @g() { +define hidden void @g() { + ret void +} + +; CHECK: define internal void @h() { +define linkonce_odr void @h() { + ret void +} diff --git a/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index 972dbd32365..2cb181eca38 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -625,7 +625,7 @@ getModuleForFile(LLVMContext &Context, claimed_file &F, raw_fd_ostream *ApiFile, // Since we use the regular lib/Linker, we cannot just internalize GV // now or it will not be copied to the merged module. Instead we force // it to be copied and then internalize it. - Internalize.insert(Sym.name); + Internalize.insert(GV->getName()); } break; } @@ -638,7 +638,7 @@ getModuleForFile(LLVMContext &Context, claimed_file &F, raw_fd_ostream *ApiFile, // Gold might have selected a linkonce_odr and preempted a weak_odr. // In that case we have to make sure we don't end up internalizing it. if (!GV->isDiscardableIfUnused()) - Maybe.erase(Sym.name); + Maybe.erase(GV->getName()); // fall-through case LDPR_PREEMPTED_REG: @@ -651,7 +651,7 @@ getModuleForFile(LLVMContext &Context, claimed_file &F, raw_fd_ostream *ApiFile, // and in that module the address might be significant, but that // copy will be LDPR_PREEMPTED_IR. if (GV->hasLinkOnceODRLinkage()) - Maybe.insert(Sym.name); + Maybe.insert(GV->getName()); keepGlobalValue(*GV, KeptAliases); break; }