diff options
Diffstat (limited to 'lld/lib/ReaderWriter')
20 files changed, 22 insertions, 165 deletions
diff --git a/lld/lib/ReaderWriter/CMakeLists.txt b/lld/lib/ReaderWriter/CMakeLists.txt index 5aa2c2eb223..9b9102b5d63 100644 --- a/lld/lib/ReaderWriter/CMakeLists.txt +++ b/lld/lib/ReaderWriter/CMakeLists.txt @@ -12,11 +12,10 @@ add_llvm_library(lldReaderWriter CoreLinkingContext.cpp FileArchive.cpp LinkerScript.cpp - Reader.cpp - Writer.cpp - FileArchive.cpp LINK_LIBS lldCore + lldPasses + lldYAML LLVMObject LLVMSupport ) diff --git a/lld/lib/ReaderWriter/ELF/ELFReader.h b/lld/lib/ReaderWriter/ELF/ELFReader.h index 08aa7174318..58e2bcc90c2 100644 --- a/lld/lib/ReaderWriter/ELF/ELFReader.h +++ b/lld/lib/ReaderWriter/ELF/ELFReader.h @@ -13,7 +13,7 @@ #include "CreateELF.h" #include "DynamicFile.h" #include "ELFFile.h" -#include "lld/ReaderWriter/Reader.h" +#include "lld/Core/Reader.h" namespace lld { namespace elf { diff --git a/lld/lib/ReaderWriter/ELF/OutputELFWriter.h b/lld/lib/ReaderWriter/ELF/OutputELFWriter.h index c23bd5bf027..46e31461982 100644 --- a/lld/lib/ReaderWriter/ELF/OutputELFWriter.h +++ b/lld/lib/ReaderWriter/ELF/OutputELFWriter.h @@ -16,7 +16,7 @@ #include "lld/Core/Parallel.h" #include "lld/Core/SharedLibraryFile.h" #include "lld/ReaderWriter/ELFLinkingContext.h" -#include "lld/ReaderWriter/Writer.h" +#include "lld/Core/Writer.h" #include "llvm/ADT/StringSet.h" #include "llvm/Support/Path.h" diff --git a/lld/lib/ReaderWriter/ELF/SegmentChunks.h b/lld/lib/ReaderWriter/ELF/SegmentChunks.h index ce563add313..cdee646e904 100644 --- a/lld/lib/ReaderWriter/ELF/SegmentChunks.h +++ b/lld/lib/ReaderWriter/ELF/SegmentChunks.h @@ -15,7 +15,7 @@ #include "SectionChunks.h" #include "Writer.h" #include "lld/Core/range.h" -#include "lld/ReaderWriter/Writer.h" +#include "lld/Core/Writer.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/Object/ELF.h" diff --git a/lld/lib/ReaderWriter/ELF/Writer.cpp b/lld/lib/ReaderWriter/ELF/Writer.cpp index 39b2808b6e7..3071827e07d 100644 --- a/lld/lib/ReaderWriter/ELF/Writer.cpp +++ b/lld/lib/ReaderWriter/ELF/Writer.cpp @@ -7,7 +7,7 @@ // //===----------------------------------------------------------------------===// -#include "lld/ReaderWriter/Writer.h" +#include "lld/Core/Writer.h" #include "DynamicLibraryWriter.h" #include "ExecutableWriter.h" diff --git a/lld/lib/ReaderWriter/ELF/Writer.h b/lld/lib/ReaderWriter/ELF/Writer.h index 08fd5e57d45..1e819467c55 100644 --- a/lld/lib/ReaderWriter/ELF/Writer.h +++ b/lld/lib/ReaderWriter/ELF/Writer.h @@ -11,7 +11,7 @@ #define LLD_READER_WRITER_ELF_WRITER_H #include "lld/Core/File.h" -#include "lld/ReaderWriter/Writer.h" +#include "lld/Core/Writer.h" namespace lld { namespace elf { diff --git a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp index 24e17d0a5cf..9fe16108a56 100644 --- a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp +++ b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp @@ -14,11 +14,11 @@ #include "MachOPasses.h" #include "lld/Core/ArchiveLibraryFile.h" #include "lld/Core/PassManager.h" +#include "lld/Core/Reader.h" +#include "lld/Core/Writer.h" #include "lld/Driver/Driver.h" #include "lld/Passes/LayoutPass.h" #include "lld/Passes/RoundTripYAMLPass.h" -#include "lld/ReaderWriter/Reader.h" -#include "lld/ReaderWriter/Writer.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/Triple.h" #include "llvm/Config/config.h" diff --git a/lld/lib/ReaderWriter/MachO/WriterMachO.cpp b/lld/lib/ReaderWriter/MachO/WriterMachO.cpp index a0e9d434c9a..de1c0e38063 100644 --- a/lld/lib/ReaderWriter/MachO/WriterMachO.cpp +++ b/lld/lib/ReaderWriter/MachO/WriterMachO.cpp @@ -7,10 +7,10 @@ // //===----------------------------------------------------------------------===// -#include "lld/ReaderWriter/Writer.h" #include "ExecutableAtoms.hpp" #include "MachONormalizedFile.h" #include "lld/Core/File.h" +#include "lld/Core/Writer.h" #include "lld/ReaderWriter/MachOLinkingContext.h" #include "llvm/Support/Debug.h" #include "llvm/Support/ErrorHandling.h" diff --git a/lld/lib/ReaderWriter/Native/CMakeLists.txt b/lld/lib/ReaderWriter/Native/CMakeLists.txt index d02ea78822e..e15f3d60e89 100644 --- a/lld/lib/ReaderWriter/Native/CMakeLists.txt +++ b/lld/lib/ReaderWriter/Native/CMakeLists.txt @@ -2,6 +2,6 @@ add_llvm_library(lldNative ReaderNative.cpp WriterNative.cpp LINK_LIBS - lldReaderWriter + lldCore LLVMSupport ) diff --git a/lld/lib/ReaderWriter/Native/Makefile b/lld/lib/ReaderWriter/Native/Makefile index fea2cc56030..6aba3786890 100644 --- a/lld/lib/ReaderWriter/Native/Makefile +++ b/lld/lib/ReaderWriter/Native/Makefile @@ -9,6 +9,6 @@ LLD_LEVEL := ../../.. LIBRARYNAME := lldNative -USEDLIBS = lldReaderWriter.a lldCore.a +USEDLIBS = lldCore.a include $(LLD_LEVEL)/Makefile diff --git a/lld/lib/ReaderWriter/Native/ReaderNative.cpp b/lld/lib/ReaderWriter/Native/ReaderNative.cpp index c73ac2b18e8..00160d05f54 100644 --- a/lld/lib/ReaderWriter/Native/ReaderNative.cpp +++ b/lld/lib/ReaderWriter/Native/ReaderNative.cpp @@ -11,8 +11,8 @@ #include "lld/Core/Atom.h" #include "lld/Core/Error.h" #include "lld/Core/File.h" +#include "lld/Core/Reader.h" #include "lld/Core/Simple.h" -#include "lld/ReaderWriter/Reader.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Debug.h" diff --git a/lld/lib/ReaderWriter/Native/WriterNative.cpp b/lld/lib/ReaderWriter/Native/WriterNative.cpp index 6569395dddf..fbb9f3267a7 100644 --- a/lld/lib/ReaderWriter/Native/WriterNative.cpp +++ b/lld/lib/ReaderWriter/Native/WriterNative.cpp @@ -7,10 +7,10 @@ // //===----------------------------------------------------------------------===// -#include "lld/ReaderWriter/Writer.h" #include "NativeFileFormat.h" #include "lld/Core/File.h" #include "lld/Core/LinkingContext.h" +#include "lld/Core/Writer.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/StringRef.h" diff --git a/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp b/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp index dbe0244843e..b1159697894 100644 --- a/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp +++ b/lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp @@ -16,13 +16,13 @@ #include "LoadConfigPass.h" #include "PDBPass.h" #include "lld/Core/PassManager.h" +#include "lld/Core/Reader.h" #include "lld/Core/Simple.h" +#include "lld/Core/Writer.h" #include "lld/Passes/LayoutPass.h" #include "lld/Passes/RoundTripNativePass.h" #include "lld/Passes/RoundTripYAMLPass.h" #include "lld/ReaderWriter/PECOFFLinkingContext.h" -#include "lld/ReaderWriter/Reader.h" -#include "lld/ReaderWriter/Writer.h" #include "llvm/ADT/SmallString.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/Path.h" diff --git a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp index dd261614c1c..92dc5285a6b 100644 --- a/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/ReaderCOFF.cpp @@ -10,9 +10,9 @@ #include "Atoms.h" #include "lld/Core/Alias.h" #include "lld/Core/File.h" +#include "lld/Core/Reader.h" #include "lld/Driver/Driver.h" #include "lld/ReaderWriter/PECOFFLinkingContext.h" -#include "lld/ReaderWriter/Reader.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Object/COFF.h" diff --git a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp index 2bd24c4338f..89fdd72b90b 100644 --- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp @@ -23,9 +23,9 @@ #include "WriterImportLibrary.h" #include "lld/Core/DefinedAtom.h" #include "lld/Core/File.h" +#include "lld/Core/Writer.h" #include "lld/ReaderWriter/AtomLayout.h" #include "lld/ReaderWriter/PECOFFLinkingContext.h" -#include "lld/ReaderWriter/Writer.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/Object/COFF.h" #include "llvm/Support/COFF.h" diff --git a/lld/lib/ReaderWriter/Reader.cpp b/lld/lib/ReaderWriter/Reader.cpp deleted file mode 100644 index 616f475b282..00000000000 --- a/lld/lib/ReaderWriter/Reader.cpp +++ /dev/null @@ -1,119 +0,0 @@ -//===- lib/ReaderWriter/Reader.cpp ----------------------------------------===// -// -// The LLVM Linker -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "lld/Core/File.h" -#include "lld/ReaderWriter/Reader.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/Support/Errc.h" -#include "llvm/Support/FileUtilities.h" -#include "llvm/Support/MemoryBuffer.h" -#include "llvm/Support/Path.h" -#include <memory> -#include <system_error> - -namespace lld { - -YamlIOTaggedDocumentHandler::~YamlIOTaggedDocumentHandler() {} - -void Registry::add(std::unique_ptr<Reader> reader) { - _readers.push_back(std::move(reader)); -} - -void Registry::add(std::unique_ptr<YamlIOTaggedDocumentHandler> handler) { - _yamlHandlers.push_back(std::move(handler)); -} - -std::error_code -Registry::loadFile(std::unique_ptr<MemoryBuffer> mb, - std::vector<std::unique_ptr<File>> &result) const { - // Get file type. - StringRef content(mb->getBufferStart(), mb->getBufferSize()); - llvm::sys::fs::file_magic fileType = llvm::sys::fs::identify_magic(content); - // Get file extension. - StringRef extension = llvm::sys::path::extension(mb->getBufferIdentifier()); - - // Ask each registered reader if it can handle this file type or extension. - for (const std::unique_ptr<Reader> &reader : _readers) { - if (!reader->canParse(fileType, extension, *mb)) - continue; - if (std::error_code ec = reader->loadFile(std::move(mb), *this, result)) - return ec; - return std::error_code(); - } - - // No Reader could parse this file. - return make_error_code(llvm::errc::executable_format_error); -} - -static const Registry::KindStrings kindStrings[] = { - {Reference::kindInGroup, "in-group"}, - {Reference::kindLayoutAfter, "layout-after"}, - {Reference::kindLayoutBefore, "layout-before"}, - {Reference::kindGroupChild, "group-child"}, - {Reference::kindAssociate, "associate"}, - LLD_KIND_STRING_END}; - -Registry::Registry() { - addKindTable(Reference::KindNamespace::all, Reference::KindArch::all, - kindStrings); -} - -bool Registry::handleTaggedDoc(llvm::yaml::IO &io, - const lld::File *&file) const { - for (const std::unique_ptr<YamlIOTaggedDocumentHandler> &h : _yamlHandlers) - if (h->handledDocTag(io, file)) - return true; - return false; -} - - -void Registry::addKindTable(Reference::KindNamespace ns, - Reference::KindArch arch, - const KindStrings array[]) { - KindEntry entry = { ns, arch, array }; - _kindEntries.push_back(entry); -} - -bool Registry::referenceKindFromString(StringRef inputStr, - Reference::KindNamespace &ns, - Reference::KindArch &arch, - Reference::KindValue &value) const { - for (const KindEntry &entry : _kindEntries) { - for (const KindStrings *pair = entry.array; !pair->name.empty(); ++pair) { - if (!inputStr.equals(pair->name)) - continue; - ns = entry.ns; - arch = entry.arch; - value = pair->value; - return true; - } - } - return false; -} - -bool Registry::referenceKindToString(Reference::KindNamespace ns, - Reference::KindArch arch, - Reference::KindValue value, - StringRef &str) const { - for (const KindEntry &entry : _kindEntries) { - if (entry.ns != ns) - continue; - if (entry.arch != arch) - continue; - for (const KindStrings *pair = entry.array; !pair->name.empty(); ++pair) { - if (pair->value != value) - continue; - str = pair->name; - return true; - } - } - return false; -} - -} // end namespace lld diff --git a/lld/lib/ReaderWriter/Writer.cpp b/lld/lib/ReaderWriter/Writer.cpp deleted file mode 100644 index 40e0a0b227f..00000000000 --- a/lld/lib/ReaderWriter/Writer.cpp +++ /dev/null @@ -1,23 +0,0 @@ -//===- lib/ReaderWriter/Writer.cpp ----------------------------------------===// -// -// The LLVM Linker -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "lld/Core/File.h" -#include "lld/ReaderWriter/Writer.h" - -namespace lld { -Writer::Writer() { -} - -Writer::~Writer() { -} - -bool Writer::createImplicitFiles(std::vector<std::unique_ptr<File> > &) { - return true; -} -} // end namespace lld diff --git a/lld/lib/ReaderWriter/YAML/CMakeLists.txt b/lld/lib/ReaderWriter/YAML/CMakeLists.txt index 8b071d3d108..b955baa9420 100644 --- a/lld/lib/ReaderWriter/YAML/CMakeLists.txt +++ b/lld/lib/ReaderWriter/YAML/CMakeLists.txt @@ -1,6 +1,6 @@ add_llvm_library(lldYAML ReaderWriterYAML.cpp LINK_LIBS - lldReaderWriter + lldCore LLVMSupport ) diff --git a/lld/lib/ReaderWriter/YAML/Makefile b/lld/lib/ReaderWriter/YAML/Makefile index 02a66f9d6ea..739b6eae747 100644 --- a/lld/lib/ReaderWriter/YAML/Makefile +++ b/lld/lib/ReaderWriter/YAML/Makefile @@ -9,6 +9,6 @@ LLD_LEVEL := ../../.. LIBRARYNAME := lldYAML -USEDLIBS = lldReaderWriter.a lldCore.a +USEDLIBS = lldCore.a include $(LLD_LEVEL)/Makefile diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp index faa5614e745..cc1c8a5d5c1 100644 --- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp +++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp @@ -12,10 +12,10 @@ #include "lld/Core/Error.h" #include "lld/Core/File.h" #include "lld/Core/LLVM.h" +#include "lld/Core/Reader.h" #include "lld/Core/Reference.h" #include "lld/Core/Simple.h" -#include "lld/ReaderWriter/Reader.h" -#include "lld/ReaderWriter/Writer.h" +#include "lld/Core/Writer.h" #include "lld/ReaderWriter/YamlContext.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringMap.h" |