diff options
author | Haowei Wu <haowei@google.com> | 2020-12-29 17:26:22 -0800 |
---|---|---|
committer | Haowei Wu <haowei@google.com> | 2020-12-29 17:26:22 -0800 |
commit | d034a94e7b3c8122acc91c4dad13110d15ed97d0 (patch) | |
tree | fa210d4e8aa0ba827e36bd1cb7b08b587c51ad5c /llvm/lib/InterfaceStub/ELFObjHandler.cpp | |
parent | 6da00336248ca725f5f817337e8486c234ace187 (diff) | |
download | llvm-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.cpp | 39 |
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"); } |