• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
ELFCodeEmitter(ELFWriter & ew)41     explicit ELFCodeEmitter(ELFWriter &ew) : EW(ew), TM(EW.TM) {}
42 
43     /// addRelocation - Register new relocations for this function
addRelocation(const MachineRelocation & MR)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
emitLabel(MCSymbol * 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.
getLabelAddress(MCSymbol * Label)66     virtual uintptr_t getLabelAddress(MCSymbol *Label) const {
67       assert(0 && "getLabelAddress not implemented");
68       return 0;
69     }
70 
setModuleInfo(llvm::MachineModuleInfo * MMI)71     virtual void setModuleInfo(llvm::MachineModuleInfo* MMI) {}
72 
73 };  // end class ELFCodeEmitter
74 
75 } // end namespace llvm
76 
77 #endif
78 
79