Home | History | Annotate | Download | only in CodeGen
      1 //===-- lib/CodeGen/ELFCodeEmitter.h ----------------------------*- 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 #ifndef ELFCODEEMITTER_H
     11 #define ELFCODEEMITTER_H
     12 
     13 #include "llvm/CodeGen/ObjectCodeEmitter.h"
     14 #include <vector>
     15 
     16 namespace llvm {
     17   class ELFWriter;
     18   class ELFSection;
     19 
     20   /// ELFCodeEmitter - This class is used by the ELFWriter to
     21   /// emit the code for functions to the ELF file.
     22   class ELFCodeEmitter : public ObjectCodeEmitter {
     23     ELFWriter &EW;
     24 
     25     /// Target machine description
     26     TargetMachine &TM;
     27 
     28     /// Section containing code for functions
     29     ELFSection *ES;
     30 
     31     /// Relocations - Record relocations needed by the current function
     32     std::vector<MachineRelocation> Relocations;
     33 
     34     /// JTRelocations - Record relocations needed by the relocation
     35     /// section.
     36     std::vector<MachineRelocation> JTRelocations;
     37 
     38     /// FnStartPtr - Function offset from the beginning of ELFSection 'ES'
     39     uintptr_t FnStartOff;
     40   public:
     41     explicit ELFCodeEmitter(ELFWriter &ew) : EW(ew), TM(EW.TM) {}
     42 
     43     /// addRelocation - Register new relocations for this function
     44     void addRelocation(const MachineRelocation &MR) {
     45       Relocations.push_back(MR);
     46     }
     47 
     48     /// emitConstantPool - For each constant pool entry, figure out which
     49     /// section the constant should live in and emit data to it
     50     void emitConstantPool(MachineConstantPool *MCP);
     51 
     52     /// emitJumpTables - Emit all the jump tables for a given jump table
     53     /// info and record them to the appropriate section.
     54     void emitJumpTables(MachineJumpTableInfo *MJTI);
     55 
     56     void startFunction(MachineFunction &F);
     57     bool finishFunction(MachineFunction &F);
     58 
     59     /// emitLabel - Emits a label
     60     virtual void emitLabel(MCSymbol *Label) {
     61       assert(0 && "emitLabel not implemented");
     62     }
     63 
     64     /// getLabelAddress - Return the address of the specified LabelID,
     65     /// only usable after the LabelID has been emitted.
     66     virtual uintptr_t getLabelAddress(MCSymbol *Label) const {
     67       assert(0 && "getLabelAddress not implemented");
     68       return 0;
     69     }
     70 
     71     virtual void setModuleInfo(llvm::MachineModuleInfo* MMI) {}
     72 
     73 };  // end class ELFCodeEmitter
     74 
     75 } // end namespace llvm
     76 
     77 #endif
     78 
     79