diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-08-03 18:51:17 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-08-03 18:51:17 +0000 |
commit | b3be7371d59b9b4262dd0a440580ce67a889d81a (patch) | |
tree | 4beb77a164c9623c164db5889a5a8df8c5f7b20d /llvm/lib/MC/MCStreamer.cpp | |
parent | 3ab94b910bec14e4055a44eb4c652000589ea028 (diff) | |
download | bcm5719-llvm-b3be7371d59b9b4262dd0a440580ce67a889d81a.tar.gz bcm5719-llvm-b3be7371d59b9b4262dd0a440580ce67a889d81a.zip |
MC: rename Win64EHFrameInfo to WinEH::FrameInfo
The frame information stored in this structure is driven by the requirements for
Windows NT unwinding rather than Windows 64 specifically. As a result, this
type can be shared across multiple architectures (ARM, AXP, MIPS, PPC, SH).
Rename this class in preparation for adding support for supporting unwinding
information for Windows on ARM.
Take the opportunity to constify the members as everything except the
ChainedParent is read-only. This required some adjustment to the label
handling.
llvm-svn: 214663
Diffstat (limited to 'llvm/lib/MC/MCStreamer.cpp')
-rw-r--r-- | llvm/lib/MC/MCStreamer.cpp | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp index 46e80cc0c0d..f4a47b9b3bc 100644 --- a/llvm/lib/MC/MCStreamer.cpp +++ b/llvm/lib/MC/MCStreamer.cpp @@ -429,11 +429,11 @@ void MCStreamer::EnsureValidWinFrameInfo() { void MCStreamer::EmitWinCFIStartProc(const MCSymbol *Symbol) { if (CurrentWinFrameInfo && !CurrentWinFrameInfo->End) report_fatal_error("Starting a function before ending the previous one!"); - MCWinFrameInfo *Frame = new MCWinFrameInfo; - Frame->Begin = getContext().CreateTempSymbol(); - Frame->Function = Symbol; - EmitLabel(Frame->Begin); - WinFrameInfos.push_back(Frame); + + MCSymbol *StartProc = getContext().CreateTempSymbol(); + EmitLabel(StartProc); + + WinFrameInfos.push_back(new WinEH::FrameInfo(Symbol, StartProc)); CurrentWinFrameInfo = WinFrameInfos.back(); } @@ -441,18 +441,20 @@ void MCStreamer::EmitWinCFIEndProc() { EnsureValidWinFrameInfo(); if (CurrentWinFrameInfo->ChainedParent) report_fatal_error("Not all chained regions terminated!"); - CurrentWinFrameInfo->End = getContext().CreateTempSymbol(); - EmitLabel(CurrentWinFrameInfo->End); + + MCSymbol *Label = getContext().CreateTempSymbol(); + EmitLabel(Label); + CurrentWinFrameInfo->End = Label; } void MCStreamer::EmitWinCFIStartChained() { EnsureValidWinFrameInfo(); - MCWinFrameInfo *Frame = new MCWinFrameInfo; - Frame->Begin = getContext().CreateTempSymbol(); - Frame->Function = CurrentWinFrameInfo->Function; - Frame->ChainedParent = CurrentWinFrameInfo; - EmitLabel(Frame->Begin); - WinFrameInfos.push_back(Frame); + + MCSymbol *StartProc = getContext().CreateTempSymbol(); + EmitLabel(StartProc); + + WinFrameInfos.push_back(new WinEH::FrameInfo(CurrentWinFrameInfo->Function, + StartProc, CurrentWinFrameInfo)); CurrentWinFrameInfo = WinFrameInfos.back(); } @@ -460,9 +462,13 @@ void MCStreamer::EmitWinCFIEndChained() { EnsureValidWinFrameInfo(); if (!CurrentWinFrameInfo->ChainedParent) report_fatal_error("End of a chained region outside a chained region!"); - CurrentWinFrameInfo->End = getContext().CreateTempSymbol(); - EmitLabel(CurrentWinFrameInfo->End); - CurrentWinFrameInfo = CurrentWinFrameInfo->ChainedParent; + + MCSymbol *Label = getContext().CreateTempSymbol(); + EmitLabel(Label); + + CurrentWinFrameInfo->End = Label; + CurrentWinFrameInfo = + const_cast<WinEH::FrameInfo *>(CurrentWinFrameInfo->ChainedParent); } void MCStreamer::EmitWinEHHandler(const MCSymbol *Sym, bool Unwind, @@ -567,8 +573,11 @@ void MCStreamer::EmitWinCFIPushFrame(bool Code) { void MCStreamer::EmitWinCFIEndProlog() { EnsureValidWinFrameInfo(); - CurrentWinFrameInfo->PrologEnd = getContext().CreateTempSymbol(); - EmitLabel(CurrentWinFrameInfo->PrologEnd); + + MCSymbol *Label = getContext().CreateTempSymbol(); + EmitLabel(Label); + + CurrentWinFrameInfo->PrologEnd = Label; } void MCStreamer::EmitCOFFSectionIndex(MCSymbol const *Symbol) { |