mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-19 04:32:19 +00:00
Centralize the handling of unique ids for temporary labels.
Before this patch code wanting to create temporary labels for a given entity (function, cu, exception range, etc) had to keep its own counter to have stable symbol names. createTempSymbol would still add a suffix to make sure a new symbol was always returned, but it kept a single counter. Because of that, if we were to use just createTempSymbol("cu_begin"), the label could change from cu_begin42 to cu_begin43 because some other code started using temporary labels. Simplify this by just keeping one counter per prefix and removing the various specialized counters. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232535 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
93920f0bcd
commit
b415e6b2f2
@ -331,7 +331,7 @@ public:
|
||||
// Symbol Lowering Routines.
|
||||
//===------------------------------------------------------------------===//
|
||||
public:
|
||||
MCSymbol *createTempSymbol(const Twine &Name, unsigned ID) const;
|
||||
MCSymbol *createTempSymbol(const Twine &Name) const;
|
||||
|
||||
/// Return the MCSymbol for a private symbol with global value name as its
|
||||
/// base, with the specified suffix.
|
||||
@ -491,7 +491,6 @@ private:
|
||||
mutable const MachineInstr *LastMI;
|
||||
mutable unsigned LastFn;
|
||||
mutable unsigned Counter;
|
||||
mutable unsigned SetCounter;
|
||||
|
||||
/// This method emits the header for the current function.
|
||||
void EmitFunctionHeader();
|
||||
|
@ -87,8 +87,9 @@ namespace llvm {
|
||||
/// artificial symbols.
|
||||
StringMap<bool, BumpPtrAllocator&> UsedNames;
|
||||
|
||||
/// The next ID to dole out to an unnamed assembler temporary symbol.
|
||||
unsigned NextUniqueID;
|
||||
/// The next ID to dole out to an unnamed assembler temporary symbol with
|
||||
/// a given prefix.
|
||||
StringMap<unsigned> NextID;
|
||||
|
||||
/// Instances of directional local labels.
|
||||
DenseMap<unsigned, MCLabel *> Instances;
|
||||
@ -171,7 +172,7 @@ namespace llvm {
|
||||
/// Do automatic reset in destructor
|
||||
bool AutoReset;
|
||||
|
||||
MCSymbol *CreateSymbol(StringRef Name);
|
||||
MCSymbol *CreateSymbol(StringRef Name, bool AlwaysAddSuffix);
|
||||
|
||||
MCSymbol *getOrCreateDirectionalLocalSymbol(unsigned LocalLabelVal,
|
||||
unsigned Instance);
|
||||
@ -212,10 +213,7 @@ namespace llvm {
|
||||
/// unspecified name.
|
||||
MCSymbol *CreateTempSymbol();
|
||||
|
||||
MCSymbol *createTempSymbol(const Twine &Name);
|
||||
|
||||
/// Return a unique identifier for use in constructing symbol names.
|
||||
unsigned getUniqueSymbolID() { return NextUniqueID++; }
|
||||
MCSymbol *createTempSymbol(const Twine &Name, bool AlwaysAddSuffix);
|
||||
|
||||
/// Create the definition of a directional local symbol for numbered label
|
||||
/// (used for "1:" definitions).
|
||||
|
@ -103,7 +103,7 @@ static unsigned getGVAlignmentLog2(const GlobalValue *GV, const DataLayout &DL,
|
||||
AsmPrinter::AsmPrinter(TargetMachine &tm, std::unique_ptr<MCStreamer> Streamer)
|
||||
: MachineFunctionPass(ID), TM(tm), MAI(tm.getMCAsmInfo()),
|
||||
OutContext(Streamer->getContext()), OutStreamer(*Streamer.release()),
|
||||
LastMI(nullptr), LastFn(0), Counter(~0U), SetCounter(0) {
|
||||
LastMI(nullptr), LastFn(0), Counter(~0U) {
|
||||
DD = nullptr;
|
||||
MMI = nullptr;
|
||||
LI = nullptr;
|
||||
@ -890,7 +890,7 @@ void AsmPrinter::EmitFunctionBody() {
|
||||
if (!MMI->getLandingPads().empty() || MMI->hasDebugInfo() ||
|
||||
MAI->hasDotTypeDotSizeDirective()) {
|
||||
// Create a symbol for the end of function.
|
||||
CurrentFnEnd = createTempSymbol("func_end", getFunctionNumber());
|
||||
CurrentFnEnd = createTempSymbol("func_end");
|
||||
OutStreamer.EmitLabel(CurrentFnEnd);
|
||||
}
|
||||
|
||||
@ -1133,7 +1133,7 @@ bool AsmPrinter::doFinalization(Module &M) {
|
||||
|
||||
MCSymbol *AsmPrinter::getCurExceptionSym() {
|
||||
if (!CurExceptionSym)
|
||||
CurExceptionSym = createTempSymbol("exception", getFunctionNumber());
|
||||
CurExceptionSym = createTempSymbol("exception");
|
||||
return CurExceptionSym;
|
||||
}
|
||||
|
||||
@ -1147,7 +1147,7 @@ void AsmPrinter::SetupMachineFunction(MachineFunction &MF) {
|
||||
bool NeedsLocalForSize = MAI->needsLocalForSize();
|
||||
if (!MMI->getLandingPads().empty() || MMI->hasDebugInfo() ||
|
||||
NeedsLocalForSize) {
|
||||
CurrentFnBegin = createTempSymbol("func_begin", getFunctionNumber());
|
||||
CurrentFnBegin = createTempSymbol("func_begin");
|
||||
if (NeedsLocalForSize)
|
||||
CurrentFnSymForSize = CurrentFnBegin;
|
||||
}
|
||||
@ -1577,7 +1577,7 @@ void AsmPrinter::EmitLabelDifference(const MCSymbol *Hi, const MCSymbol *Lo,
|
||||
}
|
||||
|
||||
// Otherwise, emit with .set (aka assignment).
|
||||
MCSymbol *SetLabel = createTempSymbol("set", SetCounter++);
|
||||
MCSymbol *SetLabel = createTempSymbol("set");
|
||||
OutStreamer.EmitAssignment(SetLabel, Diff);
|
||||
OutStreamer.EmitSymbolValue(SetLabel, Size);
|
||||
}
|
||||
@ -2252,8 +2252,8 @@ void AsmPrinter::printOffset(int64_t Offset, raw_ostream &OS) const {
|
||||
// Symbol Lowering Routines.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
MCSymbol *AsmPrinter::createTempSymbol(const Twine &Name, unsigned ID) const {
|
||||
return OutContext.createTempSymbol(Name + Twine(ID));
|
||||
MCSymbol *AsmPrinter::createTempSymbol(const Twine &Name) const {
|
||||
return OutContext.createTempSymbol(Name, true);
|
||||
}
|
||||
|
||||
MCSymbol *AsmPrinter::GetBlockAddressSymbol(const BlockAddress *BA) const {
|
||||
|
@ -96,7 +96,7 @@ void DwarfAccelTable::FinalizeTable(AsmPrinter *Asm, StringRef Prefix) {
|
||||
for (size_t i = 0, e = Data.size(); i < e; ++i) {
|
||||
uint32_t bucket = Data[i]->HashValue % Header.bucket_count;
|
||||
Buckets[bucket].push_back(Data[i]);
|
||||
Data[i]->Sym = Asm->createTempSymbol(Prefix, i);
|
||||
Data[i]->Sym = Asm->createTempSymbol(Prefix);
|
||||
}
|
||||
|
||||
// Sort the contents of the buckets by hash value so that hash
|
||||
|
@ -379,9 +379,7 @@ void DwarfCompileUnit::addScopeRangeList(DIE &ScopeDIE,
|
||||
const MCSymbol *RangeSectionSym =
|
||||
TLOF.getDwarfRangesSection()->getBeginSymbol();
|
||||
|
||||
RangeSpanList List(
|
||||
Asm->createTempSymbol("debug_ranges", DD->getNextRangeNumber()),
|
||||
std::move(Range));
|
||||
RangeSpanList List(Asm->createTempSymbol("debug_ranges"), std::move(Range));
|
||||
|
||||
// Under fission, ranges are specified by constant offsets relative to the
|
||||
// CU's DW_AT_GNU_ranges_base.
|
||||
@ -709,7 +707,7 @@ void DwarfCompileUnit::collectDeadVariables(DISubprogram SP) {
|
||||
void DwarfCompileUnit::emitHeader(bool UseOffsets) {
|
||||
// Don't bother labeling the .dwo unit, as its offset isn't used.
|
||||
if (!Skeleton) {
|
||||
LabelBegin = Asm->createTempSymbol("cu_begin", getUniqueID());
|
||||
LabelBegin = Asm->createTempSymbol("cu_begin");
|
||||
Asm->OutStreamer.EmitLabel(LabelBegin);
|
||||
}
|
||||
|
||||
|
@ -188,7 +188,7 @@ static LLVM_CONSTEXPR DwarfAccelTable::Atom TypeAtoms[] = {
|
||||
DwarfAccelTable::Atom(dwarf::DW_ATOM_type_flags, dwarf::DW_FORM_data1)};
|
||||
|
||||
DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
|
||||
: Asm(A), MMI(Asm->MMI), PrevLabel(nullptr), GlobalRangeCount(0),
|
||||
: Asm(A), MMI(Asm->MMI), PrevLabel(nullptr),
|
||||
InfoHolder(A, "info_string", DIEValueAllocator),
|
||||
UsedNonDefaultText(false),
|
||||
SkeletonHolder(A, "skel_string", DIEValueAllocator),
|
||||
@ -926,8 +926,7 @@ DwarfDebug::collectVariableInfo(DwarfCompileUnit &TheCU, DISubprogram SP,
|
||||
DotDebugLocEntries.resize(DotDebugLocEntries.size() + 1);
|
||||
DebugLocList &LocList = DotDebugLocEntries.back();
|
||||
LocList.CU = &TheCU;
|
||||
LocList.Label =
|
||||
Asm->createTempSymbol("debug_loc", DotDebugLocEntries.size() - 1);
|
||||
LocList.Label = Asm->createTempSymbol("debug_loc");
|
||||
|
||||
// Build the location list for this variable.
|
||||
buildLocationList(LocList.List, Ranges);
|
||||
@ -1415,15 +1414,14 @@ void DwarfDebug::emitDebugPubSection(
|
||||
|
||||
if (auto *Skeleton = TheU->getSkeleton())
|
||||
TheU = Skeleton;
|
||||
unsigned ID = TheU->getUniqueID();
|
||||
|
||||
// Start the dwarf pubnames section.
|
||||
Asm->OutStreamer.SwitchSection(PSec);
|
||||
|
||||
// Emit the header.
|
||||
Asm->OutStreamer.AddComment("Length of Public " + Name + " Info");
|
||||
MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin", ID);
|
||||
MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end", ID);
|
||||
MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + Name + "_begin");
|
||||
MCSymbol *EndLabel = Asm->createTempSymbol("pub" + Name + "_end");
|
||||
Asm->EmitLabelDifference(EndLabel, BeginLabel, 4);
|
||||
|
||||
Asm->OutStreamer.EmitLabel(BeginLabel);
|
||||
@ -1659,7 +1657,6 @@ void DwarfDebug::emitDebugARanges() {
|
||||
}
|
||||
|
||||
// Add terminating symbols for each section.
|
||||
unsigned ID = 0;
|
||||
for (const auto &I : SectionMap) {
|
||||
const MCSection *Section = I.first;
|
||||
MCSymbol *Sym = nullptr;
|
||||
@ -1669,14 +1666,13 @@ void DwarfDebug::emitDebugARanges() {
|
||||
// if we know the section name up-front. For user-created sections, the
|
||||
// resulting label may not be valid to use as a label. (section names can
|
||||
// use a greater set of characters on some systems)
|
||||
Sym = Asm->createTempSymbol("debug_end", ID);
|
||||
Sym = Asm->createTempSymbol("debug_end");
|
||||
Asm->OutStreamer.SwitchSection(Section);
|
||||
Asm->OutStreamer.EmitLabel(Sym);
|
||||
}
|
||||
|
||||
// Insert a final terminator.
|
||||
SectionMap[Section].push_back(SymbolCU(nullptr, Sym));
|
||||
++ID;
|
||||
}
|
||||
|
||||
DenseMap<DwarfCompileUnit *, std::vector<ArangeSpan>> Spans;
|
||||
|
@ -248,9 +248,6 @@ class DwarfDebug : public AsmPrinterHandler {
|
||||
// table for the same directory as DW_AT_comp_dir.
|
||||
StringRef CompilationDir;
|
||||
|
||||
// Counter for assigning globally unique IDs for ranges.
|
||||
unsigned GlobalRangeCount;
|
||||
|
||||
// Holder for the file specific debug information.
|
||||
DwarfFile InfoHolder;
|
||||
|
||||
@ -619,12 +616,6 @@ public:
|
||||
/// \brief Return Label immediately following the instruction.
|
||||
MCSymbol *getLabelAfterInsn(const MachineInstr *MI);
|
||||
|
||||
// FIXME: Consider rolling ranges up into DwarfDebug since we use a single
|
||||
// range_base anyway, so there's no need to keep them as separate per-CU range
|
||||
// lists. (though one day we might end up with a range.dwo section, in which
|
||||
// case it'd go to DwarfFile)
|
||||
unsigned getNextRangeNumber() { return GlobalRangeCount++; }
|
||||
|
||||
// FIXME: Sink these functions down into DwarfFile/Dwarf*Unit.
|
||||
|
||||
SmallPtrSet<const MDNode *, 16> &getProcessedSPNodes() {
|
||||
|
@ -19,7 +19,7 @@ getEntry(AsmPrinter &Asm,
|
||||
std::pair<MCSymbol *, unsigned> &Entry = Pool[Str];
|
||||
if (!Entry.first) {
|
||||
Entry.second = Pool.size() - 1;
|
||||
Entry.first = Asm.createTempSymbol(Prefix, Entry.second);
|
||||
Entry.first = Asm.createTempSymbol(Prefix);
|
||||
}
|
||||
return Entry;
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ MCContext::MCContext(const MCAsmInfo *mai, const MCRegisterInfo *mri,
|
||||
const MCObjectFileInfo *mofi, const SourceMgr *mgr,
|
||||
bool DoAutoReset)
|
||||
: SrcMgr(mgr), MAI(mai), MRI(mri), MOFI(mofi), Allocator(),
|
||||
Symbols(Allocator), UsedNames(Allocator), NextUniqueID(0),
|
||||
Symbols(Allocator), UsedNames(Allocator),
|
||||
CurrentDwarfLoc(0, 0, 0, DWARF2_FLAG_IS_STMT, 0, 0), DwarfLocSeen(false),
|
||||
GenDwarfForAssembly(false), GenDwarfFileNumber(0), DwarfVersion(4),
|
||||
AllowTemporaryLabels(true), DwarfCompileUnitID(0),
|
||||
@ -87,7 +87,7 @@ void MCContext::reset() {
|
||||
ELFUniquingMap.clear();
|
||||
COFFUniquingMap.clear();
|
||||
|
||||
NextUniqueID = 0;
|
||||
NextID.clear();
|
||||
AllowTemporaryLabels = true;
|
||||
DwarfLocSeen = false;
|
||||
GenDwarfForAssembly = false;
|
||||
@ -106,7 +106,7 @@ MCSymbol *MCContext::GetOrCreateSymbol(const Twine &Name) {
|
||||
|
||||
MCSymbol *&Sym = Symbols[NameRef];
|
||||
if (!Sym)
|
||||
Sym = CreateSymbol(NameRef);
|
||||
Sym = CreateSymbol(NameRef, false);
|
||||
|
||||
return Sym;
|
||||
}
|
||||
@ -139,49 +139,48 @@ MCSymbol *MCContext::getOrCreateFrameAllocSymbol(StringRef FuncName,
|
||||
"$frame_escape_" + Twine(Idx));
|
||||
}
|
||||
|
||||
MCSymbol *MCContext::CreateSymbol(StringRef Name) {
|
||||
MCSymbol *MCContext::CreateSymbol(StringRef Name, bool AlwaysAddSuffix) {
|
||||
// Determine whether this is an assembler temporary or normal label, if used.
|
||||
bool isTemporary = false;
|
||||
bool IsTemporary = false;
|
||||
if (AllowTemporaryLabels)
|
||||
isTemporary = Name.startswith(MAI->getPrivateGlobalPrefix());
|
||||
IsTemporary = Name.startswith(MAI->getPrivateGlobalPrefix());
|
||||
|
||||
auto NameEntry = UsedNames.insert(std::make_pair(Name, true));
|
||||
if (!NameEntry.second) {
|
||||
assert(isTemporary && "Cannot rename non-temporary symbols");
|
||||
SmallString<128> NewName = Name;
|
||||
do {
|
||||
SmallString<128> NewName = Name;
|
||||
bool AddSuffix = AlwaysAddSuffix;
|
||||
unsigned &NextUniqueID = NextID[Name];
|
||||
for (;;) {
|
||||
if (AddSuffix) {
|
||||
NewName.resize(Name.size());
|
||||
raw_svector_ostream(NewName) << NextUniqueID++;
|
||||
NameEntry = UsedNames.insert(std::make_pair(NewName, true));
|
||||
} while (!NameEntry.second);
|
||||
}
|
||||
auto NameEntry = UsedNames.insert(std::make_pair(NewName, true));
|
||||
if (NameEntry.second) {
|
||||
// Ok, we found a name. Have the MCSymbol object itself refer to the copy
|
||||
// of the string that is embedded in the UsedNames entry.
|
||||
MCSymbol *Result =
|
||||
new (*this) MCSymbol(NameEntry.first->getKey(), IsTemporary);
|
||||
return Result;
|
||||
}
|
||||
assert(IsTemporary && "Cannot rename non-temporary symbols");
|
||||
AddSuffix = true;
|
||||
}
|
||||
|
||||
// Ok, the entry doesn't already exist. Have the MCSymbol object itself refer
|
||||
// to the copy of the string that is embedded in the UsedNames entry.
|
||||
MCSymbol *Result =
|
||||
new (*this) MCSymbol(NameEntry.first->getKey(), isTemporary);
|
||||
|
||||
return Result;
|
||||
llvm_unreachable("Infinite loop");
|
||||
}
|
||||
|
||||
MCSymbol *MCContext::createTempSymbol(const Twine &Name) {
|
||||
MCSymbol *MCContext::createTempSymbol(const Twine &Name, bool AlwaysAddSuffix) {
|
||||
SmallString<128> NameSV;
|
||||
raw_svector_ostream(NameSV) << MAI->getPrivateGlobalPrefix() << Name;
|
||||
return CreateSymbol(NameSV);
|
||||
return CreateSymbol(NameSV, AlwaysAddSuffix);
|
||||
}
|
||||
|
||||
MCSymbol *MCContext::CreateLinkerPrivateTempSymbol() {
|
||||
SmallString<128> NameSV;
|
||||
raw_svector_ostream(NameSV)
|
||||
<< MAI->getLinkerPrivateGlobalPrefix() << "tmp" << NextUniqueID++;
|
||||
return CreateSymbol(NameSV);
|
||||
raw_svector_ostream(NameSV) << MAI->getLinkerPrivateGlobalPrefix() << "tmp";
|
||||
return CreateSymbol(NameSV, true);
|
||||
}
|
||||
|
||||
MCSymbol *MCContext::CreateTempSymbol() {
|
||||
SmallString<128> NameSV;
|
||||
raw_svector_ostream(NameSV)
|
||||
<< MAI->getPrivateGlobalPrefix() << "tmp" << NextUniqueID++;
|
||||
return CreateSymbol(NameSV);
|
||||
return createTempSymbol("tmp", true);
|
||||
}
|
||||
|
||||
unsigned MCContext::NextInstance(unsigned LocalLabelVal) {
|
||||
@ -251,7 +250,7 @@ MCContext::getMachOSection(StringRef Segment, StringRef Section,
|
||||
|
||||
MCSymbol *Begin = nullptr;
|
||||
if (BeginSymName)
|
||||
Begin = createTempSymbol(BeginSymName);
|
||||
Begin = createTempSymbol(BeginSymName, false);
|
||||
|
||||
// Otherwise, return a new section.
|
||||
return Entry = new (*this) MCSectionMachO(Segment, Section, TypeAndAttributes,
|
||||
@ -302,7 +301,7 @@ const MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type,
|
||||
|
||||
MCSymbol *Begin = nullptr;
|
||||
if (BeginSymName)
|
||||
Begin = createTempSymbol(BeginSymName);
|
||||
Begin = createTempSymbol(BeginSymName, false);
|
||||
|
||||
MCSectionELF *Result = new (*this) MCSectionELF(
|
||||
CachedName, Type, Flags, Kind, EntrySize, GroupSym, Unique, Begin);
|
||||
@ -344,7 +343,7 @@ MCContext::getCOFFSection(StringRef Section, unsigned Characteristics,
|
||||
|
||||
MCSymbol *Begin = nullptr;
|
||||
if (BeginSymName)
|
||||
Begin = createTempSymbol(BeginSymName);
|
||||
Begin = createTempSymbol(BeginSymName, false);
|
||||
|
||||
StringRef CachedName = std::get<0>(Iter->first);
|
||||
MCSectionCOFF *Result = new (*this) MCSectionCOFF(
|
||||
|
@ -52,7 +52,7 @@ class AArch64AsmPrinter : public AsmPrinter {
|
||||
public:
|
||||
AArch64AsmPrinter(TargetMachine &TM, std::unique_ptr<MCStreamer> Streamer)
|
||||
: AsmPrinter(TM, std::move(Streamer)), MCInstLowering(OutContext, *this),
|
||||
SM(*this), AArch64FI(nullptr), LOHLabelCounter(0) {}
|
||||
SM(*this), AArch64FI(nullptr) {}
|
||||
|
||||
const char *getPassName() const override {
|
||||
return "AArch64 Assembly Printer";
|
||||
@ -113,7 +113,6 @@ private:
|
||||
|
||||
typedef std::map<const MachineInstr *, MCSymbol *> MInstToMCSymbol;
|
||||
MInstToMCSymbol LOHInstToLabel;
|
||||
unsigned LOHLabelCounter;
|
||||
};
|
||||
|
||||
} // end of anonymous namespace
|
||||
@ -464,7 +463,7 @@ void AArch64AsmPrinter::EmitInstruction(const MachineInstr *MI) {
|
||||
|
||||
if (AArch64FI->getLOHRelated().count(MI)) {
|
||||
// Generate a label for LOH related instruction
|
||||
MCSymbol *LOHLabel = createTempSymbol("loh", LOHLabelCounter++);
|
||||
MCSymbol *LOHLabel = createTempSymbol("loh");
|
||||
// Associate the instruction with the label
|
||||
LOHInstToLabel[MI] = LOHLabel;
|
||||
OutStreamer.EmitLabel(LOHLabel);
|
||||
|
@ -69,12 +69,11 @@ namespace {
|
||||
protected:
|
||||
MapVector<MCSymbol*, MCSymbol*> TOC;
|
||||
const PPCSubtarget *Subtarget;
|
||||
uint64_t TOCLabelID;
|
||||
StackMaps SM;
|
||||
public:
|
||||
explicit PPCAsmPrinter(TargetMachine &TM,
|
||||
std::unique_ptr<MCStreamer> Streamer)
|
||||
: AsmPrinter(TM, std::move(Streamer)), TOCLabelID(0), SM(*this) {}
|
||||
: AsmPrinter(TM, std::move(Streamer)), SM(*this) {}
|
||||
|
||||
const char *getPassName() const override {
|
||||
return "PowerPC Assembly Printer";
|
||||
@ -323,7 +322,7 @@ bool PPCAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo,
|
||||
MCSymbol *PPCAsmPrinter::lookUpOrCreateTOCEntry(MCSymbol *Sym) {
|
||||
MCSymbol *&TOCEntry = TOC[Sym];
|
||||
if (!TOCEntry)
|
||||
TOCEntry = createTempSymbol("C", TOCLabelID++);
|
||||
TOCEntry = createTempSymbol("C");
|
||||
return TOCEntry;
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
; <text section> - it should have made one span covering all functions in this CU.
|
||||
; CHECK-NEXT: .quad .Lfunc_begin0
|
||||
; CHECK-NEXT: .quad .Ldebug_end3-.Lfunc_begin0
|
||||
; CHECK-NEXT: .quad .Ldebug_end2-.Lfunc_begin0
|
||||
|
||||
; -- finish --
|
||||
; CHECK-NEXT: # ARange terminator
|
||||
|
@ -10,5 +10,5 @@
|
||||
// CHECK: .size bar, .Ltmp0-bar
|
||||
// CHECK: .Ltmp01
|
||||
// CHECK: .size foo, .Ltmp01-foo
|
||||
// CHECK: .Ltmp02
|
||||
// CHECK: .size qux, .Ltmp02-qux
|
||||
// CHECK: .Ltmp00
|
||||
// CHECK: .size qux, .Ltmp00-qux
|
||||
|
@ -653,8 +653,8 @@ void DwarfStreamer::emitUnitRangesEntries(CompileUnit &Unit,
|
||||
if (!Ranges.empty()) {
|
||||
MS->SwitchSection(MC->getObjectFileInfo()->getDwarfARangesSection());
|
||||
|
||||
MCSymbol *BeginLabel = Asm->createTempSymbol("Barange", Unit.getUniqueID());
|
||||
MCSymbol *EndLabel = Asm->createTempSymbol("Earange", Unit.getUniqueID());
|
||||
MCSymbol *BeginLabel = Asm->createTempSymbol("Barange");
|
||||
MCSymbol *EndLabel = Asm->createTempSymbol("Earange");
|
||||
|
||||
unsigned HeaderSize =
|
||||
sizeof(int32_t) + // Size of contents (w/o this field
|
||||
@ -918,10 +918,8 @@ void DwarfStreamer::emitPubSectionForUnit(
|
||||
|
||||
// Start the dwarf pubnames section.
|
||||
Asm->OutStreamer.SwitchSection(Sec);
|
||||
MCSymbol *BeginLabel =
|
||||
Asm->createTempSymbol("pub" + SecName + "_begin", Unit.getUniqueID());
|
||||
MCSymbol *EndLabel =
|
||||
Asm->createTempSymbol("pub" + SecName + "_end", Unit.getUniqueID());
|
||||
MCSymbol *BeginLabel = Asm->createTempSymbol("pub" + SecName + "_begin");
|
||||
MCSymbol *EndLabel = Asm->createTempSymbol("pub" + SecName + "_end");
|
||||
|
||||
bool HeaderEmitted = false;
|
||||
// Emit the pubnames for this compilation unit.
|
||||
|
Loading…
x
Reference in New Issue
Block a user