forked from OSchip/llvm-project
Defer call to InitSections until after MCContext has been initialized. If
InitSections is called before the MCContext is initialized it could cause duplicate temporary symbols to be emitted later (after context initialization resets the temporary label counter). llvm-svn: 169785
This commit is contained in:
parent
3923e286cd
commit
517fc8b264
|
@ -70,6 +70,8 @@ namespace llvm {
|
|||
SmallVector<std::pair<const MCSection *,
|
||||
const MCSection *>, 4> SectionStack;
|
||||
|
||||
bool AutoInitSections;
|
||||
|
||||
protected:
|
||||
MCStreamer(MCContext &Ctx);
|
||||
|
||||
|
@ -214,6 +216,17 @@ namespace llvm {
|
|||
SectionStack.back().first = Section;
|
||||
}
|
||||
|
||||
/// Initialize the streamer.
|
||||
void InitStreamer() {
|
||||
if (AutoInitSections)
|
||||
InitSections();
|
||||
}
|
||||
|
||||
/// Tell this MCStreamer to call InitSections upon initialization.
|
||||
void setAutoInitSections(bool AutoInitSections) {
|
||||
this->AutoInitSections = AutoInitSections;
|
||||
}
|
||||
|
||||
/// InitSections - Create the default sections and set the initial one.
|
||||
virtual void InitSections() = 0;
|
||||
|
||||
|
|
|
@ -149,6 +149,8 @@ void AsmPrinter::getAnalysisUsage(AnalysisUsage &AU) const {
|
|||
}
|
||||
|
||||
bool AsmPrinter::doInitialization(Module &M) {
|
||||
OutStreamer.InitStreamer();
|
||||
|
||||
MMI = getAnalysisIfAvailable<MachineModuleInfo>();
|
||||
MMI->AnalyzeModule(M);
|
||||
|
||||
|
|
|
@ -202,7 +202,7 @@ bool LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
|
|||
*Context, *MAB, Out,
|
||||
MCE, hasMCRelaxAll(),
|
||||
hasMCNoExecStack()));
|
||||
AsmStreamer.get()->InitSections();
|
||||
AsmStreamer.get()->setAutoInitSections(true);
|
||||
break;
|
||||
}
|
||||
case CGFT_Null:
|
||||
|
|
|
@ -23,7 +23,8 @@ using namespace llvm;
|
|||
|
||||
MCStreamer::MCStreamer(MCContext &Ctx)
|
||||
: Context(Ctx), EmitEHFrame(true), EmitDebugFrame(false),
|
||||
CurrentW64UnwindInfo(0), LastSymbol(0) {
|
||||
CurrentW64UnwindInfo(0), LastSymbol(0),
|
||||
AutoInitSections(false) {
|
||||
const MCSection *section = NULL;
|
||||
SectionStack.push_back(std::make_pair(section, section));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue