mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 06:33:24 +00:00
Revert r199871 and replace it with a simple check in the debug info
code to see if we're emitting a function into a non-default text section. This is still a less-than-ideal solution, but more contained than r199871 to determine whether or not we're emitting code into an array of comdat sections. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200269 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2ddf01b64d
commit
1c2827cd6a
@ -53,7 +53,7 @@ public:
|
|||||||
|
|
||||||
virtual const MCSection *
|
virtual const MCSection *
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const;
|
Mangler *Mang, const TargetMachine &TM) const;
|
||||||
|
|
||||||
/// getTTypeGlobalReference - Return an MCExpr to use for a reference to the
|
/// getTTypeGlobalReference - Return an MCExpr to use for a reference to the
|
||||||
/// specified type info global variable from exception handling information.
|
/// specified type info global variable from exception handling information.
|
||||||
@ -92,7 +92,7 @@ public:
|
|||||||
|
|
||||||
virtual const MCSection *
|
virtual const MCSection *
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const;
|
Mangler *Mang, const TargetMachine &TM) const;
|
||||||
|
|
||||||
virtual const MCSection *
|
virtual const MCSection *
|
||||||
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
@ -131,7 +131,7 @@ public:
|
|||||||
|
|
||||||
virtual const MCSection *
|
virtual const MCSection *
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const;
|
Mangler *Mang, const TargetMachine &TM) const;
|
||||||
|
|
||||||
/// getDepLibFromLinkerOpt - Extract the dependent library name from a linker
|
/// getDepLibFromLinkerOpt - Extract the dependent library name from a linker
|
||||||
/// option string. Returns StringRef() if the option does not specify a library.
|
/// option string. Returns StringRef() if the option does not specify a library.
|
||||||
|
@ -38,7 +38,7 @@ class TargetLoweringObjectFile : public MCObjectFileInfo {
|
|||||||
const DataLayout *DL;
|
const DataLayout *DL;
|
||||||
|
|
||||||
TargetLoweringObjectFile(
|
TargetLoweringObjectFile(
|
||||||
const TargetLoweringObjectFile &) LLVM_DELETED_FUNCTION;
|
const TargetLoweringObjectFile&) LLVM_DELETED_FUNCTION;
|
||||||
void operator=(const TargetLoweringObjectFile&) LLVM_DELETED_FUNCTION;
|
void operator=(const TargetLoweringObjectFile&) LLVM_DELETED_FUNCTION;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -91,14 +91,14 @@ public:
|
|||||||
/// be passed external (or available externally) globals.
|
/// be passed external (or available externally) globals.
|
||||||
const MCSection *SectionForGlobal(const GlobalValue *GV,
|
const MCSection *SectionForGlobal(const GlobalValue *GV,
|
||||||
SectionKind Kind, Mangler *Mang,
|
SectionKind Kind, Mangler *Mang,
|
||||||
TargetMachine &TM) const;
|
const TargetMachine &TM) const;
|
||||||
|
|
||||||
/// SectionForGlobal - This method computes the appropriate section to emit
|
/// SectionForGlobal - This method computes the appropriate section to emit
|
||||||
/// the specified global variable or function definition. This should not
|
/// the specified global variable or function definition. This should not
|
||||||
/// be passed external (or available externally) globals.
|
/// be passed external (or available externally) globals.
|
||||||
const MCSection *SectionForGlobal(const GlobalValue *GV,
|
const MCSection *SectionForGlobal(const GlobalValue *GV,
|
||||||
Mangler *Mang,
|
Mangler *Mang,
|
||||||
TargetMachine &TM) const {
|
const TargetMachine &TM) const {
|
||||||
return SectionForGlobal(GV, getKindForGlobal(GV, TM), Mang, TM);
|
return SectionForGlobal(GV, getKindForGlobal(GV, TM), Mang, TM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual const MCSection *
|
virtual const MCSection *
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const;
|
Mangler *Mang, const TargetMachine &TM) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
@ -88,7 +88,6 @@ protected: // Can only create subclasses.
|
|||||||
unsigned MCUseLoc : 1;
|
unsigned MCUseLoc : 1;
|
||||||
unsigned MCUseCFI : 1;
|
unsigned MCUseCFI : 1;
|
||||||
unsigned MCUseDwarfDirectory : 1;
|
unsigned MCUseDwarfDirectory : 1;
|
||||||
unsigned DebugUseUniqueSections : 1;
|
|
||||||
unsigned RequireStructuredCFG : 1;
|
unsigned RequireStructuredCFG : 1;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -161,9 +160,6 @@ public:
|
|||||||
bool requiresStructuredCFG() const { return RequireStructuredCFG; }
|
bool requiresStructuredCFG() const { return RequireStructuredCFG; }
|
||||||
void setRequiresStructuredCFG(bool Value) { RequireStructuredCFG = Value; }
|
void setRequiresStructuredCFG(bool Value) { RequireStructuredCFG = Value; }
|
||||||
|
|
||||||
bool debugUseUniqueSections() const { return DebugUseUniqueSections; }
|
|
||||||
void setDebugUseUniqueSections(bool Value) { DebugUseUniqueSections = Value; }
|
|
||||||
|
|
||||||
/// hasMCRelaxAll - Check whether all machine code instructions should be
|
/// hasMCRelaxAll - Check whether all machine code instructions should be
|
||||||
/// relaxed.
|
/// relaxed.
|
||||||
bool hasMCRelaxAll() const { return MCRelaxAll; }
|
bool hasMCRelaxAll() const { return MCRelaxAll; }
|
||||||
|
@ -176,6 +176,7 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
|
|||||||
: Asm(A), MMI(Asm->MMI), FirstCU(0), SourceIdMap(DIEValueAllocator),
|
: Asm(A), MMI(Asm->MMI), FirstCU(0), SourceIdMap(DIEValueAllocator),
|
||||||
PrevLabel(NULL), GlobalRangeCount(0),
|
PrevLabel(NULL), GlobalRangeCount(0),
|
||||||
InfoHolder(A, "info_string", DIEValueAllocator), HasCURanges(false),
|
InfoHolder(A, "info_string", DIEValueAllocator), HasCURanges(false),
|
||||||
|
UsedNonDefaultText(false),
|
||||||
SkeletonHolder(A, "skel_string", DIEValueAllocator) {
|
SkeletonHolder(A, "skel_string", DIEValueAllocator) {
|
||||||
|
|
||||||
DwarfInfoSectionSym = DwarfAbbrevSectionSym = DwarfStrSectionSym = 0;
|
DwarfInfoSectionSym = DwarfAbbrevSectionSym = DwarfStrSectionSym = 0;
|
||||||
@ -1123,7 +1124,7 @@ void DwarfDebug::endSections() {
|
|||||||
// we have -ffunction-sections enabled, or we've emitted a function
|
// we have -ffunction-sections enabled, or we've emitted a function
|
||||||
// into a unique section. At this point all sections should be finalized
|
// into a unique section. At this point all sections should be finalized
|
||||||
// except for dwarf sections.
|
// except for dwarf sections.
|
||||||
HasCURanges = DwarfCURanges || Asm->TM.debugUseUniqueSections() ||
|
HasCURanges = DwarfCURanges || UsedNonDefaultText ||
|
||||||
TargetMachine::getFunctionSections();
|
TargetMachine::getFunctionSections();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1580,6 +1581,12 @@ void DwarfDebug::beginFunction(const MachineFunction *MF) {
|
|||||||
else
|
else
|
||||||
Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
|
Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
|
||||||
|
|
||||||
|
// Check the current section against the standard text section. If different
|
||||||
|
// keep track so that we will know when we're emitting functions into multiple
|
||||||
|
// sections.
|
||||||
|
if (Asm->getObjFileLowering().getTextSection() != Asm->getCurrentSection())
|
||||||
|
UsedNonDefaultText = true;
|
||||||
|
|
||||||
// Emit a label for the function so that we have a beginning address.
|
// Emit a label for the function so that we have a beginning address.
|
||||||
FunctionBeginSym = Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber());
|
FunctionBeginSym = Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber());
|
||||||
// Assumes in correct section after the entry point.
|
// Assumes in correct section after the entry point.
|
||||||
|
@ -461,6 +461,10 @@ class DwarfDebug : public AsmPrinterHandler {
|
|||||||
// Whether or not to use AT_ranges for compilation units.
|
// Whether or not to use AT_ranges for compilation units.
|
||||||
bool HasCURanges;
|
bool HasCURanges;
|
||||||
|
|
||||||
|
// Whether we emitted a function into a section other than the default
|
||||||
|
// text.
|
||||||
|
bool UsedNonDefaultText;
|
||||||
|
|
||||||
// Version of dwarf we're emitting.
|
// Version of dwarf we're emitting.
|
||||||
unsigned DwarfVersion;
|
unsigned DwarfVersion;
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ static const char *getSectionPrefixForGlobal(SectionKind Kind) {
|
|||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileELF::
|
const MCSection *TargetLoweringObjectFileELF::
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const {
|
Mangler *Mang, const TargetMachine &TM) const {
|
||||||
// If we have -ffunction-section or -fdata-section then we should emit the
|
// If we have -ffunction-section or -fdata-section then we should emit the
|
||||||
// global value to a uniqued section specifically for it.
|
// global value to a uniqued section specifically for it.
|
||||||
bool EmitUniquedSection;
|
bool EmitUniquedSection;
|
||||||
@ -258,8 +258,6 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
Flags |= ELF::SHF_GROUP;
|
Flags |= ELF::SHF_GROUP;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set that we've used a unique section name in the target machine.
|
|
||||||
TM.setDebugUseUniqueSections(true);
|
|
||||||
return getContext().getELFSection(Name.str(),
|
return getContext().getELFSection(Name.str(),
|
||||||
getELFSectionType(Name.str(), Kind),
|
getELFSectionType(Name.str(), Kind),
|
||||||
Flags, Kind, 0, Group);
|
Flags, Kind, 0, Group);
|
||||||
@ -531,7 +529,7 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileMachO::
|
const MCSection *TargetLoweringObjectFileMachO::
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const {
|
Mangler *Mang, const TargetMachine &TM) const {
|
||||||
|
|
||||||
// Handle thread local data.
|
// Handle thread local data.
|
||||||
if (Kind.isThreadBSS()) return TLSBSSSection;
|
if (Kind.isThreadBSS()) return TLSBSSSection;
|
||||||
@ -756,7 +754,7 @@ static const char *getCOFFSectionNameForUniqueGlobal(SectionKind Kind) {
|
|||||||
|
|
||||||
const MCSection *TargetLoweringObjectFileCOFF::
|
const MCSection *TargetLoweringObjectFileCOFF::
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const {
|
Mangler *Mang, const TargetMachine &TM) const {
|
||||||
|
|
||||||
// If this global is linkonce/weak and the target handles this by emitting it
|
// If this global is linkonce/weak and the target handles this by emitting it
|
||||||
// into a 'uniqued' section name, create and return the section now.
|
// into a 'uniqued' section name, create and return the section now.
|
||||||
|
@ -87,7 +87,7 @@ IsGlobalInSmallSection(const GlobalValue *GV, const TargetMachine &TM,
|
|||||||
|
|
||||||
const MCSection *HexagonTargetObjectFile::
|
const MCSection *HexagonTargetObjectFile::
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const {
|
Mangler *Mang, const TargetMachine &TM) const {
|
||||||
|
|
||||||
// Handle Small Section classification here.
|
// Handle Small Section classification here.
|
||||||
if (Kind.isBSS() && IsGlobalInSmallSection(GV, TM, Kind))
|
if (Kind.isBSS() && IsGlobalInSmallSection(GV, TM, Kind))
|
||||||
|
@ -30,9 +30,10 @@ namespace llvm {
|
|||||||
const TargetMachine &TM) const;
|
const TargetMachine &TM) const;
|
||||||
|
|
||||||
bool IsSmallDataEnabled () const;
|
bool IsSmallDataEnabled () const;
|
||||||
const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
|
const MCSection* SelectSectionForGlobal(const GlobalValue *GV,
|
||||||
SectionKind Kind, Mangler *Mang,
|
SectionKind Kind,
|
||||||
TargetMachine &TM) const;
|
Mangler *Mang,
|
||||||
|
const TargetMachine &TM) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace llvm
|
} // namespace llvm
|
||||||
|
@ -103,7 +103,7 @@ IsGlobalInSmallSection(const GlobalValue *GV, const TargetMachine &TM,
|
|||||||
|
|
||||||
const MCSection *MipsTargetObjectFile::
|
const MCSection *MipsTargetObjectFile::
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const {
|
Mangler *Mang, const TargetMachine &TM) const {
|
||||||
// TODO: Could also support "weak" symbols as well with ".gnu.linkonce.s.*"
|
// TODO: Could also support "weak" symbols as well with ".gnu.linkonce.s.*"
|
||||||
// sections?
|
// sections?
|
||||||
|
|
||||||
|
@ -31,8 +31,9 @@ namespace llvm {
|
|||||||
const TargetMachine &TM) const;
|
const TargetMachine &TM) const;
|
||||||
|
|
||||||
const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
|
const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
|
||||||
SectionKind Kind, Mangler *Mang,
|
SectionKind Kind,
|
||||||
TargetMachine &TM) const;
|
Mangler *Mang,
|
||||||
|
const TargetMachine &TM) const;
|
||||||
|
|
||||||
// TODO: Classify globals as mips wishes.
|
// TODO: Classify globals as mips wishes.
|
||||||
const MCSection *getReginfoSection() const { return ReginfoSection; }
|
const MCSection *getReginfoSection() const { return ReginfoSection; }
|
||||||
|
@ -24,7 +24,7 @@ Initialize(MCContext &Ctx, const TargetMachine &TM) {
|
|||||||
|
|
||||||
const MCSection * PPC64LinuxTargetObjectFile::
|
const MCSection * PPC64LinuxTargetObjectFile::
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, TargetMachine &TM) const {
|
Mangler *Mang, const TargetMachine &TM) const {
|
||||||
|
|
||||||
const MCSection *DefaultSection =
|
const MCSection *DefaultSection =
|
||||||
TargetLoweringObjectFileELF::SelectSectionForGlobal(GV, Kind, Mang, TM);
|
TargetLoweringObjectFileELF::SelectSectionForGlobal(GV, Kind, Mang, TM);
|
||||||
|
@ -22,10 +22,9 @@ namespace llvm {
|
|||||||
|
|
||||||
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
||||||
|
|
||||||
virtual const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
|
virtual const MCSection *
|
||||||
SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang,
|
Mangler *Mang, const TargetMachine &TM) const;
|
||||||
TargetMachine &TM) const;
|
|
||||||
|
|
||||||
/// \brief Describe a TLS variable address within debug info.
|
/// \brief Describe a TLS variable address within debug info.
|
||||||
virtual const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const;
|
virtual const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const;
|
||||||
|
@ -265,7 +265,7 @@ SectionKind TargetLoweringObjectFile::getKindForGlobal(const GlobalValue *GV,
|
|||||||
/// be passed external (or available externally) globals.
|
/// be passed external (or available externally) globals.
|
||||||
const MCSection *TargetLoweringObjectFile::
|
const MCSection *TargetLoweringObjectFile::
|
||||||
SectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
|
SectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
|
||||||
TargetMachine &TM) const {
|
const TargetMachine &TM) const {
|
||||||
// Select section name.
|
// Select section name.
|
||||||
if (GV->hasSection())
|
if (GV->hasSection())
|
||||||
return getExplicitSectionGlobal(GV, Kind, Mang, TM);
|
return getExplicitSectionGlobal(GV, Kind, Mang, TM);
|
||||||
@ -277,9 +277,11 @@ SectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
|
|||||||
|
|
||||||
|
|
||||||
// Lame default implementation. Calculate the section name for global.
|
// Lame default implementation. Calculate the section name for global.
|
||||||
const MCSection *TargetLoweringObjectFile::SelectSectionForGlobal(
|
const MCSection *
|
||||||
const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
|
TargetLoweringObjectFile::SelectSectionForGlobal(const GlobalValue *GV,
|
||||||
TargetMachine &TM) const {
|
SectionKind Kind,
|
||||||
|
Mangler *Mang,
|
||||||
|
const TargetMachine &TM) const{
|
||||||
assert(!Kind.isThreadLocal() && "Doesn't support TLS");
|
assert(!Kind.isThreadLocal() && "Doesn't support TLS");
|
||||||
|
|
||||||
if (Kind.isText())
|
if (Kind.isText())
|
||||||
|
@ -55,7 +55,6 @@ TargetMachine::TargetMachine(const Target &T,
|
|||||||
MCUseLoc(true),
|
MCUseLoc(true),
|
||||||
MCUseCFI(true),
|
MCUseCFI(true),
|
||||||
MCUseDwarfDirectory(false),
|
MCUseDwarfDirectory(false),
|
||||||
DebugUseUniqueSections(false),
|
|
||||||
RequireStructuredCFG(false),
|
RequireStructuredCFG(false),
|
||||||
Options(Options) {
|
Options(Options) {
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
|||||||
|
|
||||||
const MCSection *XCoreTargetObjectFile::
|
const MCSection *XCoreTargetObjectFile::
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
|
||||||
TargetMachine &TM) const{
|
const TargetMachine &TM) const{
|
||||||
if (Kind.isText()) return TextSection;
|
if (Kind.isText()) return TextSection;
|
||||||
if (Kind.isMergeable1ByteCString()) return CStringSection;
|
if (Kind.isMergeable1ByteCString()) return CStringSection;
|
||||||
if (Kind.isMergeableConst4()) return MergeableConst4Section;
|
if (Kind.isMergeableConst4()) return MergeableConst4Section;
|
||||||
|
@ -27,10 +27,9 @@ static const unsigned CodeModelLargeSize = 256;
|
|||||||
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang, const TargetMachine &TM) const;
|
Mangler *Mang, const TargetMachine &TM) const;
|
||||||
|
|
||||||
virtual const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
|
virtual const MCSection *
|
||||||
SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler *Mang,
|
Mangler *Mang, const TargetMachine &TM) const;
|
||||||
TargetMachine &TM) const;
|
|
||||||
|
|
||||||
virtual const MCSection *getSectionForConstant(SectionKind Kind) const;
|
virtual const MCSection *getSectionForConstant(SectionKind Kind) const;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user