1 //===- DLL.h ----------------------------------------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 #define LLD_COFF_DLL_H
19 // IdataContents creates all chunks for the DLL import table.
20 // You are supposed to call add() to add symbols and then
21 // call create() to populate the chunk vectors.
24 void add(DefinedImportData
*sym
) { imports
.push_back(sym
); }
25 bool empty() { return imports
.empty(); }
29 std::vector
<DefinedImportData
*> imports
;
30 std::vector
<Chunk
*> dirs
;
31 std::vector
<Chunk
*> lookups
;
32 std::vector
<Chunk
*> addresses
;
33 std::vector
<Chunk
*> hints
;
34 std::vector
<Chunk
*> dllNames
;
38 // DelayLoadContents creates all chunks for the delay-load DLL import table.
39 class DelayLoadContents
{
41 void add(DefinedImportData
*sym
) { imports
.push_back(sym
); }
42 bool empty() { return imports
.empty(); }
43 void create(Defined
*helper
);
44 std::vector
<Chunk
*> getChunks();
45 std::vector
<Chunk
*> getDataChunks();
46 ArrayRef
<Chunk
*> getCodeChunks() { return thunks
; }
48 uint64_t getDirRVA() { return dirs
[0]->getRVA(); }
49 uint64_t getDirSize();
52 Chunk
*newThunkChunk(DefinedImportData
*s
, Chunk
*tailMerge
);
53 Chunk
*newTailMergeChunk(Chunk
*dir
);
56 std::vector
<DefinedImportData
*> imports
;
57 std::vector
<Chunk
*> dirs
;
58 std::vector
<Chunk
*> moduleHandles
;
59 std::vector
<Chunk
*> addresses
;
60 std::vector
<Chunk
*> names
;
61 std::vector
<Chunk
*> hintNames
;
62 std::vector
<Chunk
*> thunks
;
63 std::vector
<Chunk
*> dllNames
;
67 // EdataContents creates all chunks for the DLL export table.
71 std::vector
<Chunk
*> chunks
;
73 uint64_t getRVA() { return chunks
[0]->getRVA(); }
75 return chunks
.back()->getRVA() + chunks
.back()->getSize() - getRVA();