X86WinCOFFStreamer.cpp revision cd81d94322a39503e4a3e87b6ee03d4fcb3465fb
1//===-- X86WinCOFFStreamer.cpp - X86 Target WinCOFF Streamer ----*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "X86MCTargetDesc.h" 11#include "llvm/MC/MCWinCOFFStreamer.h" 12 13using namespace llvm; 14 15namespace { 16class X86WinCOFFStreamer : public MCWinCOFFStreamer { 17public: 18 X86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB, MCCodeEmitter *CE, 19 raw_ostream &OS) 20 : MCWinCOFFStreamer(C, AB, *CE, OS) { } 21 22 void EmitWinEHHandlerData() override; 23 void FinishImpl() override; 24}; 25 26void X86WinCOFFStreamer::EmitWinEHHandlerData() { 27 MCStreamer::EmitWinEHHandlerData(); 28 29 // We have to emit the unwind info now, because this directive 30 // actually switches to the .xdata section! 31 MCWin64EHUnwindEmitter::EmitUnwindInfo(*this, getCurrentW64UnwindInfo()); 32} 33 34void X86WinCOFFStreamer::FinishImpl() { 35 EmitFrames(nullptr); 36 EmitW64Tables(); 37 38 MCWinCOFFStreamer::FinishImpl(); 39} 40} 41 42namespace llvm { 43MCStreamer *createX86WinCOFFStreamer(MCContext &C, MCAsmBackend &AB, 44 MCCodeEmitter *CE, raw_ostream &OS, 45 bool RelaxAll) { 46 X86WinCOFFStreamer *S = new X86WinCOFFStreamer(C, AB, CE, OS); 47 S->getAssembler().setRelaxAll(RelaxAll); 48 return S; 49} 50} 51 52