diff options
author | Owen Anderson <resistor@mac.com> | 2011-09-22 22:32:22 +0000 |
---|---|---|
committer | Owen Anderson <resistor@mac.com> | 2011-09-22 22:32:22 +0000 |
commit | 6cca67fc4aee87736a90ee3549d61e23fb3e3f9e (patch) | |
tree | a60e3b43558059ad5037b3cf13ef5214d7356d5a /llvm/lib/MC/MCModule.cpp | |
parent | 81345183314316f56d62f927f0394d6b431a64f2 (diff) | |
download | bcm5719-llvm-6cca67fc4aee87736a90ee3549d61e23fb3e3f9e.tar.gz bcm5719-llvm-6cca67fc4aee87736a90ee3549d61e23fb3e3f9e.zip |
Start stubbing out MCModule and MCAtom, which provide an API for accessing the rich disassembly of a complete object or executable.
These are very much a work in progress, and not really useful yet.
llvm-svn: 140345
Diffstat (limited to 'llvm/lib/MC/MCModule.cpp')
-rw-r--r-- | llvm/lib/MC/MCModule.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCModule.cpp b/llvm/lib/MC/MCModule.cpp new file mode 100644 index 00000000000..b1d09d945a3 --- /dev/null +++ b/llvm/lib/MC/MCModule.cpp @@ -0,0 +1,45 @@ +//===- lib/MC/MCModule.cpp - MCModule implementation --------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/MC/MCAtom.h" +#include "llvm/MC/MCModule.h" + +using namespace llvm; + +MCAtom *MCModule::createAtom(MCAtom::AtomType Type, + uint64_t Begin, uint64_t End) { + assert(Begin < End && "Creating MCAtom with endpoints reversed?"); + + // Check for atoms already covering this range. + IntervalMap<uint64_t, MCAtom*>::iterator I = OffsetMap.find(Begin); + assert((!I.valid() || I.start() < End) && "Offset range already occupied!"); + + // Create the new atom and add it to our maps. + MCAtom *NewAtom = new MCAtom(Type, this, Begin, End); + AtomAllocationTracker.insert(NewAtom); + OffsetMap.insert(Begin, End, NewAtom); + return NewAtom; +} + +// remap - Update the interval mapping for an atom. +void MCModule::remap(MCAtom *Atom, uint64_t NewBegin, uint64_t NewEnd) { + // Find and erase the old mapping. + IntervalMap<uint64_t, MCAtom*>::iterator I = OffsetMap.find(Atom->Begin); + assert(I.valid() && "Atom offset not found in module!"); + assert(*I == Atom && "Previous atom mapping was invalid!"); + I.erase(); + + // Insert the new mapping. + OffsetMap.insert(NewBegin, NewEnd, Atom); + + // Update the atom internal bounds. + Atom->Begin = NewBegin; + Atom->End = NewEnd; +} + |