mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-22 05:21:13 +00: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
|
// The LLVM Compiler Infrastructure
|
||||||
//
|
//
|
||||||
@ -24,6 +24,7 @@ class Value;
|
|||||||
class GlobalValue;
|
class GlobalValue;
|
||||||
template <typename T> class SmallVectorImpl;
|
template <typename T> class SmallVectorImpl;
|
||||||
class MCContext;
|
class MCContext;
|
||||||
|
class MCSymbol;
|
||||||
|
|
||||||
class Mangler {
|
class Mangler {
|
||||||
public:
|
public:
|
||||||
@ -34,7 +35,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const MCContext &Context;
|
MCContext &Context;
|
||||||
|
|
||||||
/// AnonGlobalIDs - We need to give global values the same name every time
|
/// 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
|
/// they are mangled. This keeps track of the number we give to anonymous
|
||||||
@ -47,8 +48,13 @@ private:
|
|||||||
unsigned NextAnonGlobalID;
|
unsigned NextAnonGlobalID;
|
||||||
|
|
||||||
public:
|
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
|
/// getNameWithPrefix - Fill OutName with the name of the appropriate prefix
|
||||||
/// and the specified global variable's name. If the global variable doesn't
|
/// 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.
|
/// 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
|
/// GetGlobalValueSymbol - Return the MCSymbol for the specified global
|
||||||
/// value.
|
/// value.
|
||||||
MCSymbol *AsmPrinter::GetGlobalValueSymbol(const GlobalValue *GV) const {
|
MCSymbol *AsmPrinter::GetGlobalValueSymbol(const GlobalValue *GV) const {
|
||||||
SmallString<60> NameStr;
|
return Mang->getSymbol(GV);
|
||||||
Mang->getNameWithPrefix(NameStr, GV, false);
|
|
||||||
|
|
||||||
if (!GV->hasPrivateLinkage())
|
|
||||||
return OutContext.GetOrCreateSymbol(NameStr.str());
|
|
||||||
return OutContext.GetOrCreateTemporarySymbol(NameStr.str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// GetSymbolWithGlobalValueBase - Return the MCSymbol for a symbol with
|
/// GetSymbolWithGlobalValueBase - Return the MCSymbol for a symbol with
|
||||||
|
@ -179,3 +179,16 @@ std::string Mangler::getNameWithPrefix(const GlobalValue *GV,
|
|||||||
getNameWithPrefix(Buf, GV, isImplicitlyPrivate);
|
getNameWithPrefix(Buf, GV, isImplicitlyPrivate);
|
||||||
return std::string(Buf.begin(), Buf.end());
|
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,
|
getExprForDwarfGlobalReference(const GlobalValue *GV, Mangler *Mang,
|
||||||
MachineModuleInfo *MMI, unsigned Encoding,
|
MachineModuleInfo *MMI, unsigned Encoding,
|
||||||
MCStreamer &Streamer) const {
|
MCStreamer &Streamer) const {
|
||||||
// FIXME: Use GetGlobalValueSymbol.
|
const MCSymbol *Sym = Mang->getSymbol(GV);
|
||||||
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());
|
|
||||||
|
|
||||||
return getExprForDwarfReference(Sym, Mang, MMI, Encoding, Streamer);
|
return getExprForDwarfReference(Sym, Mang, MMI, Encoding, Streamer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user