MC: virtualise EmitWindowsUnwindTables
authorSaleem Abdulrasool <compnerd@compnerd.org>
Sun, 3 Aug 2014 18:51:26 +0000 (18:51 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Sun, 3 Aug 2014 18:51:26 +0000 (18:51 +0000)
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
lib/MC/MCStreamer.cpp
lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp

index 698bb83555bf09463d9b8db73f379e3c24043ed3..d3225b1c471c87f633c6557d233c7b4bc96b816b 100644 (file)
@@ -208,7 +208,7 @@ protected:
     return CurrentWinFrameInfo;
   }
 
-  void EmitWindowsUnwindTables();
+  virtual void EmitWindowsUnwindTables();
 
   virtual void EmitRawTextImpl(StringRef String);
 
index f4a47b9b3bc665b2f37f14a71c586663c1aeb895..9ee5dec8b311b7ed543d4b4c6bfd3158c35c5385 100644 (file)
@@ -601,10 +601,6 @@ void MCStreamer::EmitRawText(const Twine &T) {
 }
 
 void MCStreamer::EmitWindowsUnwindTables() {
-  if (!getNumWinFrameInfos())
-    return;
-
-  MCWin64EHUnwindEmitter::Emit(*this);
 }
 
 void MCStreamer::Finish() {
index 6727f5edd26b615abb789be5f12c294c7b2b0ab4..a57988a4913cd773cc9e8fa764eff7ecad612e7b 100644 (file)
@@ -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();