diff options
-rw-r--r-- | include/llvm/MC/MCDisassembler.h | 2 | ||||
-rw-r--r-- | include/llvm/Support/MemoryObject.h | 17 | ||||
-rw-r--r-- | include/llvm/Support/StreamableMemoryObject.h | 34 | ||||
-rw-r--r-- | lib/MC/MCDisassembler/Disassembler.cpp | 4 | ||||
-rw-r--r-- | lib/MC/MCDisassembler/EDDisassembler.cpp | 4 | ||||
-rw-r--r-- | lib/Support/MemoryObject.cpp | 2 | ||||
-rw-r--r-- | lib/Support/StreamableMemoryObject.cpp | 35 | ||||
-rw-r--r-- | lib/Target/ARM/Disassembler/ARMDisassembler.cpp | 8 | ||||
-rw-r--r-- | lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp | 2 | ||||
-rw-r--r-- | lib/Target/MBlaze/Disassembler/MBlazeDisassembler.h | 2 | ||||
-rw-r--r-- | lib/Target/X86/Disassembler/X86Disassembler.cpp | 2 | ||||
-rw-r--r-- | lib/Target/X86/Disassembler/X86Disassembler.h | 2 | ||||
-rw-r--r-- | tools/llvm-mc/Disassembler.cpp | 5 | ||||
-rw-r--r-- | tools/llvm-objdump/MCFunction.cpp | 2 | ||||
-rw-r--r-- | tools/llvm-objdump/MCFunction.h | 2 | ||||
-rw-r--r-- | tools/llvm-objdump/llvm-objdump.h | 4 |
16 files changed, 64 insertions, 63 deletions
diff --git a/include/llvm/MC/MCDisassembler.h b/include/llvm/MC/MCDisassembler.h index 079746b05b..4b5fbec47d 100644 --- a/include/llvm/MC/MCDisassembler.h +++ b/include/llvm/MC/MCDisassembler.h @@ -79,7 +79,7 @@ public: /// MCDisassembler::Fail if the instruction was invalid. virtual DecodeStatus getInstruction(MCInst& instr, uint64_t& size, - MemoryObject ®ion, + const MemoryObject ®ion, uint64_t address, raw_ostream &vStream, raw_ostream &cStream) const = 0; diff --git a/include/llvm/Support/MemoryObject.h b/include/llvm/Support/MemoryObject.h index 5ae813f4ae..b778b08de9 100644 --- a/include/llvm/Support/MemoryObject.h +++ b/include/llvm/Support/MemoryObject.h @@ -23,27 +23,27 @@ class MemoryObject { public: /// Destructor - Override as necessary. virtual ~MemoryObject(); - + /// getBase - Returns the lowest valid address in the region. /// /// @result - The lowest valid address. virtual uint64_t getBase() const = 0; - + /// getExtent - Returns the size of the region in bytes. (The region is - /// contiguous, so the highest valid address of the region + /// contiguous, so the highest valid address of the region /// is getBase() + getExtent() - 1). /// /// @result - The size of the region. - virtual uint64_t getExtent() = 0; - + virtual uint64_t getExtent() const = 0; + /// readByte - Tries to read a single byte from the region. /// /// @param address - The address of the byte, in the same space as getBase(). /// @param ptr - A pointer to a byte to be filled in. Must be non-NULL. /// @result - 0 if successful; -1 if not. Failure may be due to a /// bounds violation or an implementation-specific error. - virtual int readByte(uint64_t address, uint8_t* ptr) = 0; - + virtual int readByte(uint64_t address, uint8_t* ptr) const = 0; + /// readBytes - Tries to read a contiguous range of bytes from the /// region, up to the end of the region. /// You should override this function if there is a quicker @@ -61,10 +61,9 @@ public: virtual int readBytes(uint64_t address, uint64_t size, uint8_t* buf, - uint64_t* copied); + uint64_t* copied) const; }; } #endif - diff --git a/include/llvm/Support/StreamableMemoryObject.h b/include/llvm/Support/StreamableMemoryObject.h index ab480864d0..531dbb216d 100644 --- a/include/llvm/Support/StreamableMemoryObject.h +++ b/include/llvm/Support/StreamableMemoryObject.h @@ -45,7 +45,7 @@ class StreamableMemoryObject : public MemoryObject { /// May block until all bytes in the stream have been read /// /// @result - The size of the region. - virtual uint64_t getExtent() = 0; + virtual uint64_t getExtent() const = 0; /// readByte - Tries to read a single byte from the region. /// May block until (address - base) bytes have been read @@ -53,7 +53,7 @@ class StreamableMemoryObject : public MemoryObject { /// @param ptr - A pointer to a byte to be filled in. Must be non-NULL. /// @result - 0 if successful; -1 if not. Failure may be due to a /// bounds violation or an implementation-specific error. - virtual int readByte(uint64_t address, uint8_t* ptr) = 0; + virtual int readByte(uint64_t address, uint8_t* ptr) const = 0; /// readBytes - Tries to read a contiguous range of bytes from the /// region, up to the end of the region. @@ -74,7 +74,7 @@ class StreamableMemoryObject : public MemoryObject { virtual int readBytes(uint64_t address, uint64_t size, uint8_t* buf, - uint64_t* copied) = 0; + uint64_t* copied) const = 0; /// getPointer - Ensures that the requested data is in memory, and returns /// A pointer to it. More efficient than using readBytes if the @@ -83,21 +83,21 @@ class StreamableMemoryObject : public MemoryObject { /// @param address - address of the byte, in the same space as getBase() /// @param size - amount of data that must be available on return /// @result - valid pointer to the requested data - virtual const uint8_t *getPointer(uint64_t address, uint64_t size) = 0; + virtual const uint8_t *getPointer(uint64_t address, uint64_t size) const = 0; /// isValidAddress - Returns true if the address is within the object /// (i.e. between base and base + extent - 1 inclusive) /// May block until (address - base) bytes have been read /// @param address - address of the byte, in the same space as getBase() /// @result - true if the address may be read with readByte() - virtual bool isValidAddress(uint64_t address) = 0; + virtual bool isValidAddress(uint64_t address) const = 0; /// isObjectEnd - Returns true if the address is one past the end of the /// object (i.e. if it is equal to base + extent) /// May block until (address - base) bytes have been read /// @param address - address of the byte, in the same space as getBase() /// @result - true if the address is equal to base + extent - virtual bool isObjectEnd(uint64_t address) = 0; + virtual bool isObjectEnd(uint64_t address) const = 0; }; /// StreamingMemoryObject - interface to data which is actually streamed from @@ -108,13 +108,13 @@ class StreamingMemoryObject : public StreamableMemoryObject { public: StreamingMemoryObject(DataStreamer *streamer); virtual uint64_t getBase() const { return 0; } - virtual uint64_t getExtent(); - virtual int readByte(uint64_t address, uint8_t* ptr); + virtual uint64_t getExtent() const; + virtual int readByte(uint64_t address, uint8_t* ptr) const; virtual int readBytes(uint64_t address, uint64_t size, uint8_t* buf, - uint64_t* copied); - virtual const uint8_t *getPointer(uint64_t address, uint64_t size) { + uint64_t* copied) const ; + virtual const uint8_t *getPointer(uint64_t address, uint64_t size) const { // This could be fixed by ensuring the bytes are fetched and making a copy, // requiring that the bitcode size be known, or otherwise ensuring that // the memory doesn't go away/get reallocated, but it's @@ -122,8 +122,8 @@ public: assert(0 && "getPointer in streaming memory objects not allowed"); return NULL; } - virtual bool isValidAddress(uint64_t address); - virtual bool isObjectEnd(uint64_t address); + virtual bool isValidAddress(uint64_t address) const; + virtual bool isObjectEnd(uint64_t address) const; /// Drop s bytes from the front of the stream, pushing the positions of the /// remaining bytes down by s. This is used to skip past the bitcode header, @@ -138,19 +138,19 @@ public: private: const static uint32_t kChunkSize = 4096 * 4; - std::vector<unsigned char> Bytes; + mutable std::vector<unsigned char> Bytes; OwningPtr<DataStreamer> Streamer; - size_t BytesRead; // Bytes read from stream + mutable size_t BytesRead; // Bytes read from stream size_t BytesSkipped;// Bytes skipped at start of stream (e.g. wrapper/header) - size_t ObjectSize; // 0 if unknown, set if wrapper was seen or EOF reached - bool EOFReached; + mutable size_t ObjectSize; // 0 if unknown, set if wrapper seen or EOF reached + mutable bool EOFReached; // Fetch enough bytes such that Pos can be read or EOF is reached // (i.e. BytesRead > Pos). Return true if Pos can be read. // Unlike most of the functions in BitcodeReader, returns true on success. // Most of the requests will be small, but we fetch at kChunkSize bytes // at a time to avoid making too many potentially expensive GetBytes calls - bool fetchToPos(size_t Pos) { + bool fetchToPos(size_t Pos) const { if (EOFReached) return Pos < ObjectSize; while (Pos >= BytesRead) { Bytes.resize(BytesRead + BytesSkipped + kChunkSize); diff --git a/lib/MC/MCDisassembler/Disassembler.cpp b/lib/MC/MCDisassembler/Disassembler.cpp index 3de6f64e97..605cf88ff2 100644 --- a/lib/MC/MCDisassembler/Disassembler.cpp +++ b/lib/MC/MCDisassembler/Disassembler.cpp @@ -113,9 +113,9 @@ public: Bytes(bytes), Size(size), BasePC(basePC) {} uint64_t getBase() const { return BasePC; } - uint64_t getExtent() { return Size; } + uint64_t getExtent() const { return Size; } - int readByte(uint64_t Addr, uint8_t *Byte) { + int readByte(uint64_t Addr, uint8_t *Byte) const { if (Addr - BasePC >= Size) return -1; *Byte = Bytes[Addr - BasePC]; diff --git a/lib/MC/MCDisassembler/EDDisassembler.cpp b/lib/MC/MCDisassembler/EDDisassembler.cpp index 35cd3d77f8..b1f0e5bc03 100644 --- a/lib/MC/MCDisassembler/EDDisassembler.cpp +++ b/lib/MC/MCDisassembler/EDDisassembler.cpp @@ -199,8 +199,8 @@ namespace { void *arg) : Callback(callback), Arg(arg) { } ~EDMemoryObject() { } uint64_t getBase() const { return 0x0; } - uint64_t getExtent() { return (uint64_t)-1; } - int readByte(uint64_t address, uint8_t *ptr) { + uint64_t getExtent() const { return (uint64_t)-1; } + int readByte(uint64_t address, uint8_t *ptr) const { if (!Callback) return -1; diff --git a/lib/Support/MemoryObject.cpp b/lib/Support/MemoryObject.cpp index c82f46ae79..b20ab89238 100644 --- a/lib/Support/MemoryObject.cpp +++ b/lib/Support/MemoryObject.cpp @@ -16,7 +16,7 @@ MemoryObject::~MemoryObject() { int MemoryObject::readBytes(uint64_t address, uint64_t size, uint8_t* buf, - uint64_t* copied) { + uint64_t* copied) const { uint64_t current = address; uint64_t limit = getBase() + getExtent(); diff --git a/lib/Support/StreamableMemoryObject.cpp b/lib/Support/StreamableMemoryObject.cpp index 0f2acb4c86..c23f07b8fc 100644 --- a/lib/Support/StreamableMemoryObject.cpp +++ b/lib/Support/StreamableMemoryObject.cpp @@ -24,15 +24,17 @@ public: } virtual uint64_t getBase() const { return 0; } - virtual uint64_t getExtent() { return LastChar - FirstChar; } - virtual int readByte(uint64_t address, uint8_t* ptr); + virtual uint64_t getExtent() const { return LastChar - FirstChar; } + virtual int readByte(uint64_t address, uint8_t* ptr) const; virtual int readBytes(uint64_t address, uint64_t size, uint8_t* buf, - uint64_t* copied); - virtual const uint8_t *getPointer(uint64_t address, uint64_t size); - virtual bool isValidAddress(uint64_t address) {return validAddress(address);} - virtual bool isObjectEnd(uint64_t address) {return objectEnd(address);} + uint64_t* copied) const; + virtual const uint8_t *getPointer(uint64_t address, uint64_t size) const; + virtual bool isValidAddress(uint64_t address) const { + return validAddress(address); + } + virtual bool isObjectEnd(uint64_t address) const {return objectEnd(address);} private: const uint8_t* const FirstChar; @@ -40,10 +42,10 @@ private: // These are implemented as inline functions here to avoid multiple virtual // calls per public function - bool validAddress(uint64_t address) { + bool validAddress(uint64_t address) const { return static_cast<ptrdiff_t>(address) < LastChar - FirstChar; } - bool objectEnd(uint64_t address) { + bool objectEnd(uint64_t address) const { return static_cast<ptrdiff_t>(address) == LastChar - FirstChar; } @@ -51,7 +53,7 @@ private: void operator=(const RawMemoryObject&); // DO NOT IMPLEMENT }; -int RawMemoryObject::readByte(uint64_t address, uint8_t* ptr) { +int RawMemoryObject::readByte(uint64_t address, uint8_t* ptr) const { if (!validAddress(address)) return -1; *ptr = *((uint8_t *)(uintptr_t)(address + FirstChar)); return 0; @@ -60,14 +62,15 @@ int RawMemoryObject::readByte(uint64_t address, uint8_t* ptr) { int RawMemoryObject::readBytes(uint64_t address, uint64_t size, uint8_t* buf, - uint64_t* copied) { + uint64_t* copied) const { if (!validAddress(address) || !validAddress(address + size - 1)) return -1; memcpy(buf, (uint8_t *)(uintptr_t)(address + FirstChar), size); if (copied) *copied = size; return size; } -const uint8_t *RawMemoryObject::getPointer(uint64_t address, uint64_t size) { +const uint8_t *RawMemoryObject::getPointer(uint64_t address, + uint64_t size) const { return FirstChar + address; } } // anonymous namespace @@ -75,18 +78,18 @@ const uint8_t *RawMemoryObject::getPointer(uint64_t address, uint64_t size) { namespace llvm { // If the bitcode has a header, then its size is known, and we don't have to // block until we actually want to read it. -bool StreamingMemoryObject::isValidAddress(uint64_t address) { +bool StreamingMemoryObject::isValidAddress(uint64_t address) const { if (ObjectSize && address < ObjectSize) return true; return fetchToPos(address); } -bool StreamingMemoryObject::isObjectEnd(uint64_t address) { +bool StreamingMemoryObject::isObjectEnd(uint64_t address) const { if (ObjectSize) return address == ObjectSize; fetchToPos(address); return address == ObjectSize && address != 0; } -uint64_t StreamingMemoryObject::getExtent() { +uint64_t StreamingMemoryObject::getExtent() const { if (ObjectSize) return ObjectSize; size_t pos = BytesRead + kChunkSize; // keep fetching until we run out of bytes @@ -94,7 +97,7 @@ uint64_t StreamingMemoryObject::getExtent() { return ObjectSize; } -int StreamingMemoryObject::readByte(uint64_t address, uint8_t* ptr) { +int StreamingMemoryObject::readByte(uint64_t address, uint8_t* ptr) const { if (!fetchToPos(address)) return -1; *ptr = Bytes[address + BytesSkipped]; return 0; @@ -103,7 +106,7 @@ int StreamingMemoryObject::readByte(uint64_t address, uint8_t* ptr) { int StreamingMemoryObject::readBytes(uint64_t address, uint64_t size, uint8_t* buf, - uint64_t* copied) { + uint64_t* copied) const { if (!fetchToPos(address + size - 1)) return -1; memcpy(buf, &Bytes[address + BytesSkipped], size); if (copied) *copied = size; diff --git a/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/lib/Target/ARM/Disassembler/ARMDisassembler.cpp index e570cd5ea6..fc6b9a11f8 100644 --- a/lib/Target/ARM/Disassembler/ARMDisassembler.cpp +++ b/lib/Target/ARM/Disassembler/ARMDisassembler.cpp @@ -46,7 +46,7 @@ public: /// getInstruction - See MCDisassembler. DecodeStatus getInstruction(MCInst &instr, uint64_t &size, - MemoryObject ®ion, + const MemoryObject ®ion, uint64_t address, raw_ostream &vStream, raw_ostream &cStream) const; @@ -71,7 +71,7 @@ public: /// getInstruction - See MCDisassembler. DecodeStatus getInstruction(MCInst &instr, uint64_t &size, - MemoryObject ®ion, + const MemoryObject ®ion, uint64_t address, raw_ostream &vStream, raw_ostream &cStream) const; @@ -341,7 +341,7 @@ const EDInstInfo *ThumbDisassembler::getEDInfo() const { } DecodeStatus ARMDisassembler::getInstruction(MCInst &MI, uint64_t &Size, - MemoryObject &Region, + const MemoryObject &Region, uint64_t Address, raw_ostream &os, raw_ostream &cs) const { @@ -689,7 +689,7 @@ void ThumbDisassembler::UpdateThumbVFPPredicate(MCInst &MI) const { } DecodeStatus ThumbDisassembler::getInstruction(MCInst &MI, uint64_t &Size, - MemoryObject &Region, + const MemoryObject &Region, uint64_t Address, raw_ostream &os, raw_ostream &cs) const { diff --git a/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp b/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp index 77a77974d8..adedf93750 100644 --- a/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp +++ b/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.cpp @@ -502,7 +502,7 @@ const EDInstInfo *MBlazeDisassembler::getEDInfo() const { MCDisassembler::DecodeStatus MBlazeDisassembler::getInstruction(MCInst &instr, uint64_t &size, - MemoryObject ®ion, + const MemoryObject ®ion, uint64_t address, raw_ostream &vStream, raw_ostream &cStream) const { diff --git a/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.h b/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.h index 97c4af963c..5c4ae3b1ac 100644 --- a/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.h +++ b/lib/Target/MBlaze/Disassembler/MBlazeDisassembler.h @@ -40,7 +40,7 @@ public: /// getInstruction - See MCDisassembler. MCDisassembler::DecodeStatus getInstruction(MCInst &instr, uint64_t &size, - MemoryObject ®ion, + const MemoryObject ®ion, uint64_t address, raw_ostream &vStream, raw_ostream &cStream) const; diff --git a/lib/Target/X86/Disassembler/X86Disassembler.cpp b/lib/Target/X86/Disassembler/X86Disassembler.cpp index efbe326eec..676321a181 100644 --- a/lib/Target/X86/Disassembler/X86Disassembler.cpp +++ b/lib/Target/X86/Disassembler/X86Disassembler.cpp @@ -121,7 +121,7 @@ static void logger(void* arg, const char* log) { MCDisassembler::DecodeStatus X86GenericDisassembler::getInstruction(MCInst &instr, uint64_t &size, - MemoryObject ®ion, + const MemoryObject ®ion, uint64_t address, raw_ostream &vStream, raw_ostream &cStream) const { diff --git a/lib/Target/X86/Disassembler/X86Disassembler.h b/lib/Target/X86/Disassembler/X86Disassembler.h index 85e8ab63a3..c11f51c6a9 100644 --- a/lib/Target/X86/Disassembler/X86Disassembler.h +++ b/lib/Target/X86/Disassembler/X86Disassembler.h @@ -117,7 +117,7 @@ public: /// getInstruction - See MCDisassembler. DecodeStatus getInstruction(MCInst &instr, uint64_t &size, - MemoryObject ®ion, + const MemoryObject ®ion, uint64_t address, raw_ostream &vStream, raw_ostream &cStream) const; diff --git a/tools/llvm-mc/Disassembler.cpp b/tools/llvm-mc/Disassembler.cpp index 32fc2ba57d..8114580cb9 100644 --- a/tools/llvm-mc/Disassembler.cpp +++ b/tools/llvm-mc/Disassembler.cpp @@ -42,9 +42,9 @@ public: VectorMemoryObject(const ByteArrayTy &bytes) : Bytes(bytes) {} uint64_t getBase() const { return 0; } - uint64_t getExtent() { return Bytes.size(); } + uint64_t getExtent() const { return Bytes.size(); } - int readByte(uint64_t Addr, uint8_t *Byte) { + int readByte(uint64_t Addr, uint8_t *Byte) const { if (Addr >= getExtent()) return -1; *Byte = Bytes[Addr].first; @@ -365,4 +365,3 @@ int Disassembler::disassembleEnhanced(const std::string &TS, return 0; } - diff --git a/tools/llvm-objdump/MCFunction.cpp b/tools/llvm-objdump/MCFunction.cpp index 9a9edda753..5c67f1b70a 100644 --- a/tools/llvm-objdump/MCFunction.cpp +++ b/tools/llvm-objdump/MCFunction.cpp @@ -28,7 +28,7 @@ using namespace llvm; MCFunction MCFunction::createFunctionFromMC(StringRef Name, const MCDisassembler *DisAsm, - MemoryObject &Region, uint64_t Start, + const MemoryObject &Region, uint64_t Start, uint64_t End, const MCInstrAnalysis *Ana, raw_ostream &DebugOut, SmallVectorImpl<uint64_t> &Calls) { diff --git a/tools/llvm-objdump/MCFunction.h b/tools/llvm-objdump/MCFunction.h index c0362d3a43..6d3a548d48 100644 --- a/tools/llvm-objdump/MCFunction.h +++ b/tools/llvm-objdump/MCFunction.h @@ -79,7 +79,7 @@ public: // Create an MCFunction from a region of binary machine code. static MCFunction createFunctionFromMC(StringRef Name, const MCDisassembler *DisAsm, - MemoryObject &Region, uint64_t Start, uint64_t End, + const MemoryObject &Region, uint64_t Start, uint64_t End, const MCInstrAnalysis *Ana, raw_ostream &DebugOut, SmallVectorImpl<uint64_t> &Calls); diff --git a/tools/llvm-objdump/llvm-objdump.h b/tools/llvm-objdump/llvm-objdump.h index 1611516ab7..aa71b77c8a 100644 --- a/tools/llvm-objdump/llvm-objdump.h +++ b/tools/llvm-objdump/llvm-objdump.h @@ -31,9 +31,9 @@ public: StringRefMemoryObject(StringRef bytes) : Bytes(bytes) {} uint64_t getBase() const { return 0; } - uint64_t getExtent() { return Bytes.size(); } + uint64_t getExtent() const { return Bytes.size(); } - int readByte(uint64_t Addr, uint8_t *Byte) { + int readByte(uint64_t Addr, uint8_t *Byte) const { if (Addr >= getExtent()) return -1; *Byte = Bytes[Addr]; |