diff options
author | Chris Lattner <sabre@nondot.org> | 2010-01-13 21:29:21 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-01-13 21:29:21 +0000 |
commit | 8da8d4b12a7e36e219894c256f545ddea66a9c49 (patch) | |
tree | 41cd17df6c1bc3f12a909387252b444326a78739 /lib/Target/TargetLoweringObjectFile.cpp | |
parent | 2cd4244815a4562854bc9c9c806a9df059cb42b9 (diff) |
fix ELF section mangling stuff for weak symbols to not use
obsolete Mangler interfaces.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93356 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/TargetLoweringObjectFile.cpp')
-rw-r--r-- | lib/Target/TargetLoweringObjectFile.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/Target/TargetLoweringObjectFile.cpp b/lib/Target/TargetLoweringObjectFile.cpp index 14f510cb2a..70e8008eb4 100644 --- a/lib/Target/TargetLoweringObjectFile.cpp +++ b/lib/Target/TargetLoweringObjectFile.cpp @@ -21,11 +21,13 @@ #include "llvm/MC/MCExpr.h" #include "llvm/MC/MCSectionMachO.h" #include "llvm/MC/MCSectionELF.h" +#include "llvm/MC/MCSymbol.h" #include "llvm/Target/TargetData.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Mangler.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringExtras.h" using namespace llvm; @@ -576,16 +578,16 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, // into a 'uniqued' section name, create and return the section now. if (GV->isWeakForLinker()) { const char *Prefix = getSectionPrefixForUniqueGlobal(Kind); - SmallString<128> Name; + SmallString<128> Name, MangledName; Name.append(Prefix, Prefix+strlen(Prefix)); - // FIXME: This will fail for weak globals with no names, this also depends - // on the mangling behavior of makeNameProper to mangle the section name - // before construction. Instead, this should use getNameWithPrefix on the - // global variable and the MCSection printing code should do the mangling. - Mang->makeNameProper(Name, GV->getName()); - - return getELFSection(Name.str(), - getELFSectionType(Name.str(), Kind), + Mang->getNameWithPrefix(Name, GV, false); + + raw_svector_ostream OS(MangledName); + MCSymbol::printMangledName(Name, OS, 0); + OS.flush(); + + return getELFSection(MangledName.str(), + getELFSectionType(MangledName.str(), Kind), getELFSectionFlags(Kind), Kind); } |