diff options
Diffstat (limited to 'llvm/tools/llvm-objcopy')
-rw-r--r-- | llvm/tools/llvm-objcopy/CMakeLists.txt | 3 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/llvm-objcopy.cpp | 6 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/wasm/Object.h | 39 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/wasm/Reader.cpp | 33 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/wasm/Reader.h | 31 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/wasm/WasmObjcopy.cpp | 65 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/wasm/WasmObjcopy.h | 31 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/wasm/Writer.cpp | 78 | ||||
-rw-r--r-- | llvm/tools/llvm-objcopy/wasm/Writer.h | 50 |
9 files changed, 1 insertions, 335 deletions
diff --git a/llvm/tools/llvm-objcopy/CMakeLists.txt b/llvm/tools/llvm-objcopy/CMakeLists.txt index b3706bc..6d4048f 100644 --- a/llvm/tools/llvm-objcopy/CMakeLists.txt +++ b/llvm/tools/llvm-objcopy/CMakeLists.txt @@ -33,9 +33,6 @@ add_llvm_tool(llvm-objcopy MachO/MachOWriter.cpp MachO/MachOLayoutBuilder.cpp MachO/Object.cpp - wasm/Reader.cpp - wasm/Writer.cpp - wasm/WasmObjcopy.cpp DEPENDS ObjcopyOptsTableGen InstallNameToolOptsTableGen diff --git a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp index 61efc74..e662f35 100644 --- a/llvm/tools/llvm-objcopy/llvm-objcopy.cpp +++ b/llvm/tools/llvm-objcopy/llvm-objcopy.cpp @@ -8,11 +8,10 @@ #include "llvm-objcopy.h" #include "Buffer.h" -#include "COFF/COFFObjcopy.h" #include "CopyConfig.h" #include "ELF/ELFObjcopy.h" +#include "COFF/COFFObjcopy.h" #include "MachO/MachOObjcopy.h" -#include "wasm/WasmObjcopy.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/SmallVector.h" @@ -26,7 +25,6 @@ #include "llvm/Object/ELFTypes.h" #include "llvm/Object/Error.h" #include "llvm/Object/MachO.h" -#include "llvm/Object/Wasm.h" #include "llvm/Option/Arg.h" #include "llvm/Option/ArgList.h" #include "llvm/Option/Option.h" @@ -174,8 +172,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 *WasmBinary = dyn_cast<object::WasmObjectFile>(&In)) - return objcopy::wasm::executeObjcopyOnBinary(Config, *WasmBinary, Out); else return createStringError(object_error::invalid_file_type, "unsupported object file format"); diff --git a/llvm/tools/llvm-objcopy/wasm/Object.h b/llvm/tools/llvm-objcopy/wasm/Object.h deleted file mode 100644 index 78a43be..0000000 --- a/llvm/tools/llvm-objcopy/wasm/Object.h +++ /dev/null @@ -1,39 +0,0 @@ -//===- Object.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_LLVM_OBJCOPY_WASM_OBJECT_H -#define LLVM_TOOLS_LLVM_OBJCOPY_WASM_OBJECT_H - -#include "llvm/ADT/ArrayRef.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/Object/Wasm.h" -#include <vector> - -namespace llvm { -namespace objcopy { -namespace wasm { - -struct Section { - // For now, each section is only an opaque binary blob with no distinction - // between custom and known sections. - uint8_t SectionType; - StringRef Name; - ArrayRef<uint8_t> Contents; -}; - -struct Object { - llvm::wasm::WasmObjectHeader Header; - // For now don't discriminate between kinds of sections. - std::vector<Section> Sections; -}; - -} // end namespace wasm -} // end namespace objcopy -} // end namespace llvm - -#endif // LLVM_TOOLS_LLVM_OBJCOPY_WASM_OBJECT_H diff --git a/llvm/tools/llvm-objcopy/wasm/Reader.cpp b/llvm/tools/llvm-objcopy/wasm/Reader.cpp deleted file mode 100644 index 13fa84a..0000000 --- a/llvm/tools/llvm-objcopy/wasm/Reader.cpp +++ /dev/null @@ -1,33 +0,0 @@ -//===- Reader.cpp ---------------------------------------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -#include "Reader.h" - -namespace llvm { -namespace objcopy { -namespace wasm { - -using namespace object; -using namespace llvm::wasm; - -Expected<std::unique_ptr<Object>> Reader::create() const { - auto Obj = std::make_unique<Object>(); - Obj->Header = WasmObj.getHeader(); - std::vector<Section> Sections; - Obj->Sections.reserve(WasmObj.getNumSections()); - for (const SectionRef &Sec : WasmObj.sections()) { - const WasmSection &WS = WasmObj.getWasmSection(Sec); - Obj->Sections.push_back( - {static_cast<uint8_t>(WS.Type), WS.Name, WS.Content}); - } - return std::move(Obj); -} - -} // end namespace wasm -} // end namespace objcopy -} // end namespace llvm diff --git a/llvm/tools/llvm-objcopy/wasm/Reader.h b/llvm/tools/llvm-objcopy/wasm/Reader.h deleted file mode 100644 index 2dcf7dd..0000000 --- a/llvm/tools/llvm-objcopy/wasm/Reader.h +++ /dev/null @@ -1,31 +0,0 @@ -//===- Reader.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_LLVM_OBJCOPY_WASM_READER_H -#define LLVM_TOOLS_LLVM_OBJCOPY_WASM_READER_H - -#include "Object.h" - -namespace llvm { -namespace objcopy { -namespace wasm { - -class Reader { -public: - explicit Reader(const object::WasmObjectFile &O) : WasmObj(O) {} - Expected<std::unique_ptr<Object>> create() const; - -private: - const object::WasmObjectFile &WasmObj; -}; - -} // end namespace wasm -} // end namespace objcopy -} // end namespace llvm - -#endif // LLVM_TOOLS_LLVM_OBJCOPY_WASM_READER_H diff --git a/llvm/tools/llvm-objcopy/wasm/WasmObjcopy.cpp b/llvm/tools/llvm-objcopy/wasm/WasmObjcopy.cpp deleted file mode 100644 index 41816a0..0000000 --- a/llvm/tools/llvm-objcopy/wasm/WasmObjcopy.cpp +++ /dev/null @@ -1,65 +0,0 @@ -//===- WasmObjcopy.cpp ----------------------------------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -#include "WasmObjcopy.h" -#include "Buffer.h" -#include "CopyConfig.h" -#include "Object.h" -#include "Reader.h" -#include "Writer.h" -#include "llvm-objcopy.h" -#include "llvm/Support/Errc.h" - -namespace llvm { -namespace objcopy { -namespace wasm { - -using namespace object; - -static Error handleArgs(const CopyConfig &Config, Object &Obj) { - if (!Config.AddGnuDebugLink.empty() || !Config.BuildIdLinkDir.empty() || - Config.BuildIdLinkInput || Config.BuildIdLinkOutput || - Config.ExtractPartition || !Config.SplitDWO.empty() || - !Config.SymbolsPrefix.empty() || !Config.AllocSectionsPrefix.empty() || - Config.DiscardMode != DiscardType::None || Config.NewSymbolVisibility || - !Config.SymbolsToAdd.empty() || !Config.RPathToAdd.empty() || - !Config.OnlySection.empty() || !Config.SymbolsToGlobalize.empty() || - !Config.SymbolsToKeep.empty() || !Config.SymbolsToLocalize.empty() || - !Config.SymbolsToRemove.empty() || - !Config.UnneededSymbolsToRemove.empty() || - !Config.SymbolsToWeaken.empty() || !Config.SymbolsToKeepGlobal.empty() || - !Config.SectionsToRename.empty() || !Config.SetSectionAlignment.empty() || - !Config.SetSectionFlags.empty() || !Config.SymbolsToRename.empty() || - !Config.ToRemove.empty() || !Config.DumpSection.empty() || - !Config.AddSection.empty()) { - return createStringError( - llvm::errc::invalid_argument, - "no flags are supported yet, only basic copying is allowed"); - } - return Error::success(); -} - -Error executeObjcopyOnBinary(const CopyConfig &Config, - object::WasmObjectFile &In, Buffer &Out) { - Reader TheReader(In); - Expected<std::unique_ptr<Object>> ObjOrErr = TheReader.create(); - if (!ObjOrErr) - return createFileError(Config.InputFilename, ObjOrErr.takeError()); - Object *Obj = ObjOrErr->get(); - assert(Obj && "Unable to deserialize Wasm object"); - if (Error E = handleArgs(Config, *Obj)) - return createFileError(Config.InputFilename, std::move(E)); - Writer TheWriter(*Obj, Out); - if (Error E = TheWriter.write()) - return createFileError(Config.OutputFilename, std::move(E)); - return Error::success(); -} - -} // end namespace wasm -} // end namespace objcopy -} // end namespace llvm diff --git a/llvm/tools/llvm-objcopy/wasm/WasmObjcopy.h b/llvm/tools/llvm-objcopy/wasm/WasmObjcopy.h deleted file mode 100644 index 3557d5c..0000000 --- a/llvm/tools/llvm-objcopy/wasm/WasmObjcopy.h +++ /dev/null @@ -1,31 +0,0 @@ -//===- WasmObjcopy.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_LLVM_OBJCOPY_WASM_WASMOBJCOPY_H -#define LLVM_TOOLS_LLVM_OBJCOPY_WASM_WASMOBJCOPY_H - -namespace llvm { -class Error; - -namespace object { -class WasmObjectFile; -} // end namespace object - -namespace objcopy { -struct CopyConfig; -class Buffer; - -namespace wasm { -Error executeObjcopyOnBinary(const CopyConfig &Config, - object::WasmObjectFile &In, Buffer &Out); - -} // end namespace wasm -} // end namespace objcopy -} // end namespace llvm - -#endif // LLVM_TOOLS_LLVM_OBJCOPY_WASM_WASMOBJCOPY_H diff --git a/llvm/tools/llvm-objcopy/wasm/Writer.cpp b/llvm/tools/llvm-objcopy/wasm/Writer.cpp deleted file mode 100644 index f3ceef0..0000000 --- a/llvm/tools/llvm-objcopy/wasm/Writer.cpp +++ /dev/null @@ -1,78 +0,0 @@ -//===- Writer.cpp ---------------------------------------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -#include "Writer.h" - -#include "llvm/BinaryFormat/Wasm.h" -#include "llvm/Support/LEB128.h" -#include "llvm/Support/raw_ostream.h" - -namespace llvm { -namespace objcopy { -namespace wasm { - -using namespace object; -using namespace llvm::wasm; - -Writer::SectionHeader Writer::createSectionHeader(const Section &S, - size_t &SectionSize) { - SectionHeader Header; - raw_svector_ostream OS(Header); - OS << S.SectionType; - bool HasName = S.SectionType == WASM_SEC_CUSTOM; - SectionSize = S.Contents.size(); - if (HasName) - SectionSize += getULEB128Size(S.Name.size()) + S.Name.size(); - // Pad the LEB value out to 5 bytes to make it a predictable size, and - // match the behavior of clang. - encodeULEB128(SectionSize, OS, 5); - if (HasName) { - encodeULEB128(S.Name.size(), OS); - OS << S.Name; - } - // Total section size is the content size plus 1 for the section type and - // 5 for the LEB-encoded size. - SectionSize = SectionSize + 1 + 5; - return Header; -} - -size_t Writer::finalize() { - size_t ObjectSize = sizeof(WasmMagic) + sizeof(WasmVersion); - SectionHeaders.reserve(Obj.Sections.size()); - // Finalize the headers of each section so we know the total size. - for (const Section &S : Obj.Sections) { - size_t SectionSize; - SectionHeaders.push_back(createSectionHeader(S, SectionSize)); - ObjectSize += SectionSize; - } - return ObjectSize; -} - -Error Writer::write() { - size_t FileSize = finalize(); - if (Error E = Buf.allocate(FileSize)) - return E; - - // Write the header. - uint8_t *Ptr = Buf.getBufferStart(); - Ptr = std::copy(Obj.Header.Magic.begin(), Obj.Header.Magic.end(), Ptr); - memcpy(Ptr, &Obj.Header.Version, sizeof(Obj.Header.Version)); - Ptr += sizeof(Obj.Header.Version); - - // Write each section. - for (size_t I = 0, S = SectionHeaders.size(); I < S; ++I) { - Ptr = std::copy(SectionHeaders[I].begin(), SectionHeaders[I].end(), Ptr); - ArrayRef<uint8_t> Contents = Obj.Sections[I].Contents; - Ptr = std::copy(Contents.begin(), Contents.end(), Ptr); - } - return Buf.commit(); -} - -} // end namespace wasm -} // end namespace objcopy -} // end namespace llvm diff --git a/llvm/tools/llvm-objcopy/wasm/Writer.h b/llvm/tools/llvm-objcopy/wasm/Writer.h deleted file mode 100644 index da48ee7..0000000 --- a/llvm/tools/llvm-objcopy/wasm/Writer.h +++ /dev/null @@ -1,50 +0,0 @@ -//===- Writer.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_LLVM_OBJCOPY_WASM_WRITER_H -#define LLVM_TOOLS_LLVM_OBJCOPY_WASM_WRITER_H - -#include "Buffer.h" -#include "Object.h" -#include <cstdint> -#include <vector> - -namespace llvm { -namespace objcopy { -namespace wasm { - -class Writer { -public: - Writer(Object &Obj, Buffer &Buf) : Obj(Obj), Buf(Buf) {} - Error write(); - -private: - using SectionHeader = SmallVector<char, 8>; - Object &Obj; - Buffer &Buf; - std::vector<SectionHeader> SectionHeaders; - - /// Generate a wasm section section header for S. - /// The header consists of - /// * A one-byte section ID (aka the section type). - /// * The size of the section contents, encoded as ULEB128. - /// * If the section is a custom section (type 0) it also has a name, which is - /// encoded as a length-prefixed string. The encoded section size *includes* - /// this string. - /// See https://webassembly.github.io/spec/core/binary/modules.html#sections - /// Return the header and store the total size in SectionSize. - static SectionHeader createSectionHeader(const Section &S, - size_t &SectionSize); - size_t finalize(); -}; - -} // end namespace wasm -} // end namespace objcopy -} // end namespace llvm - -#endif // LLVM_TOOLS_LLVM_OBJCOPY_WASM_WRITER_H |