diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:33 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:33 +0000 |
commit | 7d6988fdd2aee0e033034e147f16fe05594a60e4 (patch) | |
tree | 8aa90abd4e0cce6f71fd338ee32e9957135bc642 /wasm/InputFiles.h | |
parent | e2fd426bdafe9f5c10066d3926ece6e342184a67 (diff) |
Notes
Diffstat (limited to 'wasm/InputFiles.h')
-rw-r--r-- | wasm/InputFiles.h | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/wasm/InputFiles.h b/wasm/InputFiles.h deleted file mode 100644 index bcda9cc8ee92..000000000000 --- a/wasm/InputFiles.h +++ /dev/null @@ -1,154 +0,0 @@ -//===- InputFiles.h ---------------------------------------------*- C++ -*-===// -// -// The LLVM Linker -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLD_WASM_INPUT_FILES_H -#define LLD_WASM_INPUT_FILES_H - -#include "Symbols.h" -#include "lld/Common/LLVM.h" -#include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/DenseSet.h" -#include "llvm/LTO/LTO.h" -#include "llvm/Object/Archive.h" -#include "llvm/Object/Wasm.h" -#include "llvm/Support/MemoryBuffer.h" -#include <vector> - -namespace lld { -namespace wasm { - -class InputChunk; -class InputFunction; -class InputSegment; -class InputGlobal; -class InputEvent; -class InputSection; - -class InputFile { -public: - enum Kind { - ObjectKind, - ArchiveKind, - BitcodeKind, - }; - - virtual ~InputFile() {} - - // Returns the filename. - StringRef getName() const { return MB.getBufferIdentifier(); } - - // Reads a file (the constructor doesn't do that). - virtual void parse() = 0; - - Kind kind() const { return FileKind; } - - // An archive file name if this file is created from an archive. - StringRef ArchiveName; - - ArrayRef<Symbol *> getSymbols() const { return Symbols; } - -protected: - InputFile(Kind K, MemoryBufferRef M) : MB(M), FileKind(K) {} - MemoryBufferRef MB; - - // List of all symbols referenced or defined by this file. - std::vector<Symbol *> Symbols; - -private: - const Kind FileKind; -}; - -// .a file (ar archive) -class ArchiveFile : public InputFile { -public: - explicit ArchiveFile(MemoryBufferRef M) : InputFile(ArchiveKind, M) {} - static bool classof(const InputFile *F) { return F->kind() == ArchiveKind; } - - void addMember(const llvm::object::Archive::Symbol *Sym); - - void parse() override; - -private: - std::unique_ptr<llvm::object::Archive> File; - llvm::DenseSet<uint64_t> Seen; -}; - -// .o file (wasm object file) -class ObjFile : public InputFile { -public: - explicit ObjFile(MemoryBufferRef M) : InputFile(ObjectKind, M) {} - static bool classof(const InputFile *F) { return F->kind() == ObjectKind; } - - void parse() override; - - // Returns the underlying wasm file. - const WasmObjectFile *getWasmObj() const { return WasmObj.get(); } - - void dumpInfo() const; - - uint32_t calcNewIndex(const WasmRelocation &Reloc) const; - uint32_t calcNewValue(const WasmRelocation &Reloc) const; - uint32_t calcNewAddend(const WasmRelocation &Reloc) const; - uint32_t calcExpectedValue(const WasmRelocation &Reloc) const; - - const WasmSection *CodeSection = nullptr; - const WasmSection *DataSection = nullptr; - - // Maps input type indices to output type indices - std::vector<uint32_t> TypeMap; - std::vector<bool> TypeIsUsed; - // Maps function indices to table indices - std::vector<uint32_t> TableEntries; - std::vector<bool> UsedComdats; - std::vector<InputSegment *> Segments; - std::vector<InputFunction *> Functions; - std::vector<InputGlobal *> Globals; - std::vector<InputEvent *> Events; - std::vector<InputSection *> CustomSections; - llvm::DenseMap<uint32_t, InputSection *> CustomSectionsByIndex; - - Symbol *getSymbol(uint32_t Index) const { return Symbols[Index]; } - FunctionSymbol *getFunctionSymbol(uint32_t Index) const; - DataSymbol *getDataSymbol(uint32_t Index) const; - GlobalSymbol *getGlobalSymbol(uint32_t Index) const; - SectionSymbol *getSectionSymbol(uint32_t Index) const; - EventSymbol *getEventSymbol(uint32_t Index) const; - -private: - Symbol *createDefined(const WasmSymbol &Sym); - Symbol *createUndefined(const WasmSymbol &Sym); - - bool isExcludedByComdat(InputChunk *Chunk) const; - - std::unique_ptr<WasmObjectFile> WasmObj; -}; - -class BitcodeFile : public InputFile { -public: - explicit BitcodeFile(MemoryBufferRef M) : InputFile(BitcodeKind, M) {} - static bool classof(const InputFile *F) { return F->kind() == BitcodeKind; } - - void parse() override; - std::unique_ptr<llvm::lto::InputFile> Obj; -}; - -// Will report a fatal() error if the input buffer is not a valid bitcode -// or was object file. -InputFile *createObjectFile(MemoryBufferRef MB); - -// Opens a given file. -llvm::Optional<MemoryBufferRef> readFile(StringRef Path); - -} // namespace wasm - -std::string toString(const wasm::InputFile *File); - -} // namespace lld - -#endif |