Skip to content

Commit d034a94

Browse files
committed
Revert "[llvm-elfabi] Add flag to preserve timestamp when output is the same"
This reverts commit fddb417. which causes test failures on Mac builders.
1 parent 6da0033 commit d034a94

File tree

5 files changed

+22
-82
lines changed

5 files changed

+22
-82
lines changed

llvm/include/llvm/InterfaceStub/ELFObjHandler.h

+1-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
#include "llvm/InterfaceStub/ELFStub.h"
1717
#include "llvm/Object/ELFObjectFile.h"
1818
#include "llvm/Object/ELFTypes.h"
19-
#include "llvm/Support/FileSystem.h"
2019

2120
namespace llvm {
2221

@@ -36,10 +35,8 @@ Expected<std::unique_ptr<ELFStub>> readELFFile(MemoryBufferRef Buf);
3635
/// @param FilePath File path for writing the ELF binary.
3736
/// @param Stub Source ELFStub to generate a binary ELF stub from.
3837
/// @param OutputFormat Target ELFType to write binary as.
39-
/// @param WriteIfChanged Whether or not to preserve timestamp if
40-
/// the output stays the same.
4138
Error writeBinaryStub(StringRef FilePath, const ELFStub &Stub,
42-
ELFTarget OutputFormat, bool WriteIfChanged = false);
39+
ELFTarget OutputFormat);
4340

4441
} // end namespace elfabi
4542
} // end namespace llvm

llvm/lib/InterfaceStub/ELFObjHandler.cpp

+12-27
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include "llvm/Support/FileOutputBuffer.h"
1818
#include "llvm/Support/MathExtras.h"
1919
#include "llvm/Support/MemoryBuffer.h"
20-
#include "llvm/Support/Process.h"
2120

2221
using llvm::MemoryBufferRef;
2322
using llvm::object::ELFObjectFile;
@@ -664,25 +663,8 @@ buildStub(const ELFObjectFile<ELFT> &ElfObj) {
664663
/// @param FilePath File path for writing the ELF binary.
665664
/// @param Stub Source ELFStub to generate a binary ELF stub from.
666665
template <class ELFT>
667-
static Error writeELFBinaryToFile(StringRef FilePath, const ELFStub &Stub,
668-
bool WriteIfChanged) {
666+
static Error writeELFBinaryToFile(StringRef FilePath, const ELFStub &Stub) {
669667
ELFStubBuilder<ELFT> Builder{Stub};
670-
// Write Stub to memory first.
671-
std::vector<uint8_t> Buf(Builder.getSize());
672-
Builder.write(Buf.data());
673-
674-
if (WriteIfChanged) {
675-
if (ErrorOr<std::unique_ptr<MemoryBuffer>> BufOrError =
676-
MemoryBuffer::getFile(FilePath)) {
677-
// Compare Stub output with existing Stub file.
678-
// If Stub file unchanged, abort updating.
679-
if ((*BufOrError)->getBufferSize() == Builder.getSize() &&
680-
!memcmp((*BufOrError)->getBufferStart(), Buf.data(),
681-
Builder.getSize()))
682-
return Error::success();
683-
}
684-
}
685-
686668
Expected<std::unique_ptr<FileOutputBuffer>> BufOrError =
687669
FileOutputBuffer::create(FilePath, Builder.getSize());
688670
if (!BufOrError)
@@ -692,10 +674,13 @@ static Error writeELFBinaryToFile(StringRef FilePath, const ELFStub &Stub,
692674
"` for writing");
693675

694676
// Write binary to file.
695-
std::unique_ptr<FileOutputBuffer> FileBuf = std::move(*BufOrError);
696-
memcpy(FileBuf->getBufferStart(), Buf.data(), Buf.size());
677+
std::unique_ptr<FileOutputBuffer> Buf = std::move(*BufOrError);
678+
Builder.write(Buf->getBufferStart());
697679

698-
return FileBuf->commit();
680+
if (Error E = Buf->commit())
681+
return E;
682+
683+
return Error::success();
699684
}
700685

701686
Expected<std::unique_ptr<ELFStub>> readELFFile(MemoryBufferRef Buf) {
@@ -720,15 +705,15 @@ Expected<std::unique_ptr<ELFStub>> readELFFile(MemoryBufferRef Buf) {
720705
// This function wraps the ELFT writeELFBinaryToFile() so writeBinaryStub()
721706
// can be called without having to use ELFType templates directly.
722707
Error writeBinaryStub(StringRef FilePath, const ELFStub &Stub,
723-
ELFTarget OutputFormat, bool WriteIfChanged) {
708+
ELFTarget OutputFormat) {
724709
if (OutputFormat == ELFTarget::ELF32LE)
725-
return writeELFBinaryToFile<ELF32LE>(FilePath, Stub, WriteIfChanged);
710+
return writeELFBinaryToFile<ELF32LE>(FilePath, Stub);
726711
if (OutputFormat == ELFTarget::ELF32BE)
727-
return writeELFBinaryToFile<ELF32BE>(FilePath, Stub, WriteIfChanged);
712+
return writeELFBinaryToFile<ELF32BE>(FilePath, Stub);
728713
if (OutputFormat == ELFTarget::ELF64LE)
729-
return writeELFBinaryToFile<ELF64LE>(FilePath, Stub, WriteIfChanged);
714+
return writeELFBinaryToFile<ELF64LE>(FilePath, Stub);
730715
if (OutputFormat == ELFTarget::ELF64BE)
731-
return writeELFBinaryToFile<ELF64BE>(FilePath, Stub, WriteIfChanged);
716+
return writeELFBinaryToFile<ELF64BE>(FilePath, Stub);
732717
llvm_unreachable("invalid binary output target");
733718
}
734719

llvm/test/tools/llvm-elfabi/preserve-dates-stub.test

-19
This file was deleted.

llvm/test/tools/llvm-elfabi/preserve-dates-tbe.test

-8
This file was deleted.

llvm/tools/llvm-elfabi/llvm-elfabi.cpp

+9-24
Original file line numberDiff line numberDiff line change
@@ -57,37 +57,22 @@ cl::opt<ELFTarget> BinaryOutputTarget(
5757
clEnumValN(ELFTarget::ELF64BE, "elf64-big",
5858
"64-bit big-endian ELF stub")));
5959
cl::opt<std::string> BinaryOutputFilePath(cl::Positional, cl::desc("output"));
60-
cl::opt<bool> WriteIfChanged(
61-
"write-if-changed",
62-
cl::desc("Write the output file only if it is new or has changed."));
6360

6461
/// writeTBE() writes a Text-Based ELF stub to a file using the latest version
6562
/// of the YAML parser.
6663
static Error writeTBE(StringRef FilePath, ELFStub &Stub) {
67-
// Write TBE to memory first.
68-
std::string TBEStr;
69-
raw_string_ostream OutStr(TBEStr);
70-
Error YAMLErr = writeTBEToOutputStream(OutStr, Stub);
71-
if (YAMLErr)
72-
return YAMLErr;
73-
OutStr.flush();
74-
75-
if (WriteIfChanged) {
76-
if (ErrorOr<std::unique_ptr<MemoryBuffer>> BufOrError =
77-
MemoryBuffer::getFile(FilePath)) {
78-
// Compare TBE output with existing TBE file.
79-
// If TBE file unchanged, abort updating.
80-
if ((*BufOrError)->getBuffer() == TBEStr)
81-
return Error::success();
82-
}
83-
}
84-
// Open TBE file for writing.
8564
std::error_code SysErr;
65+
66+
// Open file for writing.
8667
raw_fd_ostream Out(FilePath, SysErr);
8768
if (SysErr)
8869
return createStringError(SysErr, "Couldn't open `%s` for writing",
8970
FilePath.data());
90-
Out << TBEStr;
71+
// Write file.
72+
Error YAMLErr = writeTBEToOutputStream(Out, Stub);
73+
if (YAMLErr)
74+
return YAMLErr;
75+
9176
return Error::success();
9277
}
9378

@@ -168,8 +153,8 @@ int main(int argc, char *argv[]) {
168153
if (BinaryOutputTarget.getNumOccurrences() == 0)
169154
fatalError(createStringError(errc::not_supported,
170155
"no binary output target specified."));
171-
Error BinaryWriteError = writeBinaryStub(
172-
BinaryOutputFilePath, *TargetStub, BinaryOutputTarget, WriteIfChanged);
156+
Error BinaryWriteError =
157+
writeBinaryStub(BinaryOutputFilePath, *TargetStub, BinaryOutputTarget);
173158
if (BinaryWriteError)
174159
fatalError(std::move(BinaryWriteError));
175160
}

0 commit comments

Comments
 (0)