LLVM  8.0.1
COFFImportFile.h
Go to the documentation of this file.
1 //===- COFFImportFile.h - COFF short import file implementation -*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // COFF short import file is a special kind of file which contains
11 // only symbol names for DLL-exported symbols. This class implements
12 // exporting of Symbols to create libraries and a SymbolicFile
13 // interface for the file type.
14 //
15 //===----------------------------------------------------------------------===//
16 
17 #ifndef LLVM_OBJECT_COFF_IMPORT_FILE_H
18 #define LLVM_OBJECT_COFF_IMPORT_FILE_H
19 
20 #include "llvm/ADT/ArrayRef.h"
21 #include "llvm/Object/COFF.h"
23 #include "llvm/Object/ObjectFile.h"
27 
28 namespace llvm {
29 namespace object {
30 
31 class COFFImportFile : public SymbolicFile {
32 public:
34  : SymbolicFile(ID_COFFImportFile, Source) {}
35 
36  static bool classof(Binary const *V) { return V->isCOFFImportFile(); }
37 
38  void moveSymbolNext(DataRefImpl &Symb) const override { ++Symb.p; }
39 
40  std::error_code printSymbolName(raw_ostream &OS,
41  DataRefImpl Symb) const override {
42  if (Symb.p == 0)
43  OS << "__imp_";
45  return std::error_code();
46  }
47 
48  uint32_t getSymbolFlags(DataRefImpl Symb) const override {
49  return SymbolRef::SF_Global;
50  }
51 
53  return BasicSymbolRef(DataRefImpl(), this);
54  }
55 
56  basic_symbol_iterator symbol_end() const override {
57  DataRefImpl Symb;
58  Symb.p = isData() ? 1 : 2;
59  return BasicSymbolRef(Symb, this);
60  }
61 
63  return reinterpret_cast<const object::coff_import_header *>(
65  }
66 
67 private:
68  bool isData() const {
70  }
71 };
72 
74  std::string Name;
75  std::string ExtName;
76  std::string SymbolName;
77  std::string AliasTarget;
78 
79  uint16_t Ordinal = 0;
80  bool Noname = false;
81  bool Data = false;
82  bool Private = false;
83  bool Constant = false;
84 
85  friend bool operator==(const COFFShortExport &L, const COFFShortExport &R) {
86  return L.Name == R.Name && L.ExtName == R.ExtName &&
87  L.Ordinal == R.Ordinal && L.Noname == R.Noname &&
88  L.Data == R.Data && L.Private == R.Private;
89  }
90 
91  friend bool operator!=(const COFFShortExport &L, const COFFShortExport &R) {
92  return !(L == R);
93  }
94 };
95 
98  COFF::MachineTypes Machine, bool MinGW);
99 
100 } // namespace object
101 } // namespace llvm
102 
103 #endif
This class represents lattice values for constants.
Definition: AllocatorList.h:24
void moveSymbolNext(DataRefImpl &Symb) const override
MachineTypes
Definition: COFF.h:94
bool isCOFFImportFile() const
Definition: Binary.h:123
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:33
COFF::MachineTypes Machine
Definition: COFFYAML.cpp:363
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:42
friend bool operator==(const COFFShortExport &L, const COFFShortExport &R)
friend bool operator!=(const COFFShortExport &L, const COFFShortExport &R)
MemoryBufferRef Data
Definition: Binary.h:37
This is a value type class that represents a single symbol in the list of symbols in the object file...
Definition: SymbolicFile.h:99
static bool classof(Binary const *V)
const char * getBufferStart() const
Definition: MemoryBuffer.h:277
Lightweight error class with error context and mandatory checking.
Definition: Error.h:158
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:46
const coff_import_header * getCOFFImportHeader() const
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
basic_symbol_iterator symbol_begin() const override
basic_symbol_iterator symbol_end() const override