mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
finally give Mangler a getSymbol method, which returns an MCSymbol
for a global instead of messing around with string buffers. llvm-svn: 98366
This commit is contained in:
parent
04cd48f865
commit
01e70df9b2
@ -1,4 +1,4 @@
|
||||
//===-- llvm/Target/Mangler.h - Self-contained name mangler ----*- C++ -*-===//
|
||||
//===-- llvm/Target/Mangler.h - Self-contained name mangler -----*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
@ -24,6 +24,7 @@ class Value;
|
||||
class GlobalValue;
|
||||
template <typename T> class SmallVectorImpl;
|
||||
class MCContext;
|
||||
class MCSymbol;
|
||||
|
||||
class Mangler {
|
||||
public:
|
||||
@ -34,7 +35,7 @@ public:
|
||||
};
|
||||
|
||||
private:
|
||||
const MCContext &Context;
|
||||
MCContext &Context;
|
||||
|
||||
/// AnonGlobalIDs - We need to give global values the same name every time
|
||||
/// they are mangled. This keeps track of the number we give to anonymous
|
||||
@ -47,8 +48,13 @@ private:
|
||||
unsigned NextAnonGlobalID;
|
||||
|
||||
public:
|
||||
Mangler(const MCContext &context) : Context(context), NextAnonGlobalID(1) {}
|
||||
Mangler(MCContext &context) : Context(context), NextAnonGlobalID(1) {}
|
||||
|
||||
/// getSymbol - Return the MCSymbol for the specified global value. This
|
||||
/// symbol is the main label that is the address of the global.
|
||||
MCSymbol *getSymbol(const GlobalValue *GV);
|
||||
|
||||
|
||||
/// getNameWithPrefix - Fill OutName with the name of the appropriate prefix
|
||||
/// and the specified global variable's name. If the global variable doesn't
|
||||
/// have a name, this fills in a unique name for the global.
|
||||
|
@ -1632,12 +1632,7 @@ MCSymbol *AsmPrinter::GetJTSetSymbol(unsigned UID, unsigned MBBID) const {
|
||||
/// GetGlobalValueSymbol - Return the MCSymbol for the specified global
|
||||
/// value.
|
||||
MCSymbol *AsmPrinter::GetGlobalValueSymbol(const GlobalValue *GV) const {
|
||||
SmallString<60> NameStr;
|
||||
Mang->getNameWithPrefix(NameStr, GV, false);
|
||||
|
||||
if (!GV->hasPrivateLinkage())
|
||||
return OutContext.GetOrCreateSymbol(NameStr.str());
|
||||
return OutContext.GetOrCreateTemporarySymbol(NameStr.str());
|
||||
return Mang->getSymbol(GV);
|
||||
}
|
||||
|
||||
/// GetSymbolWithGlobalValueBase - Return the MCSymbol for a symbol with
|
||||
|
@ -179,3 +179,16 @@ std::string Mangler::getNameWithPrefix(const GlobalValue *GV,
|
||||
getNameWithPrefix(Buf, GV, isImplicitlyPrivate);
|
||||
return std::string(Buf.begin(), Buf.end());
|
||||
}
|
||||
|
||||
/// getSymbol - Return the MCSymbol for the specified global value. This
|
||||
/// symbol is the main label that is the address of the global.
|
||||
MCSymbol *Mangler::getSymbol(const GlobalValue *GV) {
|
||||
SmallString<60> NameStr;
|
||||
getNameWithPrefix(NameStr, GV, false);
|
||||
if (!GV->hasPrivateLinkage())
|
||||
return Context.GetOrCreateSymbol(NameStr.str());
|
||||
|
||||
return Context.GetOrCreateTemporarySymbol(NameStr.str());
|
||||
}
|
||||
|
||||
|
||||
|
@ -298,16 +298,7 @@ const MCExpr *TargetLoweringObjectFile::
|
||||
getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
|
||||
MachineModuleInfo *MMI, unsigned Encoding,
|
||||
MCStreamer &Streamer) const {
|
||||
// FIXME: Use GetGlobalValueSymbol.
|
||||
SmallString<128> Name;
|
||||
Mang->getNameWithPrefix(Name, GV, false);
|
||||
const MCSymbol *Sym;
|
||||
|
||||
if (GV->hasPrivateLinkage())
|
||||
Sym = getContext().GetOrCreateTemporarySymbol(Name.str());
|
||||
else
|
||||
Sym = getContext().GetOrCreateSymbol(Name.str());
|
||||
|
||||
const MCSymbol *Sym = Mang->getSymbol(GV);
|
||||
return getExprForDwarfReference(Sym, Mang, MMI, Encoding, Streamer);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user