summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Labath <labath@google.com>2018-01-09 17:26:06 +0000
committerPavel Labath <labath@google.com>2018-01-09 17:26:06 +0000
commit9aaf5d3e717e14d0a06fd6598c988537791e55b9 (patch)
tree3d93df7c89be1ab3877e63137e396807779622fc
parent40bab3755112a37df15c4fbc8b9664366cd86ec0 (diff)
downloadbcm5719-llvm-9aaf5d3e717e14d0a06fd6598c988537791e55b9.tar.gz
bcm5719-llvm-9aaf5d3e717e14d0a06fd6598c988537791e55b9.zip
[Support] Add WritableMemoryBuffer::getNewMemBuffer
Summary: The idea is that it would replace (non-Writable)MemoryBuffer::getNewMemBuffer, which is quite useless unless you const_cast its contents to write to it (which all (both) callers of this function were doing). This patch also fixes one of the usages in COFFWriter. After fixing the other usage in clang, I plan to delete the old function. Reviewers: dblaikie, Bigcheese Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D41540 llvm-svn: 322094
-rw-r--r--llvm/include/llvm/Support/MemoryBuffer.h12
-rw-r--r--llvm/lib/Object/WindowsResource.cpp6
-rw-r--r--llvm/lib/Support/MemoryBuffer.cpp15
-rw-r--r--llvm/unittests/Support/MemoryBufferTest.cpp4
4 files changed, 23 insertions, 14 deletions
diff --git a/llvm/include/llvm/Support/MemoryBuffer.h b/llvm/include/llvm/Support/MemoryBuffer.h
index 7b849fdb867..2534cf3eb65 100644
--- a/llvm/include/llvm/Support/MemoryBuffer.h
+++ b/llvm/include/llvm/Support/MemoryBuffer.h
@@ -117,9 +117,8 @@ public:
static std::unique_ptr<MemoryBuffer>
getMemBufferCopy(StringRef InputData, const Twine &BufferName = "");
- /// Allocate a new zero-initialized MemoryBuffer of the specified size. Note
- /// that the caller need not initialize the memory allocated by this method.
- /// The memory is owned by the MemoryBuffer object.
+ // TODO: Remove after all callers are switched to
+ // WritableMemoryBuffer::getNewMemBuffer
static std::unique_ptr<MemoryBuffer>
getNewMemBuffer(size_t Size, StringRef BufferName = "");
@@ -196,6 +195,12 @@ public:
static std::unique_ptr<WritableMemoryBuffer>
getNewUninitMemBuffer(size_t Size, const Twine &BufferName = "");
+ /// Allocate a new zero-initialized MemoryBuffer of the specified size. Note
+ /// that the caller need not initialize the memory allocated by this method.
+ /// The memory is owned by the MemoryBuffer object.
+ static std::unique_ptr<WritableMemoryBuffer>
+ getNewMemBuffer(size_t Size, const Twine &BufferName = "");
+
private:
// Hide these base class factory function so one can't write
// WritableMemoryBuffer::getXXX()
@@ -204,7 +209,6 @@ private:
using MemoryBuffer::getFileOrSTDIN;
using MemoryBuffer::getMemBuffer;
using MemoryBuffer::getMemBufferCopy;
- using MemoryBuffer::getNewMemBuffer;
using MemoryBuffer::getOpenFile;
using MemoryBuffer::getOpenFileSlice;
using MemoryBuffer::getSTDIN;
diff --git a/llvm/lib/Object/WindowsResource.cpp b/llvm/lib/Object/WindowsResource.cpp
index 271224ec631..1b7282f13db 100644
--- a/llvm/lib/Object/WindowsResource.cpp
+++ b/llvm/lib/Object/WindowsResource.cpp
@@ -334,7 +334,7 @@ private:
void writeDirectoryTree();
void writeDirectoryStringTable();
void writeFirstSectionRelocations();
- std::unique_ptr<MemoryBuffer> OutputBuffer;
+ std::unique_ptr<WritableMemoryBuffer> OutputBuffer;
char *BufferStart;
uint64_t CurrentOffset = 0;
COFF::MachineTypes MachineType;
@@ -360,7 +360,7 @@ WindowsResourceCOFFWriter::WindowsResourceCOFFWriter(
Data(Parser.getData()), StringTable(Parser.getStringTable()) {
performFileLayout();
- OutputBuffer = MemoryBuffer::getNewMemBuffer(FileSize);
+ OutputBuffer = WritableMemoryBuffer::getNewMemBuffer(FileSize);
}
void WindowsResourceCOFFWriter::performFileLayout() {
@@ -425,7 +425,7 @@ static std::time_t getTime() {
}
std::unique_ptr<MemoryBuffer> WindowsResourceCOFFWriter::write() {
- BufferStart = const_cast<char *>(OutputBuffer->getBufferStart());
+ BufferStart = OutputBuffer->getBufferStart();
writeCOFFHeader();
writeFirstSectionHeader();
diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp
index c709fc416df..834ca8cbfd8 100644
--- a/llvm/lib/Support/MemoryBuffer.cpp
+++ b/llvm/lib/Support/MemoryBuffer.cpp
@@ -141,11 +141,7 @@ MemoryBuffer::getMemBufferCopy(StringRef InputData, const Twine &BufferName) {
std::unique_ptr<MemoryBuffer>
MemoryBuffer::getNewMemBuffer(size_t Size, StringRef BufferName) {
- auto SB = WritableMemoryBuffer::getNewUninitMemBuffer(Size, BufferName);
- if (!SB)
- return nullptr;
- memset(SB->getBufferStart(), 0, Size);
- return std::move(SB);
+ return WritableMemoryBuffer::getNewMemBuffer(Size, BufferName);
}
ErrorOr<std::unique_ptr<MemoryBuffer>>
@@ -306,6 +302,15 @@ WritableMemoryBuffer::getNewUninitMemBuffer(size_t Size, const Twine &BufferName
return std::unique_ptr<WritableMemoryBuffer>(Ret);
}
+std::unique_ptr<WritableMemoryBuffer>
+WritableMemoryBuffer::getNewMemBuffer(size_t Size, const Twine &BufferName) {
+ auto SB = WritableMemoryBuffer::getNewUninitMemBuffer(Size, BufferName);
+ if (!SB)
+ return nullptr;
+ memset(SB->getBufferStart(), 0, Size);
+ return SB;
+}
+
static bool shouldUseMmap(int FD,
size_t FileSize,
size_t MapSize,
diff --git a/llvm/unittests/Support/MemoryBufferTest.cpp b/llvm/unittests/Support/MemoryBufferTest.cpp
index 5e3c8db0279..64a7bb676f9 100644
--- a/llvm/unittests/Support/MemoryBufferTest.cpp
+++ b/llvm/unittests/Support/MemoryBufferTest.cpp
@@ -116,13 +116,13 @@ TEST_F(MemoryBufferTest, make_new) {
EXPECT_TRUE(nullptr != Two.get());
// 0-initialized buffer with no name
- OwningBuffer Three(MemoryBuffer::getNewMemBuffer(321, data));
+ OwningBuffer Three(WritableMemoryBuffer::getNewMemBuffer(321, data));
EXPECT_TRUE(nullptr != Three.get());
for (size_t i = 0; i < 321; ++i)
EXPECT_EQ(0, Three->getBufferStart()[0]);
// 0-initialized buffer with name
- OwningBuffer Four(MemoryBuffer::getNewMemBuffer(123, "zeros"));
+ OwningBuffer Four(WritableMemoryBuffer::getNewMemBuffer(123, "zeros"));
EXPECT_TRUE(nullptr != Four.get());
for (size_t i = 0; i < 123; ++i)
EXPECT_EQ(0, Four->getBufferStart()[0]);
OpenPOWER on IntegriCloud