From 4544c16eab32bb9da701c52d5fdb1b1cce9f9204 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. llvm-svn: 214664 --- llvm/include/llvm/MC/MCStreamer.h | 2 +- llvm/lib/MC/MCStreamer.cpp | 4 ---- llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp | 7 +++++++ 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/llvm/include/llvm/MC/MCStreamer.h b/llvm/include/llvm/MC/MCStreamer.h index 698bb83555bf..d3225b1c471c 100644 --- a/llvm/include/llvm/MC/MCStreamer.h +++ b/llvm/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/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp index f4a47b9b3bc6..9ee5dec8b311 100644 --- a/llvm/lib/MC/MCStreamer.cpp +++ b/llvm/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/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp index 6727f5edd26b..a57988a4913c 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86WinCOFFStreamer.cpp +++ b/llvm/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(); -- GitLab