aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-10-10 18:09:38 +0000
committerOwen Anderson <resistor@mac.com>2011-10-10 18:09:38 +0000
commit042aadd8ee1e532e7ef7b6c3d42bcc94e7a6f156 (patch)
tree964a4bae1905eead1a8e4643a4ba66c2e8243b69
parent475fa2608ca3c9f754ec7979172f8ab0a3b138f0 (diff)
downloadexternal_llvm-042aadd8ee1e532e7ef7b6c3d42bcc94e7a6f156.zip
external_llvm-042aadd8ee1e532e7ef7b6c3d42bcc94e7a6f156.tar.gz
external_llvm-042aadd8ee1e532e7ef7b6c3d42bcc94e7a6f156.tar.bz2
MCAtom extending methods need to extend the range of the atom as well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141557 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/MC/MCAtom.h11
-rw-r--r--lib/MC/MCAtom.cpp18
2 files changed, 20 insertions, 9 deletions
diff --git a/include/llvm/MC/MCAtom.h b/include/llvm/MC/MCAtom.h
index 6805c39..682cf7c 100644
--- a/include/llvm/MC/MCAtom.h
+++ b/include/llvm/MC/MCAtom.h
@@ -49,15 +49,8 @@ public:
bool isTextAtom() { return Type == TextAtom; }
bool isDataAtom() { return Type == DataAtom; }
- void addInst(const MCInst &I, uint64_t Address) {
- assert(Type == TextAtom && "Trying to add MCInst to a non-text atom!");
- Text.push_back(std::make_pair(Address, I));
- }
-
- void addData(const MCData &D) {
- assert(Type == DataAtom && "Trying to add MCData to a non-data atom!");
- Data.push_back(D);
- }
+ 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
diff --git a/lib/MC/MCAtom.cpp b/lib/MC/MCAtom.cpp
index cd7dbf3..d714443 100644
--- a/lib/MC/MCAtom.cpp
+++ b/lib/MC/MCAtom.cpp
@@ -13,6 +13,24 @@
using namespace llvm;
+void MCAtom::addInst(const MCInst &I, uint64_t Address, unsigned Size) {
+ assert(Type == TextAtom && "Trying to add MCInst to a non-text atom!");
+
+ assert(Address < End+Size &&
+ "Instruction not contiguous with end of atom!");
+ if (Address > End)
+ Parent->remap(this, Begin, End+Size);
+
+ Text.push_back(std::make_pair(Address, I));
+}
+
+void MCAtom::addData(const MCData &D) {
+ assert(Type == DataAtom && "Trying to add MCData to a non-data atom!");
+ Parent->remap(this, Begin, End+1);
+
+ Data.push_back(D);
+}
+
MCAtom *MCAtom::split(uint64_t SplitPt) {
assert((SplitPt > Begin && SplitPt <= End) &&
"Splitting at point not contained in atom!");