1124e1821033a4b3220f552229652d9460ed90673Owen Anderson//===-- llvm/MC/MCModule.h - MCModule class ---------------------*- C++ -*-===// 2124e1821033a4b3220f552229652d9460ed90673Owen Anderson// 3124e1821033a4b3220f552229652d9460ed90673Owen Anderson// The LLVM Compiler Infrastructure 4124e1821033a4b3220f552229652d9460ed90673Owen Anderson// 5124e1821033a4b3220f552229652d9460ed90673Owen Anderson// This file is distributed under the University of Illinois Open Source 6124e1821033a4b3220f552229652d9460ed90673Owen Anderson// License. See LICENSE.TXT for details. 7124e1821033a4b3220f552229652d9460ed90673Owen Anderson// 8124e1821033a4b3220f552229652d9460ed90673Owen Anderson//===----------------------------------------------------------------------===// 9124e1821033a4b3220f552229652d9460ed90673Owen Anderson// 10124e1821033a4b3220f552229652d9460ed90673Owen Anderson// This file contains the declaration of the MCModule class, which is used to 11124e1821033a4b3220f552229652d9460ed90673Owen Anderson// represent a complete, disassembled object file or executable. 12124e1821033a4b3220f552229652d9460ed90673Owen Anderson// 13124e1821033a4b3220f552229652d9460ed90673Owen Anderson//===----------------------------------------------------------------------===// 14124e1821033a4b3220f552229652d9460ed90673Owen Anderson 15124e1821033a4b3220f552229652d9460ed90673Owen Anderson#ifndef LLVM_MC_MCMODULE_H 16124e1821033a4b3220f552229652d9460ed90673Owen Anderson#define LLVM_MC_MCMODULE_H 17124e1821033a4b3220f552229652d9460ed90673Owen Anderson 18124e1821033a4b3220f552229652d9460ed90673Owen Anderson#include "llvm/ADT/DenseMap.h" 19124e1821033a4b3220f552229652d9460ed90673Owen Anderson#include "llvm/ADT/IntervalMap.h" 20124e1821033a4b3220f552229652d9460ed90673Owen Anderson#include "llvm/ADT/SmallPtrSet.h" 21124e1821033a4b3220f552229652d9460ed90673Owen Anderson#include "llvm/Support/DataTypes.h" 22124e1821033a4b3220f552229652d9460ed90673Owen Anderson 23124e1821033a4b3220f552229652d9460ed90673Owen Andersonnamespace llvm { 24124e1821033a4b3220f552229652d9460ed90673Owen Anderson 25124e1821033a4b3220f552229652d9460ed90673Owen Andersonclass MCAtom; 26124e1821033a4b3220f552229652d9460ed90673Owen Anderson 27124e1821033a4b3220f552229652d9460ed90673Owen Anderson/// MCModule - This class represent a completely disassembled object file or 28124e1821033a4b3220f552229652d9460ed90673Owen Anderson/// executable. It comprises a list of MCAtom's, and a branch target table. 29124e1821033a4b3220f552229652d9460ed90673Owen Anderson/// Each atom represents a contiguous range of either instructions or data. 30124e1821033a4b3220f552229652d9460ed90673Owen Andersonclass MCModule { 31124e1821033a4b3220f552229652d9460ed90673Owen Anderson /// AtomAllocationTracker - An MCModule owns its component MCAtom's, so it 32124e1821033a4b3220f552229652d9460ed90673Owen Anderson /// must track them in order to ensure they are properly freed as atoms are 33124e1821033a4b3220f552229652d9460ed90673Owen Anderson /// merged or otherwise manipulated. 34124e1821033a4b3220f552229652d9460ed90673Owen Anderson SmallPtrSet<MCAtom*, 8> AtomAllocationTracker; 35124e1821033a4b3220f552229652d9460ed90673Owen Anderson 36124e1821033a4b3220f552229652d9460ed90673Owen Anderson /// OffsetMap - Efficiently maps offset ranges to MCAtom's. 37124e1821033a4b3220f552229652d9460ed90673Owen Anderson IntervalMap<uint64_t, MCAtom*> OffsetMap; 38124e1821033a4b3220f552229652d9460ed90673Owen Anderson 39124e1821033a4b3220f552229652d9460ed90673Owen Anderson /// BranchTargetMap - Maps offsets that are determined to be branches and 40124e1821033a4b3220f552229652d9460ed90673Owen Anderson /// can be statically resolved to their target offsets. 41124e1821033a4b3220f552229652d9460ed90673Owen Anderson DenseMap<uint64_t, MCAtom*> BranchTargetMap; 42124e1821033a4b3220f552229652d9460ed90673Owen Anderson 43124e1821033a4b3220f552229652d9460ed90673Owen Anderson friend class MCAtom; 44124e1821033a4b3220f552229652d9460ed90673Owen Anderson 45124e1821033a4b3220f552229652d9460ed90673Owen Anderson /// remap - Update the interval mapping for an MCAtom. 46124e1821033a4b3220f552229652d9460ed90673Owen Anderson void remap(MCAtom *Atom, uint64_t NewBegin, uint64_t NewEnd); 47124e1821033a4b3220f552229652d9460ed90673Owen Anderson 48124e1821033a4b3220f552229652d9460ed90673Owen Andersonpublic: 49124e1821033a4b3220f552229652d9460ed90673Owen Anderson MCModule(IntervalMap<uint64_t, MCAtom*>::Allocator &A) : OffsetMap(A) { } 50124e1821033a4b3220f552229652d9460ed90673Owen Anderson 51124e1821033a4b3220f552229652d9460ed90673Owen Anderson /// createAtom - Creates a new MCAtom covering the specified offset range. 52124e1821033a4b3220f552229652d9460ed90673Owen Anderson MCAtom *createAtom(MCAtom::AtomType Type, uint64_t Begin, uint64_t End); 53124e1821033a4b3220f552229652d9460ed90673Owen Anderson}; 54124e1821033a4b3220f552229652d9460ed90673Owen Anderson 55124e1821033a4b3220f552229652d9460ed90673Owen Anderson} 56124e1821033a4b3220f552229652d9460ed90673Owen Anderson 57124e1821033a4b3220f552229652d9460ed90673Owen Anderson#endif 58124e1821033a4b3220f552229652d9460ed90673Owen Anderson 59