llvm.org GIT mirror llvm / release_26 lib / CodeGen / ELFCodeEmitter.h
release_26

Tree @release_26 (Download .tar.gz)

ELFCodeEmitter.h @release_26

4cb3143
 
 
 
 
 
 
 
 
 
 
 
6933d3e
4cb3143
 
 
45f5d64
 
4cb3143
 
 
6933d3e
4cb3143
a029a27
 
4cb3143
a029a27
 
 
 
6933d3e
a029a27
 
82a70cc
 
 
 
6933d3e
 
4cb3143
82a70cc
4cb3143
6933d3e
4cb3143
a029a27
4cb3143
 
6933d3e
 
 
a029a27
6933d3e
 
 
a5e0abd
6933d3e
 
4cb3143
6933d3e
 
 
4cb3143
 
6933d3e
 
4cb3143
6933d3e
4cb3143
 
 
0b1308f
4cb3143
 
 
 
 
 
 
//===-- lib/CodeGen/ELFCodeEmitter.h ----------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef ELFCODEEMITTER_H
#define ELFCODEEMITTER_H

#include "llvm/CodeGen/ObjectCodeEmitter.h"
#include <vector>

namespace llvm {
  class ELFWriter;
  class ELFSection;

  /// ELFCodeEmitter - This class is used by the ELFWriter to 
  /// emit the code for functions to the ELF file.
  class ELFCodeEmitter : public ObjectCodeEmitter {
    ELFWriter &EW;

    /// Target machine description
    TargetMachine &TM;

    /// Section containing code for functions
    ELFSection *ES;

    /// Relocations - Record relocations needed by the current function 
    std::vector<MachineRelocation> Relocations;

    /// JTRelocations - Record relocations needed by the relocation
    /// section.
    std::vector<MachineRelocation> JTRelocations;

    /// FnStartPtr - Function offset from the beginning of ELFSection 'ES'
    uintptr_t FnStartOff;
  public:
    explicit ELFCodeEmitter(ELFWriter &ew) : EW(ew), TM(EW.TM) {}

    /// addRelocation - Register new relocations for this function
    void addRelocation(const MachineRelocation &MR) {
      Relocations.push_back(MR);
    }

    /// emitConstantPool - For each constant pool entry, figure out which
    /// section the constant should live in and emit data to it
    void emitConstantPool(MachineConstantPool *MCP);

    /// emitJumpTables - Emit all the jump tables for a given jump table
    /// info and record them to the appropriate section.
    void emitJumpTables(MachineJumpTableInfo *MJTI);

    void startFunction(MachineFunction &F);
    bool finishFunction(MachineFunction &F);

    /// emitLabel - Emits a label
    virtual void emitLabel(uint64_t LabelID) {
      assert("emitLabel not implemented");
    }

    /// getLabelAddress - Return the address of the specified LabelID, 
    /// only usable after the LabelID has been emitted.
    virtual uintptr_t getLabelAddress(uint64_t Label) const {
      assert("getLabelAddress not implemented");
      return 0;
    }

    virtual void setModuleInfo(llvm::MachineModuleInfo* MMI) {}

};  // end class ELFCodeEmitter

} // end namespace llvm

#endif