diff options
author | Pedro Artigas <partigas@apple.com> | 2012-12-12 22:59:46 +0000 |
---|---|---|
committer | Pedro Artigas <partigas@apple.com> | 2012-12-12 22:59:46 +0000 |
commit | 5399d2502acaf96fe8420e61913e77f0b23650ff (patch) | |
tree | 0a88b5a320500c2eeae8320ce4bd46014af30ef9 /lib/MC | |
parent | 5749801caaf523e2e151eea4cacc87299a4b3822 (diff) | |
download | external_llvm-5399d2502acaf96fe8420e61913e77f0b23650ff.zip external_llvm-5399d2502acaf96fe8420e61913e77f0b23650ff.tar.gz external_llvm-5399d2502acaf96fe8420e61913e77f0b23650ff.tar.bz2 |
Make the MCStreamer have a reset method and call that after finalization of the asm printer,
also changed MCContext to a single reset only method for simplicity as requested on the list
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170041 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/MCAssembler.cpp | 13 | ||||
-rw-r--r-- | lib/MC/MCContext.cpp | 34 | ||||
-rw-r--r-- | lib/MC/MCObjectStreamer.cpp | 5 | ||||
-rw-r--r-- | lib/MC/MCStreamer.cpp | 13 |
4 files changed, 46 insertions, 19 deletions
diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index c47299c..8ca849b 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -221,6 +221,19 @@ MCAssembler::MCAssembler(MCContext &Context_, MCAsmBackend &Backend_, MCAssembler::~MCAssembler() { } +void MCAssembler::reset() { + Sections.clear(); + Symbols.clear(); + SectionMap.clear(); + SymbolMap.clear(); + IndirectSymbols.clear(); + DataRegions.clear(); + ThumbFuncs.clear(); + RelaxAll = false; + NoExecStack = false; + SubsectionsViaSymbols = false; +} + bool MCAssembler::isSymbolLinkerVisible(const MCSymbol &Symbol) const { // Non-temporary labels should always be visible to the linker. if (!Symbol.isTemporary()) diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp index 23ec0bb..19ff49c 100644 --- a/lib/MC/MCContext.cpp +++ b/lib/MC/MCContext.cpp @@ -32,13 +32,14 @@ typedef StringMap<const MCSectionCOFF*> COFFUniqueMapTy; MCContext::MCContext(const MCAsmInfo &mai, const MCRegisterInfo &mri, const MCObjectFileInfo *mofi, const SourceMgr *mgr, - bool DoAutoInitializationFinalization ) : + bool DoAutoReset ) : SrcMgr(mgr), MAI(mai), MRI(mri), MOFI(mofi), Allocator(), Symbols(Allocator), UsedNames(Allocator), - NextUniqueID(0), - CurrentDwarfLoc(0,0,0,DWARF2_FLAG_IS_STMT,0,0), - AllowTemporaryLabels(true), - AutoInitializationFinalization(DoAutoInitializationFinalization) { + NextUniqueID(0), + CurrentDwarfLoc(0,0,0,DWARF2_FLAG_IS_STMT,0,0), + DwarfLocSeen(false), GenDwarfForAssembly(false), GenDwarfFileNumber(0), + AllowTemporaryLabels(true), AutoReset(DoAutoReset) { + MachOUniquingMap = 0; ELFUniquingMap = 0; COFFUniquingMap = 0; @@ -46,15 +47,12 @@ MCContext::MCContext(const MCAsmInfo &mai, const MCRegisterInfo &mri, SecureLogFile = getenv("AS_SECURE_LOG_FILE"); SecureLog = 0; SecureLogUsed = false; - - if (AutoInitializationFinalization) - doInitialization(); } MCContext::~MCContext() { - if (AutoInitializationFinalization) - doFinalization(); + if (AutoReset) + reset(); // NOTE: The symbols are all allocated out of a bump pointer allocator, // we don't need to free them here. @@ -67,15 +65,7 @@ MCContext::~MCContext() { // Module Lifetime Management //===----------------------------------------------------------------------===// -void MCContext::doInitialization() { - NextUniqueID = 0; - AllowTemporaryLabels = true; - DwarfLocSeen = false; - GenDwarfForAssembly = false; - GenDwarfFileNumber = 0; -} - -void MCContext::doFinalization() { +void MCContext::reset() { UsedNames.clear(); Symbols.clear(); Allocator.Reset(); @@ -95,6 +85,12 @@ void MCContext::doFinalization() { MachOUniquingMap = 0; ELFUniquingMap = 0; COFFUniquingMap = 0; + + NextUniqueID = 0; + AllowTemporaryLabels = true; + DwarfLocSeen = false; + GenDwarfForAssembly = false; + GenDwarfFileNumber = 0; } //===----------------------------------------------------------------------===// diff --git a/lib/MC/MCObjectStreamer.cpp b/lib/MC/MCObjectStreamer.cpp index c2171ff..98c8bda 100644 --- a/lib/MC/MCObjectStreamer.cpp +++ b/lib/MC/MCObjectStreamer.cpp @@ -44,6 +44,11 @@ MCObjectStreamer::~MCObjectStreamer() { delete Assembler; } +void MCObjectStreamer::reset() { + Assembler->reset(); + MCStreamer::reset(); +} + MCFragment *MCObjectStreamer::getCurrentFragment() const { assert(getCurrentSectionData() && "No current section!"); diff --git a/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp index 96d6d69..047ab63 100644 --- a/lib/MC/MCStreamer.cpp +++ b/lib/MC/MCStreamer.cpp @@ -34,6 +34,19 @@ MCStreamer::~MCStreamer() { delete W64UnwindInfos[i]; } +void MCStreamer::reset() { + for (unsigned i = 0; i < getNumW64UnwindInfos(); ++i) + delete W64UnwindInfos[i]; + EmitEHFrame = true; + EmitDebugFrame = false; + CurrentW64UnwindInfo = 0; + LastSymbol = 0; + AutoInitSections = false; + const MCSection *section = NULL; + SectionStack.clear(); + SectionStack.push_back(std::make_pair(section, section)); +} + const MCExpr *MCStreamer::BuildSymbolDiff(MCContext &Context, const MCSymbol *A, const MCSymbol *B) { |