0.47.15
by Scott Kitterman
Import upstream version 0.98.6+dfsg |
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("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("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 |