| //===-- 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 | |