#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/GlobalVariable.h"
+#include "llvm/IR/Mangler.h"
#include "llvm/MC/MCAsmInfo.h"
+#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
return true;
}
+
+void TargetLoweringBase::getNameWithPrefix(SmallVectorImpl<char> &Name,
+ const GlobalValue *GV,
+ Mangler &Mang,
+ bool MayAlwaysUsePrivate) const {
+ if (MayAlwaysUsePrivate || !GV->hasPrivateLinkage()) {
+ // Simple case: If GV is not private, it is not important to find out if
+ // private labels are legal in this case or not.
+ Mang.getNameWithPrefix(Name, GV, false);
+ return;
+ }
+ SectionKind GVKind =
+ TargetLoweringObjectFile::getKindForGlobal(GV, getTargetMachine());
+ const TargetLoweringObjectFile &TLOF = getObjFileLowering();
+ const MCSection *TheSection =
+ TLOF.SectionForGlobal(GV, GVKind, Mang, getTargetMachine());
+ bool CannotUsePrivateLabel = TLOF.isSectionAtomizableBySymbols(*TheSection);
+ Mang.getNameWithPrefix(Name, GV, CannotUsePrivateLabel);
+}
+
+MCSymbol *TargetLoweringBase::getSymbol(const GlobalValue *GV,
+ Mangler &Mang) const {
+ SmallString<60> NameStr;
+ getNameWithPrefix(NameStr, GV, Mang);
+ const TargetLoweringObjectFile &TLOF = getObjFileLowering();
+ return TLOF.getContext().GetOrCreateSymbol(NameStr.str());
+}