diff options
author | Alexander Shaposhnikov <alexshap@fb.com> | 2020-09-25 16:02:23 -0700 |
---|---|---|
committer | Alexander Shaposhnikov <alexshap@fb.com> | 2020-09-25 16:27:45 -0700 |
commit | 97702c3d9234ddc7dd39d4d107c8bec8765746ce (patch) | |
tree | d9af7724b5104d6da26c1f5b77ee3fc8353abb96 | |
parent | b5f46534c4dd5ac32bc3b63685de1d66eec96595 (diff) | |
download | llvm-97702c3d9234ddc7dd39d4d107c8bec8765746ce.zip llvm-97702c3d9234ddc7dd39d4d107c8bec8765746ce.tar.gz llvm-97702c3d9234ddc7dd39d4d107c8bec8765746ce.tar.bz2 |
[Object][MachO] Refine the interface of Slice
This patch performs a minor cleanup of the class Slice:
static methods and constructors which take a pointer but assume that
it's not null now take the argument by reference.
NFC.
Test plan: make check-all
Differential revision: https://reviews.llvm.org/D88320
-rw-r--r-- | llvm/include/llvm/Object/MachOUniversalWriter.h | 6 | ||||
-rw-r--r-- | llvm/lib/Object/MachOUniversalWriter.cpp | 28 | ||||
-rw-r--r-- | llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-lipo/llvm-lipo.cpp | 31 |
4 files changed, 32 insertions, 35 deletions
diff --git a/llvm/include/llvm/Object/MachOUniversalWriter.h b/llvm/include/llvm/Object/MachOUniversalWriter.h index 643b70e..5a94edb 100644 --- a/llvm/include/llvm/Object/MachOUniversalWriter.h +++ b/llvm/include/llvm/Object/MachOUniversalWriter.h @@ -35,7 +35,7 @@ class Slice { // file size can be calculated before creating the output buffer. uint32_t P2Alignment; - Slice(const IRObjectFile *IRO, uint32_t CPUType, uint32_t CPUSubType, + Slice(const IRObjectFile &IRO, uint32_t CPUType, uint32_t CPUSubType, std::string ArchName, uint32_t Align); public: @@ -43,10 +43,10 @@ public: Slice(const MachOObjectFile &O, uint32_t Align); - static Expected<Slice> create(const Archive *A, + static Expected<Slice> create(const Archive &A, LLVMContext *LLVMCtx = nullptr); - static Expected<Slice> create(const IRObjectFile *IRO, uint32_t Align); + static Expected<Slice> create(const IRObjectFile &IRO, uint32_t Align); void setP2Alignment(uint32_t Align) { P2Alignment = Align; } diff --git a/llvm/lib/Object/MachOUniversalWriter.cpp b/llvm/lib/Object/MachOUniversalWriter.cpp index 35db26a..2d7bb436 100644 --- a/llvm/lib/Object/MachOUniversalWriter.cpp +++ b/llvm/lib/Object/MachOUniversalWriter.cpp @@ -81,9 +81,9 @@ Slice::Slice(const MachOObjectFile &O, uint32_t Align) ArchName(std::string(O.getArchTriple().getArchName())), P2Alignment(Align) {} -Slice::Slice(const IRObjectFile *IRO, uint32_t CPUType, uint32_t CPUSubType, +Slice::Slice(const IRObjectFile &IRO, uint32_t CPUType, uint32_t CPUSubType, std::string ArchName, uint32_t Align) - : B(IRO), CPUType(CPUType), CPUSubType(CPUSubType), + : B(&IRO), CPUType(CPUType), CPUSubType(CPUSubType), ArchName(std::move(ArchName)), P2Alignment(Align) {} Slice::Slice(const MachOObjectFile &O) : Slice(O, calculateAlignment(O)) {} @@ -105,14 +105,14 @@ static Expected<MachoCPUTy> getMachoCPUFromTriple(StringRef TT) { return getMachoCPUFromTriple(Triple{TT}); } -Expected<Slice> Slice::create(const Archive *A, LLVMContext *LLVMCtx) { +Expected<Slice> Slice::create(const Archive &A, LLVMContext *LLVMCtx) { Error Err = Error::success(); std::unique_ptr<MachOObjectFile> MFO = nullptr; std::unique_ptr<IRObjectFile> IRFO = nullptr; - for (const Archive::Child &Child : A->children(Err)) { + for (const Archive::Child &Child : A.children(Err)) { Expected<std::unique_ptr<Binary>> ChildOrErr = Child.getAsBinary(LLVMCtx); if (!ChildOrErr) - return createFileError(A->getFileName(), ChildOrErr.takeError()); + return createFileError(A.getFileName(), ChildOrErr.takeError()); Binary *Bin = ChildOrErr.get().get(); if (Bin->isMachOUniversalBinary()) return createStringError(std::errc::invalid_argument, @@ -191,32 +191,32 @@ Expected<Slice> Slice::create(const Archive *A, LLVMContext *LLVMCtx) { .c_str()); } if (Err) - return createFileError(A->getFileName(), std::move(Err)); + return createFileError(A.getFileName(), std::move(Err)); if (!MFO && !IRFO) return createStringError( std::errc::invalid_argument, ("empty archive with no architecture specification: " + - A->getFileName() + " (can't determine architecture for it)") + A.getFileName() + " (can't determine architecture for it)") .str() .c_str()); if (MFO) { Slice ArchiveSlice(*(MFO.get()), MFO->is64Bit() ? 3 : 2); - ArchiveSlice.B = A; + ArchiveSlice.B = &A; return ArchiveSlice; } // For IR objects - Expected<Slice> ArchiveSliceOrErr = Slice::create(IRFO.get(), 0); + Expected<Slice> ArchiveSliceOrErr = Slice::create(*IRFO, 0); if (!ArchiveSliceOrErr) - return createFileError(A->getFileName(), ArchiveSliceOrErr.takeError()); + return createFileError(A.getFileName(), ArchiveSliceOrErr.takeError()); auto &ArchiveSlice = ArchiveSliceOrErr.get(); - ArchiveSlice.B = A; - return Slice{std::move(ArchiveSlice)}; + ArchiveSlice.B = &A; + return std::move(ArchiveSlice); } -Expected<Slice> Slice::create(const IRObjectFile *IRO, uint32_t Align) { - Expected<MachoCPUTy> CPUOrErr = getMachoCPUFromTriple(IRO->getTargetTriple()); +Expected<Slice> Slice::create(const IRObjectFile &IRO, uint32_t Align) { + Expected<MachoCPUTy> CPUOrErr = getMachoCPUFromTriple(IRO.getTargetTriple()); if (!CPUOrErr) return CPUOrErr.takeError(); unsigned CPUType, CPUSubType; diff --git a/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp b/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp index 5a7608d..3a08d18 100644 --- a/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp +++ b/llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp @@ -377,7 +377,7 @@ buildSlices(ArrayRef<OwningBinary<Archive>> OutputBinaries) { SmallVector<Slice, 2> Slices; for (const auto &OB : OutputBinaries) { - const Archive *A = OB.getBinary(); + const Archive &A = *OB.getBinary(); Expected<Slice> ArchiveSlice = Slice::create(A); if (!ArchiveSlice) return ArchiveSlice.takeError(); diff --git a/llvm/tools/llvm-lipo/llvm-lipo.cpp b/llvm/tools/llvm-lipo/llvm-lipo.cpp index 82d476f..6761f99 100644 --- a/llvm/tools/llvm-lipo/llvm-lipo.cpp +++ b/llvm/tools/llvm-lipo/llvm-lipo.cpp @@ -118,17 +118,17 @@ struct Config { LipoAction ActionToPerform; }; -static Slice createSliceFromArchive(const Archive *A) { +static Slice createSliceFromArchive(const Archive &A) { Expected<Slice> ArchiveOrSlice = Slice::create(A, &LLVMCtx); if (!ArchiveOrSlice) - reportError(A->getFileName(), ArchiveOrSlice.takeError()); + reportError(A.getFileName(), ArchiveOrSlice.takeError()); return *ArchiveOrSlice; } -static Slice createSliceFromIR(const IRObjectFile *IRO, unsigned Align) { +static Slice createSliceFromIR(const IRObjectFile &IRO, unsigned Align) { Expected<Slice> IROrErr = Slice::create(IRO, Align); if (!IROrErr) - reportError(IRO->getFileName(), IROrErr.takeError()); + reportError(IRO.getFileName(), IROrErr.takeError()); return *IROrErr; } @@ -331,8 +331,8 @@ readInputBinaries(ArrayRef<InputFile> InputFiles) { const auto S = B->isMachO() ? Slice(*cast<MachOObjectFile>(B)) : B->isArchive() - ? createSliceFromArchive(cast<Archive>(B)) - : createSliceFromIR(cast<IRObjectFile>(B), 0); + ? createSliceFromArchive(*cast<Archive>(B)) + : createSliceFromIR(*cast<IRObjectFile>(B), 0); const auto SpecifiedCPUType = MachO::getCPUTypeFromArchitecture( MachO::getArchitectureFromName( Triple(*IF.ArchType).getArchName())) @@ -396,8 +396,7 @@ static void printBinaryArchs(const Binary *Binary, raw_ostream &OS) { O.getAsIRObject(LLVMCtx); if (IROrError) { consumeError(MachOObjOrError.takeError()); - Expected<Slice> SliceOrErr = - Slice::create(IROrError->get(), O.getAlign()); + Expected<Slice> SliceOrErr = Slice::create(**IROrError, O.getAlign()); if (!SliceOrErr) { reportError(Binary->getFileName(), SliceOrErr.takeError()); continue; @@ -409,8 +408,7 @@ static void printBinaryArchs(const Binary *Binary, raw_ostream &OS) { if (ArchiveOrError) { consumeError(MachOObjOrError.takeError()); consumeError(IROrError.takeError()); - OS << createSliceFromArchive(ArchiveOrError->get()).getArchString() - << " "; + OS << createSliceFromArchive(**ArchiveOrError).getArchString() << " "; continue; } consumeError(ArchiveOrError.takeError()); @@ -428,7 +426,7 @@ static void printBinaryArchs(const Binary *Binary, raw_ostream &OS) { // This should be always the case, as this is tested in readInputBinaries const auto *IR = cast<IRObjectFile>(Binary); - Expected<Slice> SliceOrErr = createSliceFromIR(IR, 0); + Expected<Slice> SliceOrErr = createSliceFromIR(*IR, 0); if (!SliceOrErr) reportError(IR->getFileName(), SliceOrErr.takeError()); @@ -575,21 +573,20 @@ buildSlices(ArrayRef<OwningBinary<Binary>> InputBinaries, O.getAsIRObject(LLVMCtx); if (IROrError) { consumeError(BinaryOrError.takeError()); - Slice S = createSliceFromIR( - static_cast<IRObjectFile *>(IROrError.get().get()), O.getAlign()); + Slice S = createSliceFromIR(**IROrError, O.getAlign()); ExtractedObjects.emplace_back(std::move(IROrError.get())); Slices.emplace_back(std::move(S)); continue; } reportError(InputBinary->getFileName(), BinaryOrError.takeError()); } - } else if (auto O = dyn_cast<MachOObjectFile>(InputBinary)) { + } else if (const auto *O = dyn_cast<MachOObjectFile>(InputBinary)) { Slices.emplace_back(*O); - } else if (auto A = dyn_cast<Archive>(InputBinary)) { - Slices.push_back(createSliceFromArchive(A)); + } else if (const auto *A = dyn_cast<Archive>(InputBinary)) { + Slices.push_back(createSliceFromArchive(*A)); } else if (const auto *IRO = dyn_cast<IRObjectFile>(InputBinary)) { // Original Apple's lipo set the alignment to 0 - Expected<Slice> SliceOrErr = Slice::create(IRO, 0); + Expected<Slice> SliceOrErr = Slice::create(*IRO, 0); if (!SliceOrErr) { reportError(InputBinary->getFileName(), SliceOrErr.takeError()); continue; |