Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/lld/COFF/DLL.h
Line
Count
Source
1
//===- DLL.h ----------------------------------------------------*- C++ -*-===//
2
//
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
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLD_COFF_DLL_H
10
#define LLD_COFF_DLL_H
11
12
#include "Chunks.h"
13
#include "Symbols.h"
14
15
namespace lld {
16
namespace coff {
17
18
// Windows-specific.
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.
22
class IdataContents {
23
public:
24
92
  void add(DefinedImportData *sym) { imports.push_back(sym); }
25
576
  bool empty() { return imports.empty(); }
26
27
  void create();
28
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;
35
};
36
37
// Windows-specific.
38
// DelayLoadContents creates all chunks for the delay-load DLL import table.
39
class DelayLoadContents {
40
public:
41
11
  void add(DefinedImportData *sym) { imports.push_back(sym); }
42
631
  bool empty() { return imports.empty(); }
43
  void create(Defined *helper);
44
  std::vector<Chunk *> getChunks();
45
  std::vector<Chunk *> getDataChunks();
46
5
  ArrayRef<Chunk *> getCodeChunks() { return thunks; }
47
48
5
  uint64_t getDirRVA() { return dirs[0]->getRVA(); }
49
  uint64_t getDirSize();
50
51
private:
52
  Chunk *newThunkChunk(DefinedImportData *s, Chunk *tailMerge);
53
  Chunk *newTailMergeChunk(Chunk *dir);
54
55
  Defined *helper;
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;
64
};
65
66
// Windows-specific.
67
// EdataContents creates all chunks for the DLL export table.
68
class EdataContents {
69
public:
70
  EdataContents();
71
  std::vector<Chunk *> chunks;
72
73
234
  uint64_t getRVA() { return chunks[0]->getRVA(); }
74
117
  uint64_t getSize() {
75
117
    return chunks.back()->getRVA() + chunks.back()->getSize() - getRVA();
76
117
  }
77
};
78
79
} // namespace coff
80
} // namespace lld
81
82
#endif