mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Don't own the buffer in object::Binary.
Owning the buffer is somewhat inflexible. Some Binaries have sub Binaries (like Archive) and we had to create dummy buffers just to handle that. It is also a bad fit for IRObjectFile where the Module wants to own the buffer too. Keeping this ownership would make supporting IR inside native objects particularly painful. This patch focuses in lib/Object. If something elsewhere used to own an Binary, now it also owns a MemoryBuffer. This patch introduces a few new types. * MemoryBufferRef. This is just a pair of StringRefs for the data and name. This is to MemoryBuffer as StringRef is to std::string. * OwningBinary. A combination of Binary and a MemoryBuffer. This is needed for convenience functions that take a filename and return both the buffer and the Binary using that buffer. The C api now uses OwningBinary to avoid any change in semantics. I will start a new thread to see if we want to change it and how. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216002 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -24,9 +24,11 @@
|
||||
#include <system_error>
|
||||
|
||||
namespace llvm {
|
||||
/// This interface provides simple read-only access to a block/ of memory, and
|
||||
class MemoryBufferRef;
|
||||
|
||||
/// This interface provides simple read-only access to a block of memory, and
|
||||
/// provides simple methods for reading files and standard input into a memory
|
||||
/// buffer. In addition to basic access to the characters in the file, this
|
||||
/// buffer. In addition to basic access to the characters in the file, this
|
||||
/// interface guarantees you can read one character past the end of the file,
|
||||
/// and that this character will read as '\0'.
|
||||
///
|
||||
@@ -136,7 +138,27 @@ public:
|
||||
|
||||
/// Return information on the memory mechanism used to support the
|
||||
/// MemoryBuffer.
|
||||
virtual BufferKind getBufferKind() const = 0;
|
||||
virtual BufferKind getBufferKind() const = 0;
|
||||
|
||||
MemoryBufferRef getMemBufferRef() const;
|
||||
};
|
||||
|
||||
class MemoryBufferRef {
|
||||
StringRef Buffer;
|
||||
StringRef Identifier;
|
||||
|
||||
public:
|
||||
MemoryBufferRef() {}
|
||||
MemoryBufferRef(StringRef Buffer, StringRef Identifier)
|
||||
: Buffer(Buffer), Identifier(Identifier) {}
|
||||
|
||||
StringRef getBuffer() const { return Buffer; }
|
||||
|
||||
StringRef getBufferIdentifier() const { return Identifier; }
|
||||
|
||||
const char *getBufferStart() const { return Buffer.begin(); }
|
||||
const char *getBufferEnd() const { return Buffer.end(); }
|
||||
size_t getBufferSize() const { return Buffer.size(); }
|
||||
};
|
||||
|
||||
// Create wrappers for C Binding types (see CBindingWrapping.h).
|
||||
|
Reference in New Issue
Block a user