From 83eaeba2a89c07fd445760d2bd7221b150550f52 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Sun, 3 Aug 2014 18:51:26 +0000 Subject: [PATCH] MC: virtualise EmitWindowsUnwindTables This makes EmitWindowsUnwindTables a virtual function and lowers the implementation of the function to the X86WinCOFFStreamer. This method is a target specific operation. This enables making the behaviour target dependent by isolating it entirely to the target specific streamer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214664 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCStreamer.h | 2 +- lib/MC/MCStreamer.cpp | 4 ---- lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp | 7 +++++++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/include/llvm/MC/MCStreamer.h b/include/llvm/MC/MCStreamer.h index 698bb83555b..d3225b1c471 100644 --- a/include/llvm/MC/MCStreamer.h +++ b/include/llvm/MC/MCStreamer.h @@ -208,7 +208,7 @@ protected: return CurrentWinFrameInfo; } - void EmitWindowsUnwindTables(); + virtual void EmitWindowsUnwindTables(); virtual void EmitRawTextImpl(StringRef String); diff --git a/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp index f4a47b9b3bc..9ee5dec8b31 100644 --- a/lib/MC/MCStreamer.cpp +++ b/lib/MC/MCStreamer.cpp @@ -601,10 +601,6 @@ void MCStreamer::EmitRawText(const Twine &T) { } void MCStreamer::EmitWindowsUnwindTables() { - if (!getNumWinFrameInfos()) - return; - - MCWin64EHUnwindEmitter::Emit(*this); } void MCStreamer::Finish() { diff --git a/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp b/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp index 6727f5edd26..a57988a4913 100644 --- a/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp +++ b/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp @@ -20,6 +20,7 @@ public: : MCWinCOFFStreamer(C, AB, *CE, OS) { } void EmitWinEHHandlerData() override; + void EmitWindowsUnwindTables() override; void FinishImpl() override; }; @@ -31,6 +32,12 @@ void X86WinCOFFStreamer::EmitWinEHHandlerData() { MCWin64EHUnwindEmitter::EmitUnwindInfo(*this, getCurrentWinFrameInfo()); } +void X86WinCOFFStreamer::EmitWindowsUnwindTables() { + if (!getNumWinFrameInfos()) + return; + MCWin64EHUnwindEmitter::Emit(*this); +} + void X86WinCOFFStreamer::FinishImpl() { EmitFrames(nullptr); EmitWindowsUnwindTables(); -- 2.11.0