LLVM  9.0.0svn
COFFImportFile.h
Go to the documentation of this file.
1 //===- COFFImportFile.h - COFF short import file implementation -*- 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 // COFF short import file is a special kind of file which contains
10 // only symbol names for DLL-exported symbols. This class implements
11 // exporting of Symbols to create libraries and a SymbolicFile
12 // interface for the file type.
13 //
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_OBJECT_COFF_IMPORT_FILE_H
17 #define LLVM_OBJECT_COFF_IMPORT_FILE_H
18 
19 #include "llvm/ADT/ArrayRef.h"
20 #include "llvm/Object/COFF.h"
22 #include "llvm/Object/ObjectFile.h"
26 
27 namespace llvm {
28 namespace object {
29 
30 class COFFImportFile : public SymbolicFile {
31 public:
33  : SymbolicFile(ID_COFFImportFile, Source) {}
34 
35  static bool classof(Binary const *V) { return V->isCOFFImportFile(); }
36 
37  void moveSymbolNext(DataRefImpl &Symb) const override { ++Symb.p; }
38 
39  std::error_code printSymbolName(raw_ostream &OS,
40  DataRefImpl Symb) const override {
41  if (Symb.p == 0)
42  OS << "__imp_";
44  return std::error_code();
45  }
46 
47  uint32_t getSymbolFlags(DataRefImpl Symb) const override {
48  return SymbolRef::SF_Global;
49  }
50 
52  return BasicSymbolRef(DataRefImpl(), this);
53  }
54 
55  basic_symbol_iterator symbol_end() const override {
56  DataRefImpl Symb;
57  Symb.p = isData() ? 1 : 2;
58  return BasicSymbolRef(Symb, this);
59  }
60 
62  return reinterpret_cast<const object::coff_import_header *>(
64  }
65 
66 private:
67  bool isData() const {
69  }
70 };
71 
73  std::string Name;
74  std::string ExtName;
75  std::string SymbolName;
76  std::string AliasTarget;
77 
78  uint16_t Ordinal = 0;
79  bool Noname = false;
80  bool Data = false;
81  bool Private = false;
82  bool Constant = false;
83 
84  friend bool operator==(const COFFShortExport &L, const COFFShortExport &R) {
85  return L.Name == R.Name && L.ExtName == R.ExtName &&
86  L.Ordinal == R.Ordinal && L.Noname == R.Noname &&
87  L.Data == R.Data && L.Private == R.Private;
88  }
89 
90  friend bool operator!=(const COFFShortExport &L, const COFFShortExport &R) {
91  return !(L == R);
92  }
93 };
94 
97  COFF::MachineTypes Machine, bool MinGW);
98 
99 } // namespace object
100 } // namespace llvm
101 
102 #endif
This class represents lattice values for constants.
Definition: AllocatorList.h:23
void moveSymbolNext(DataRefImpl &Symb) const override
MachineTypes
Definition: COFF.h:93
bool isCOFFImportFile() const
Definition: Binary.h:124
Error writeImportLibrary(StringRef ImportName, StringRef Path, ArrayRef< COFFShortExport > Exports, COFF::MachineTypes Machine, bool MinGW)
uint32_t getSymbolFlags(DataRefImpl Symb) const override
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: APInt.h:32
COFF::MachineTypes Machine
Definition: COFFYAML.cpp:365
std::error_code printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override
COFFImportFile(MemoryBufferRef Source)
This is an important base class in LLVM.
Definition: Constant.h:41
friend bool operator==(const COFFShortExport &L, const COFFShortExport &R)
friend bool operator!=(const COFFShortExport &L, const COFFShortExport &R)
MemoryBufferRef Data
Definition: Binary.h:36
This is a value type class that represents a single symbol in the list of symbols in the object file...
Definition: SymbolicFile.h:98
static bool classof(Binary const *V)
const char * getBufferStart() const
Definition: MemoryBuffer.h:276
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:45
const coff_import_header * getCOFFImportHeader() const
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
basic_symbol_iterator symbol_begin() const override
basic_symbol_iterator symbol_end() const override