diff options
Diffstat (limited to 'llvm/tools/llvm-objcopy')
-rw-r--r-- | llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp | 72 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/MachO/MachOObjcopy.h | 4 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/llvm-objcopy.cpp | 26 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/llvm-objcopy.h | 32 |
4 files changed, 3 insertions, 131 deletions
diff --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp index 28b4ec6..47a08d3 100644 --- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp +++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.cpp @@ -8,13 +8,9 @@ #include "MachOObjcopy.h" #include "../CopyConfig.h" -#include "../llvm-objcopy.h" #include "MachOReader.h" #include "MachOWriter.h" #include "llvm/ADT/DenseSet.h" -#include "llvm/Object/ArchiveWriter.h" -#include "llvm/Object/MachOUniversal.h" -#include "llvm/Object/MachOUniversalWriter.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Error.h" @@ -390,74 +386,6 @@ Error executeObjcopyOnBinary(const CopyConfig &Config, return Writer.write(); } -Error executeObjcopyOnMachOUniversalBinary(CopyConfig &Config, - const MachOUniversalBinary &In, - Buffer &Out) { - SmallVector<OwningBinary<Binary>, 2> Binaries; - SmallVector<Slice, 2> Slices; - for (const auto &O : In.objects()) { - Expected<std::unique_ptr<Archive>> ArOrErr = O.getAsArchive(); - if (ArOrErr) { - Expected<std::vector<NewArchiveMember>> NewArchiveMembersOrErr = - createNewArchiveMembers(Config, **ArOrErr); - if (!NewArchiveMembersOrErr) - return NewArchiveMembersOrErr.takeError(); - Expected<std::unique_ptr<MemoryBuffer>> OutputBufferOrErr = - writeArchiveToBuffer(*NewArchiveMembersOrErr, - (*ArOrErr)->hasSymbolTable(), (*ArOrErr)->kind(), - Config.DeterministicArchives, - (*ArOrErr)->isThin()); - if (!OutputBufferOrErr) - return OutputBufferOrErr.takeError(); - Expected<std::unique_ptr<Binary>> BinaryOrErr = - object::createBinary(**OutputBufferOrErr); - if (!BinaryOrErr) - return BinaryOrErr.takeError(); - Binaries.emplace_back(std::move(*BinaryOrErr), - std::move(*OutputBufferOrErr)); - Slices.emplace_back(*cast<Archive>(Binaries.back().getBinary()), - O.getCPUType(), O.getCPUSubType(), - O.getArchFlagName(), O.getAlign()); - continue; - } - // The methods getAsArchive, getAsObjectFile, getAsIRObject of the class - // ObjectForArch return an Error in case of the type mismatch. We need to - // check each in turn to see what kind of slice this is, so ignore errors - // produced along the way. - consumeError(ArOrErr.takeError()); - - Expected<std::unique_ptr<MachOObjectFile>> ObjOrErr = O.getAsObjectFile(); - if (!ObjOrErr) { - consumeError(ObjOrErr.takeError()); - return createStringError(std::errc::invalid_argument, - "slice for '%s' of the universal Mach-O binary " - "'%s' is not a Mach-O object or an archive", - O.getArchFlagName().c_str(), - Config.InputFilename.str().c_str()); - } - MemBuffer MB(O.getArchFlagName()); - if (Error E = executeObjcopyOnBinary(Config, **ObjOrErr, MB)) - return E; - std::unique_ptr<WritableMemoryBuffer> OutputBuffer = - MB.releaseMemoryBuffer(); - Expected<std::unique_ptr<Binary>> BinaryOrErr = - object::createBinary(*OutputBuffer); - if (!BinaryOrErr) - return BinaryOrErr.takeError(); - Binaries.emplace_back(std::move(*BinaryOrErr), std::move(OutputBuffer)); - Slices.emplace_back(*cast<MachOObjectFile>(Binaries.back().getBinary()), - O.getAlign()); - } - Expected<std::unique_ptr<MemoryBuffer>> B = - writeUniversalBinaryToBuffer(Slices); - if (!B) - return B.takeError(); - if (Error E = Out.allocate((*B)->getBufferSize())) - return E; - memcpy(Out.getBufferStart(), (*B)->getBufferStart(), (*B)->getBufferSize()); - return Out.commit(); -} - } // end namespace macho } // end namespace objcopy } // end namespace llvm diff --git a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.h b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.h index c3f5391..f34e361 100644 --- a/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.h +++ b/llvm/tools/llvm-objcopy/MachO/MachOObjcopy.h @@ -24,10 +24,6 @@ class Buffer; namespace macho { Error executeObjcopyOnBinary(const CopyConfig &Config, object::MachOObjectFile &In, Buffer &Out); - -Error executeObjcopyOnMachOUniversalBinary( - CopyConfig &Config, const object::MachOUniversalBinary &In, Buffer &Out); - } // end namespace macho } // end namespace objcopy } // end namespace llvm diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp index 8cd5857..175f292 100644 --- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp +++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp @@ -25,7 +25,6 @@ #include "llvm/Object/ELFTypes.h" #include "llvm/Object/Error.h" #include "llvm/Object/MachO.h" -#include "llvm/Object/MachOUniversal.h" #include "llvm/Object/Wasm.h" #include "llvm/Option/Arg.h" #include "llvm/Option/ArgList.h" @@ -145,10 +144,6 @@ static Error executeObjcopyOnBinary(CopyConfig &Config, object::Binary &In, return coff::executeObjcopyOnBinary(Config, *COFFBinary, Out); else if (auto *MachOBinary = dyn_cast<object::MachOObjectFile>(&In)) return macho::executeObjcopyOnBinary(Config, *MachOBinary, Out); - else if (auto *MachOUniversalBinary = - dyn_cast<object::MachOUniversalBinary>(&In)) - return macho::executeObjcopyOnMachOUniversalBinary( - Config, *MachOUniversalBinary, Out); else if (auto *WasmBinary = dyn_cast<object::WasmObjectFile>(&In)) return objcopy::wasm::executeObjcopyOnBinary(Config, *WasmBinary, Out); else @@ -156,11 +151,7 @@ static Error executeObjcopyOnBinary(CopyConfig &Config, object::Binary &In, "unsupported object file format"); } -namespace llvm { -namespace objcopy { - -Expected<std::vector<NewArchiveMember>> -createNewArchiveMembers(CopyConfig &Config, const Archive &Ar) { +static Error executeObjcopyOnArchive(CopyConfig &Config, const Archive &Ar) { std::vector<NewArchiveMember> NewArchiveMembers; Error Err = Error::success(); for (const Archive::Child &Child : Ar.children(Err)) { @@ -175,7 +166,7 @@ createNewArchiveMembers(CopyConfig &Config, const Archive &Ar) { MemBuffer MB(ChildNameOrErr.get()); if (Error E = executeObjcopyOnBinary(Config, *ChildOrErr->get(), MB)) - return std::move(E); + return E; Expected<NewArchiveMember> Member = NewArchiveMember::getOldMember(Child, Config.DeterministicArchives); @@ -187,19 +178,8 @@ createNewArchiveMembers(CopyConfig &Config, const Archive &Ar) { } if (Err) return createFileError(Config.InputFilename, std::move(Err)); - return NewArchiveMembers; -} - -} // end namespace objcopy -} // end namespace llvm -static Error executeObjcopyOnArchive(CopyConfig &Config, - const object::Archive &Ar) { - Expected<std::vector<NewArchiveMember>> NewArchiveMembersOrErr = - createNewArchiveMembers(Config, Ar); - if (!NewArchiveMembersOrErr) - return NewArchiveMembersOrErr.takeError(); - return deepWriteArchive(Config.OutputFilename, *NewArchiveMembersOrErr, + return deepWriteArchive(Config.OutputFilename, NewArchiveMembers, Ar.hasSymbolTable(), Ar.kind(), Config.DeterministicArchives, Ar.isThin()); } diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.h b/llvm/tools/llvm-objcopy/llvm-objcopy.h deleted file mode 100644 index 97a1667..0000000 --- a/llvm/tools/llvm-objcopy/llvm-objcopy.h +++ /dev/null @@ -1,32 +0,0 @@ -//===- llvm-objcopy.h -------------------------------------------*- C++ -*-===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_TOOLS_OBJCOPY_OBJCOPY_H -#define LLVM_TOOLS_OBJCOPY_OBJCOPY_H - -#include "llvm/Support/Error.h" - -namespace llvm { - -struct NewArchiveMember; - -namespace object { - -class Archive; - -} // end namespace object - -namespace objcopy { -struct CopyConfig; -Expected<std::vector<NewArchiveMember>> -createNewArchiveMembers(CopyConfig &Config, const object::Archive &Ar); - -} // end namespace objcopy -} // end namespace llvm - -#endif // LLVM_TOOLS_OBJCOPY_OBJCOPY_H |