~ubuntu-branches/ubuntu/wily/clamav/wily-proposed

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