mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 15:13:49 -04:00
8cf7aa39d7
Summary: This patch changes a few methods to return Error instead of manually calling error/reportError to abort. This will make it easier to extract into a library. Note that error() takes just a string (this patch also adds an overload that takes an Error), while reportError() takes string + [error/code]. To help unify things, use FileError to associate a given filename with an error. Note that this takes some special care (for now), e.g. calling reportError(FileName, <something that could be FileError>) will duplicate the filename. The goal is to eventually remove reportError() and have every error associated with a file to be a FileError, and just one error handling block at the tool level. This change was suggested in D56806. I took it a little further than suggested, but completely fixing llvm-objcopy will take a couple more patches. If this approach looks good, I'll commit this and apply similar patche(s) for the rest. This change is NFC in terms of non-error related code, although the error message changes in one context. Reviewers: alexshap, jhenderson, jakehehrlich, mstorsjo, espindola Reviewed By: alexshap, jhenderson Subscribers: llvm-commits, emaste, arichardson Differential Revision: https://reviews.llvm.org/D56930 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351896 91177308-0d34-0410-b5e6-96231b3b80d8
59 lines
1.9 KiB
C++
59 lines
1.9 KiB
C++
//===- Buffer.cpp ---------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "Buffer.h"
|
|
#include "llvm-objcopy.h"
|
|
#include "llvm/Support/FileOutputBuffer.h"
|
|
#include "llvm/Support/MemoryBuffer.h"
|
|
#include <memory>
|
|
|
|
namespace llvm {
|
|
namespace objcopy {
|
|
|
|
Buffer::~Buffer() {}
|
|
|
|
Error FileBuffer::allocate(size_t Size) {
|
|
Expected<std::unique_ptr<FileOutputBuffer>> BufferOrErr =
|
|
FileOutputBuffer::create(getName(), Size, FileOutputBuffer::F_executable);
|
|
// FileOutputBuffer::create() returns an Error that is just a wrapper around
|
|
// std::error_code. Wrap it in FileError to include the actual filename.
|
|
if (!BufferOrErr)
|
|
return createFileError(getName(), BufferOrErr.takeError());
|
|
Buf = std::move(*BufferOrErr);
|
|
return Error::success();
|
|
}
|
|
|
|
Error FileBuffer::commit() {
|
|
Error Err = Buf->commit();
|
|
// FileOutputBuffer::commit() returns an Error that is just a wrapper around
|
|
// std::error_code. Wrap it in FileError to include the actual filename.
|
|
return Err ? createFileError(getName(), std::move(Err)) : std::move(Err);
|
|
}
|
|
|
|
uint8_t *FileBuffer::getBufferStart() {
|
|
return reinterpret_cast<uint8_t *>(Buf->getBufferStart());
|
|
}
|
|
|
|
Error MemBuffer::allocate(size_t Size) {
|
|
Buf = WritableMemoryBuffer::getNewMemBuffer(Size, getName());
|
|
return Error::success();
|
|
}
|
|
|
|
Error MemBuffer::commit() { return Error::success(); }
|
|
|
|
uint8_t *MemBuffer::getBufferStart() {
|
|
return reinterpret_cast<uint8_t *>(Buf->getBufferStart());
|
|
}
|
|
|
|
std::unique_ptr<WritableMemoryBuffer> MemBuffer::releaseMemoryBuffer() {
|
|
return std::move(Buf);
|
|
}
|
|
|
|
} // end namespace objcopy
|
|
} // end namespace llvm
|