forked from OSchip/llvm-project
Use SpecificBumpPtrAllocator to simplify the MCSeciton destruction.
llvm-svn: 249589
This commit is contained in:
parent
730c27894a
commit
4264e2d531
|
@ -71,6 +71,10 @@ namespace llvm {
|
||||||
/// objects.
|
/// objects.
|
||||||
BumpPtrAllocator Allocator;
|
BumpPtrAllocator Allocator;
|
||||||
|
|
||||||
|
SpecificBumpPtrAllocator<MCSectionCOFF> COFFAllocator;
|
||||||
|
SpecificBumpPtrAllocator<MCSectionELF> ELFAllocator;
|
||||||
|
SpecificBumpPtrAllocator<MCSectionMachO> MachOAllocator;
|
||||||
|
|
||||||
/// Bindings of names to symbols.
|
/// Bindings of names to symbols.
|
||||||
SymbolTable Symbols;
|
SymbolTable Symbols;
|
||||||
|
|
||||||
|
|
|
@ -74,12 +74,9 @@ MCContext::~MCContext() {
|
||||||
|
|
||||||
void MCContext::reset() {
|
void MCContext::reset() {
|
||||||
// Call the destructors so the fragments are freed
|
// Call the destructors so the fragments are freed
|
||||||
for (auto &I : ELFUniquingMap)
|
COFFAllocator.DestroyAll();
|
||||||
I.second->~MCSectionELF();
|
ELFAllocator.DestroyAll();
|
||||||
for (auto &I : COFFUniquingMap)
|
MachOAllocator.DestroyAll();
|
||||||
I.second->~MCSectionCOFF();
|
|
||||||
for (auto &I : MachOUniquingMap)
|
|
||||||
I.second->~MCSectionMachO();
|
|
||||||
|
|
||||||
UsedNames.clear();
|
UsedNames.clear();
|
||||||
Symbols.clear();
|
Symbols.clear();
|
||||||
|
@ -294,8 +291,8 @@ MCSectionMachO *MCContext::getMachOSection(StringRef Segment, StringRef Section,
|
||||||
Begin = createTempSymbol(BeginSymName, false);
|
Begin = createTempSymbol(BeginSymName, false);
|
||||||
|
|
||||||
// Otherwise, return a new section.
|
// Otherwise, return a new section.
|
||||||
return Entry = new (*this) MCSectionMachO(Segment, Section, TypeAndAttributes,
|
return Entry = new (MachOAllocator.Allocate()) MCSectionMachO(
|
||||||
Reserved2, Kind, Begin);
|
Segment, Section, TypeAndAttributes, Reserved2, Kind, Begin);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MCContext::renameELFSection(MCSectionELF *Section, StringRef Name) {
|
void MCContext::renameELFSection(MCSectionELF *Section, StringRef Name) {
|
||||||
|
@ -322,7 +319,7 @@ MCSectionELF *MCContext::createELFRelSection(StringRef Name, unsigned Type,
|
||||||
bool Inserted;
|
bool Inserted;
|
||||||
std::tie(I, Inserted) = ELFRelSecNames.insert(std::make_pair(Name, true));
|
std::tie(I, Inserted) = ELFRelSecNames.insert(std::make_pair(Name, true));
|
||||||
|
|
||||||
return new (*this)
|
return new (ELFAllocator.Allocate())
|
||||||
MCSectionELF(I->getKey(), Type, Flags, SectionKind::getReadOnly(),
|
MCSectionELF(I->getKey(), Type, Flags, SectionKind::getReadOnly(),
|
||||||
EntrySize, Group, true, nullptr, Associated);
|
EntrySize, Group, true, nullptr, Associated);
|
||||||
}
|
}
|
||||||
|
@ -367,15 +364,15 @@ MCSectionELF *MCContext::getELFSection(StringRef Section, unsigned Type,
|
||||||
if (BeginSymName)
|
if (BeginSymName)
|
||||||
Begin = createTempSymbol(BeginSymName, false);
|
Begin = createTempSymbol(BeginSymName, false);
|
||||||
|
|
||||||
MCSectionELF *Result =
|
MCSectionELF *Result = new (ELFAllocator.Allocate())
|
||||||
new (*this) MCSectionELF(CachedName, Type, Flags, Kind, EntrySize,
|
MCSectionELF(CachedName, Type, Flags, Kind, EntrySize, GroupSym, UniqueID,
|
||||||
GroupSym, UniqueID, Begin, Associated);
|
Begin, Associated);
|
||||||
Entry.second = Result;
|
Entry.second = Result;
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
MCSectionELF *MCContext::createELFGroupSection(const MCSymbolELF *Group) {
|
MCSectionELF *MCContext::createELFGroupSection(const MCSymbolELF *Group) {
|
||||||
MCSectionELF *Result = new (*this)
|
MCSectionELF *Result = new (ELFAllocator.Allocate())
|
||||||
MCSectionELF(".group", ELF::SHT_GROUP, 0, SectionKind::getReadOnly(), 4,
|
MCSectionELF(".group", ELF::SHT_GROUP, 0, SectionKind::getReadOnly(), 4,
|
||||||
Group, ~0, nullptr, nullptr);
|
Group, ~0, nullptr, nullptr);
|
||||||
return Result;
|
return Result;
|
||||||
|
@ -404,7 +401,7 @@ MCSectionCOFF *MCContext::getCOFFSection(StringRef Section,
|
||||||
Begin = createTempSymbol(BeginSymName, false);
|
Begin = createTempSymbol(BeginSymName, false);
|
||||||
|
|
||||||
StringRef CachedName = Iter->first.SectionName;
|
StringRef CachedName = Iter->first.SectionName;
|
||||||
MCSectionCOFF *Result = new (*this) MCSectionCOFF(
|
MCSectionCOFF *Result = new (COFFAllocator.Allocate()) MCSectionCOFF(
|
||||||
CachedName, Characteristics, COMDATSymbol, Selection, Kind, Begin);
|
CachedName, Characteristics, COMDATSymbol, Selection, Kind, Begin);
|
||||||
|
|
||||||
Iter->second = Result;
|
Iter->second = Result;
|
||||||
|
|
Loading…
Reference in New Issue