|  | //===-- lib/CodeGen/ELFCodeEmitter.h ----------------------------*- C++ -*-===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef ELFCODEEMITTER_H | 
|  | #define ELFCODEEMITTER_H | 
|  |  | 
|  | #include "llvm/CodeGen/ObjectCodeEmitter.h" | 
|  | #include <vector> | 
|  |  | 
|  | namespace llvm { | 
|  | class ELFWriter; | 
|  | class ELFSection; | 
|  |  | 
|  | /// ELFCodeEmitter - This class is used by the ELFWriter to | 
|  | /// emit the code for functions to the ELF file. | 
|  | class ELFCodeEmitter : public ObjectCodeEmitter { | 
|  | ELFWriter &EW; | 
|  |  | 
|  | /// Target machine description | 
|  | TargetMachine &TM; | 
|  |  | 
|  | /// Section containing code for functions | 
|  | ELFSection *ES; | 
|  |  | 
|  | /// Relocations - Record relocations needed by the current function | 
|  | std::vector<MachineRelocation> Relocations; | 
|  |  | 
|  | /// JTRelocations - Record relocations needed by the relocation | 
|  | /// section. | 
|  | std::vector<MachineRelocation> JTRelocations; | 
|  |  | 
|  | /// FnStartPtr - Function offset from the beginning of ELFSection 'ES' | 
|  | uintptr_t FnStartOff; | 
|  | public: | 
|  | explicit ELFCodeEmitter(ELFWriter &ew) : EW(ew), TM(EW.TM) {} | 
|  |  | 
|  | /// addRelocation - Register new relocations for this function | 
|  | void addRelocation(const MachineRelocation &MR) { | 
|  | Relocations.push_back(MR); | 
|  | } | 
|  |  | 
|  | /// emitConstantPool - For each constant pool entry, figure out which | 
|  | /// section the constant should live in and emit data to it | 
|  | void emitConstantPool(MachineConstantPool *MCP); | 
|  |  | 
|  | /// emitJumpTables - Emit all the jump tables for a given jump table | 
|  | /// info and record them to the appropriate section. | 
|  | void emitJumpTables(MachineJumpTableInfo *MJTI); | 
|  |  | 
|  | void startFunction(MachineFunction &F); | 
|  | bool finishFunction(MachineFunction &F); | 
|  |  | 
|  | /// emitLabel - Emits a label | 
|  | virtual void emitLabel(MCSymbol *Label) { | 
|  | assert(0 && "emitLabel not implemented"); | 
|  | } | 
|  |  | 
|  | /// getLabelAddress - Return the address of the specified LabelID, | 
|  | /// only usable after the LabelID has been emitted. | 
|  | virtual uintptr_t getLabelAddress(MCSymbol *Label) const { | 
|  | assert(0 && "getLabelAddress not implemented"); | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | virtual void setModuleInfo(llvm::MachineModuleInfo* MMI) {} | 
|  |  | 
|  | };  // end class ELFCodeEmitter | 
|  |  | 
|  | } // end namespace llvm | 
|  |  | 
|  | #endif | 
|  |  |