1
//===-- lib/CodeGen/ELFCodeEmitter.h ----------------------------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
#ifndef ELFCODEEMITTER_H
11
#define ELFCODEEMITTER_H
13
#include "llvm/CodeGen/ObjectCodeEmitter.h"
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 {
25
/// Target machine description
28
/// Section containing code for functions
31
/// Relocations - Record relocations needed by the current function
32
std::vector<MachineRelocation> Relocations;
34
/// JTRelocations - Record relocations needed by the relocation
36
std::vector<MachineRelocation> JTRelocations;
38
/// FnStartPtr - Function offset from the beginning of ELFSection 'ES'
41
explicit ELFCodeEmitter(ELFWriter &ew) : EW(ew), TM(EW.TM) {}
43
/// addRelocation - Register new relocations for this function
44
void addRelocation(const MachineRelocation &MR) {
45
Relocations.push_back(MR);
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);
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);
56
void startFunction(MachineFunction &F);
57
bool finishFunction(MachineFunction &F);
59
/// emitLabel - Emits a label
60
virtual void emitLabel(uint64_t LabelID) {
61
assert("emitLabel not implemented");
64
/// getLabelAddress - Return the address of the specified LabelID,
65
/// only usable after the LabelID has been emitted.
66
virtual uintptr_t getLabelAddress(uint64_t Label) const {
67
assert("getLabelAddress not implemented");
71
virtual void setModuleInfo(llvm::MachineModuleInfo* MMI) {}
73
}; // end class ELFCodeEmitter
75
} // end namespace llvm