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
This commit is contained in:
Rafael Espindola 2014-12-09 16:50:57 +00:00
parent 8eabcf7ce7
commit f214fe8b32
2 changed files with 25 additions and 3 deletions

22
test/tools/gold/coff.ll Normal file
View File

@ -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
}

View File

@ -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;
}