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  Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override {
40  if (Symb.p == 0)
41  OS << "__imp_";
43  return Error::success();
44  }
45 
46  uint32_t getSymbolFlags(DataRefImpl Symb) const override {
47  return SymbolRef::SF_Global;
48  }
49 
51  return BasicSymbolRef(DataRefImpl(), this);
52  }
53 
54  basic_symbol_iterator symbol_end() const override {
55  DataRefImpl Symb;
56  Symb.p = isData() ? 1 : 2;
57  return BasicSymbolRef(Symb, this);
58  }
59 
61  return reinterpret_cast<const object::coff_import_header *>(
63  }
64 
65 private:
66  bool isData() const {
68  }
69 };
70 
72  /// The name of the export as specified in the .def file or on the command
73  /// line, i.e. "foo" in "/EXPORT:foo", and "bar" in "/EXPORT:foo=bar". This
74  /// may lack mangling, such as underscore prefixing and stdcall suffixing.
75  std::string Name;
76 
77  /// The external, exported name. Only non-empty when export renaming is in
78  /// effect, i.e. "foo" in "/EXPORT:foo=bar".
79  std::string ExtName;
80 
81  /// The real, mangled symbol name from the object file. Given
82  /// "/export:foo=bar", this could be "_bar@8" if bar is stdcall.
83  std::string SymbolName;
84 
85  /// Creates a weak alias. This is the name of the weak aliasee. In a .def
86  /// file, this is "baz" in "EXPORTS\nfoo = bar == baz".
87  std::string AliasTarget;
88 
89  uint16_t Ordinal = 0;
90  bool Noname = false;
91  bool Data = false;
92  bool Private = false;
93  bool Constant = false;
94 
95  friend bool operator==(const COFFShortExport &L, const COFFShortExport &R) {
96  return L.Name == R.Name && L.ExtName == R.ExtName &&
97  L.Ordinal == R.Ordinal && L.Noname == R.Noname &&
98  L.Data == R.Data && L.Private == R.Private;
99  }
100 
101  friend bool operator!=(const COFFShortExport &L, const COFFShortExport &R) {
102  return !(L == R);
103  }
104 };
105 
108  COFF::MachineTypes Machine, bool MinGW);
109 
110 } // namespace object
111 } // namespace llvm
112 
113 #endif
This class represents lattice values for constants.
Definition: AllocatorList.h:23
std::string Name
The name of the export as specified in the .def file or on the command line, i.e. ...
void moveSymbolNext(DataRefImpl &Symb) const override
MachineTypes
Definition: COFF.h:93
bool isCOFFImportFile() const
Definition: Binary.h:130
Error writeImportLibrary(StringRef ImportName, StringRef Path, ArrayRef< COFFShortExport > Exports, COFF::MachineTypes Machine, bool MinGW)
std::string AliasTarget
Creates a weak alias.
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
COFFImportFile(MemoryBufferRef Source)
This is an important base class in LLVM.
Definition: Constant.h:41
friend bool operator==(const COFFShortExport &L, const COFFShortExport &R)
static ErrorSuccess success()
Create a success value.
Definition: Error.h:326
Error printSymbolName(raw_ostream &OS, DataRefImpl Symb) const override
std::string ExtName
The external, exported name.
friend bool operator!=(const COFFShortExport &L, const COFFShortExport &R)
MemoryBufferRef Data
Definition: Binary.h:37
std::string SymbolName
The real, mangled symbol name from the object file.
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