//===- DLL.h ----------------------------------------------------*- C++ -*-===// // // The LLVM Linker // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLD_COFF_DLL_H #define LLD_COFF_DLL_H #include "Chunks.h" #include "Symbols.h" namespace lld { namespace coff { // Windows-specific. // IdataContents creates all chunks for the DLL import table. // You are supposed to call add() to add symbols and then // call getChunks() to get a list of chunks. class IdataContents { public: void add(DefinedImportData *Sym) { Imports.push_back(Sym); } bool empty() { return Imports.empty(); } std::vector getChunks(); uint64_t getDirRVA() { return Dirs[0]->getRVA(); } uint64_t getDirSize(); uint64_t getIATRVA() { return Addresses[0]->getRVA(); } uint64_t getIATSize(); private: void create(); std::vector Imports; std::vector Dirs; std::vector Lookups; std::vector Addresses; std::vector Hints; std::vector DLLNames; }; // Windows-specific. // DelayLoadContents creates all chunks for the delay-load DLL import table. class DelayLoadContents { public: void add(DefinedImportData *Sym) { Imports.push_back(Sym); } bool empty() { return Imports.empty(); } void create(Defined *Helper); std::vector getChunks(); std::vector getDataChunks(); ArrayRef getCodeChunks() { return Thunks; } uint64_t getDirRVA() { return Dirs[0]->getRVA(); } uint64_t getDirSize(); private: Chunk *newThunkChunk(DefinedImportData *S, Chunk *Dir); Defined *Helper; std::vector Imports; std::vector Dirs; std::vector ModuleHandles; std::vector Addresses; std::vector Names; std::vector HintNames; std::vector Thunks; std::vector DLLNames; }; // Windows-specific. // EdataContents creates all chunks for the DLL export table. class EdataContents { public: EdataContents(); std::vector Chunks; }; } // namespace coff } // namespace lld #endif