| //===-- llvm/MC/MCAtom.h - MCAtom class ---------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file contains the declaration of the MCAtom class, which is used to |
| // represent a contiguous region in a decoded object that is uniformly data or |
| // instructions; |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_MC_MCATOM_H |
| #define LLVM_MC_MCATOM_H |
| |
| #include "llvm/MC/MCInst.h" |
| #include "llvm/Support/DataTypes.h" |
| #include <vector> |
| |
| namespace llvm { |
| |
| class MCModule; |
| |
| /// MCData - An entry in a data MCAtom. |
| // NOTE: This may change to a more complex type in the future. |
| typedef uint8_t MCData; |
| |
| /// MCAtom - Represents a contiguous range of either instructions (a TextAtom) |
| /// or data (a DataAtom). Address ranges are expressed as _closed_ intervals. |
| class MCAtom { |
| friend class MCModule; |
| typedef enum { TextAtom, DataAtom } AtomType; |
| |
| AtomType Type; |
| MCModule *Parent; |
| uint64_t Begin, End; |
| |
| std::vector<std::pair<uint64_t, MCInst> > Text; |
| std::vector<MCData> Data; |
| |
| // Private constructor - only callable by MCModule |
| MCAtom(AtomType T, MCModule *P, uint64_t B, uint64_t E) |
| : Type(T), Parent(P), Begin(B), End(E) { } |
| |
| public: |
| bool isTextAtom() { return Type == TextAtom; } |
| bool isDataAtom() { return Type == DataAtom; } |
| |
| void addInst(const MCInst &I, uint64_t Address, unsigned Size); |
| void addData(const MCData &D); |
| |
| /// split - Splits the atom in two at a given address, which must align with |
| /// and instruction boundary if this is a TextAtom. Returns the newly created |
| /// atom representing the high part of the split. |
| MCAtom *split(uint64_t SplitPt); |
| |
| /// truncate - Truncates an atom so that TruncPt is the last byte address |
| /// contained in the atom. |
| void truncate(uint64_t TruncPt); |
| }; |
| |
| } |
| |
| #endif |
| |