| //=== MachOWriter.h - Target-independent Mach-O writer support --*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines the MachOWriter class. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef MACHOWRITER_H |
| #define MACHOWRITER_H |
| |
| #include "llvm/CodeGen/MachineFunctionPass.h" |
| #include "llvm/Target/TargetMachine.h" |
| |
| namespace llvm { |
| class GlobalVariable; |
| class Mangler; |
| class MCCodeEmitter; |
| class MCContext; |
| class MCStreamer; |
| |
| /// MachOWriter - This class implements the common target-independent code for |
| /// writing Mach-O files. Targets should derive a class from this to |
| /// parameterize the output format. |
| /// |
| class MachOWriter : public MachineFunctionPass { |
| static char ID; |
| |
| protected: |
| /// Output stream to send the resultant object file to. |
| /// |
| formatted_raw_ostream &O; |
| |
| /// Target machine description. |
| /// |
| TargetMachine &TM; |
| |
| /// Target Asm Printer information. |
| /// |
| const MCAsmInfo *MAI; |
| |
| /// MCCE - The MCCodeEmitter object that we are exposing to emit machine |
| /// code for functions to the .o file. |
| MCCodeEmitter *MCCE; |
| |
| /// OutContext - This is the context for the output file that we are |
| /// streaming. This owns all of the global MC-related objects for the |
| /// generated translation unit. |
| MCContext &OutContext; |
| |
| /// OutStreamer - This is the MCStreamer object for the file we are |
| /// generating. This contains the transient state for the current |
| /// translation unit that we are generating (such as the current section |
| /// etc). |
| MCStreamer &OutStreamer; |
| |
| /// Name-mangler for global names. |
| /// |
| Mangler *Mang; |
| |
| /// doInitialization - Emit the file header and all of the global variables |
| /// for the module to the Mach-O file. |
| bool doInitialization(Module &M); |
| |
| /// doFinalization - Now that the module has been completely processed, emit |
| /// the Mach-O file to 'O'. |
| bool doFinalization(Module &M); |
| |
| bool runOnMachineFunction(MachineFunction &MF); |
| |
| public: |
| explicit MachOWriter(formatted_raw_ostream &O, TargetMachine &TM, |
| const MCAsmInfo *T, MCCodeEmitter *MCE); |
| |
| virtual ~MachOWriter(); |
| |
| virtual const char *getPassName() const { |
| return "Mach-O Writer"; |
| } |
| }; |
| } |
| |
| #endif |