aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/InterfaceStub/ELFObjHandler.cpp
diff options
context:
space:
mode:
authorHaowei Wu <haowei@google.com>2020-12-29 17:26:22 -0800
committerHaowei Wu <haowei@google.com>2020-12-29 17:26:22 -0800
commitd034a94e7b3c8122acc91c4dad13110d15ed97d0 (patch)
treefa210d4e8aa0ba827e36bd1cb7b08b587c51ad5c /llvm/lib/InterfaceStub/ELFObjHandler.cpp
parent6da00336248ca725f5f817337e8486c234ace187 (diff)
downloadllvm-d034a94e7b3c8122acc91c4dad13110d15ed97d0.zip
llvm-d034a94e7b3c8122acc91c4dad13110d15ed97d0.tar.gz
llvm-d034a94e7b3c8122acc91c4dad13110d15ed97d0.tar.bz2
Revert "[llvm-elfabi] Add flag to preserve timestamp when output is the same"
This reverts commit fddb41744958d21635a60622cfb4067122810bcc. which causes test failures on Mac builders.
Diffstat (limited to 'llvm/lib/InterfaceStub/ELFObjHandler.cpp')
-rw-r--r--llvm/lib/InterfaceStub/ELFObjHandler.cpp39
1 files changed, 12 insertions, 27 deletions
diff --git a/llvm/lib/InterfaceStub/ELFObjHandler.cpp b/llvm/lib/InterfaceStub/ELFObjHandler.cpp
index 40d8afa..e50ebd7 100644
--- a/llvm/lib/InterfaceStub/ELFObjHandler.cpp
+++ b/llvm/lib/InterfaceStub/ELFObjHandler.cpp
@@ -17,7 +17,6 @@
#include "llvm/Support/FileOutputBuffer.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/Support/Process.h"
using llvm::MemoryBufferRef;
using llvm::object::ELFObjectFile;
@@ -664,25 +663,8 @@ buildStub(const ELFObjectFile<ELFT> &ElfObj) {
/// @param FilePath File path for writing the ELF binary.
/// @param Stub Source ELFStub to generate a binary ELF stub from.
template <class ELFT>
-static Error writeELFBinaryToFile(StringRef FilePath, const ELFStub &Stub,
- bool WriteIfChanged) {
+static Error writeELFBinaryToFile(StringRef FilePath, const ELFStub &Stub) {
ELFStubBuilder<ELFT> Builder{Stub};
- // Write Stub to memory first.
- std::vector<uint8_t> Buf(Builder.getSize());
- Builder.write(Buf.data());
-
- if (WriteIfChanged) {
- if (ErrorOr<std::unique_ptr<MemoryBuffer>> BufOrError =
- MemoryBuffer::getFile(FilePath)) {
- // Compare Stub output with existing Stub file.
- // If Stub file unchanged, abort updating.
- if ((*BufOrError)->getBufferSize() == Builder.getSize() &&
- !memcmp((*BufOrError)->getBufferStart(), Buf.data(),
- Builder.getSize()))
- return Error::success();
- }
- }
-
Expected<std::unique_ptr<FileOutputBuffer>> BufOrError =
FileOutputBuffer::create(FilePath, Builder.getSize());
if (!BufOrError)
@@ -692,10 +674,13 @@ static Error writeELFBinaryToFile(StringRef FilePath, const ELFStub &Stub,
"` for writing");
// Write binary to file.
- std::unique_ptr<FileOutputBuffer> FileBuf = std::move(*BufOrError);
- memcpy(FileBuf->getBufferStart(), Buf.data(), Buf.size());
+ std::unique_ptr<FileOutputBuffer> Buf = std::move(*BufOrError);
+ Builder.write(Buf->getBufferStart());
- return FileBuf->commit();
+ if (Error E = Buf->commit())
+ return E;
+
+ return Error::success();
}
Expected<std::unique_ptr<ELFStub>> readELFFile(MemoryBufferRef Buf) {
@@ -720,15 +705,15 @@ Expected<std::unique_ptr<ELFStub>> readELFFile(MemoryBufferRef Buf) {
// This function wraps the ELFT writeELFBinaryToFile() so writeBinaryStub()
// can be called without having to use ELFType templates directly.
Error writeBinaryStub(StringRef FilePath, const ELFStub &Stub,
- ELFTarget OutputFormat, bool WriteIfChanged) {
+ ELFTarget OutputFormat) {
if (OutputFormat == ELFTarget::ELF32LE)
- return writeELFBinaryToFile<ELF32LE>(FilePath, Stub, WriteIfChanged);
+ return writeELFBinaryToFile<ELF32LE>(FilePath, Stub);
if (OutputFormat == ELFTarget::ELF32BE)
- return writeELFBinaryToFile<ELF32BE>(FilePath, Stub, WriteIfChanged);
+ return writeELFBinaryToFile<ELF32BE>(FilePath, Stub);
if (OutputFormat == ELFTarget::ELF64LE)
- return writeELFBinaryToFile<ELF64LE>(FilePath, Stub, WriteIfChanged);
+ return writeELFBinaryToFile<ELF64LE>(FilePath, Stub);
if (OutputFormat == ELFTarget::ELF64BE)
- return writeELFBinaryToFile<ELF64BE>(FilePath, Stub, WriteIfChanged);
+ return writeELFBinaryToFile<ELF64BE>(FilePath, Stub);
llvm_unreachable("invalid binary output target");
}