|
11 | 11 | //
|
12 | 12 | //===----------------------------------------------------------------------===//
|
13 | 13 |
|
14 |
| -#include "llvm/Object/COFF.h" |
15 | 14 | #include "llvm/Object/IRObjectFile.h"
|
16 | 15 | #include "llvm/Object/ObjectFile.h"
|
17 | 16 | #include "llvm/Object/SymbolicFile.h"
|
18 |
| -#include "llvm/Support/COFF.h" |
19 | 17 | #include "llvm/Support/MemoryBuffer.h"
|
20 | 18 |
|
21 | 19 | using namespace llvm;
|
22 | 20 | using namespace object;
|
23 | 21 |
|
24 |
| -// COFF short import file is a special kind of file which contains |
25 |
| -// only symbol names for DLL-exported symbols. This class implements |
26 |
| -// SymbolicFile interface for the file. |
27 |
| -namespace { |
28 |
| -class COFFImportFile : public SymbolicFile { |
29 |
| -public: |
30 |
| - COFFImportFile(MemoryBufferRef Source) |
31 |
| - : SymbolicFile(sys::fs::file_magic::coff_import_library, Source) {} |
32 |
| - |
33 |
| - void moveSymbolNext(DataRefImpl &Symb) const override { ++Symb.p; } |
34 |
| - |
35 |
| - std::error_code printSymbolName(raw_ostream &OS, |
36 |
| - DataRefImpl Symb) const override { |
37 |
| - if (Symb.p == 1) |
38 |
| - OS << "__imp_"; |
39 |
| - OS << StringRef(Data.getBufferStart() + sizeof(coff_import_header)); |
40 |
| - return std::error_code(); |
41 |
| - } |
42 |
| - |
43 |
| - uint32_t getSymbolFlags(DataRefImpl Symb) const override { |
44 |
| - return SymbolRef::SF_Global; |
45 |
| - } |
46 |
| - |
47 |
| - basic_symbol_iterator symbol_begin_impl() const override { |
48 |
| - return BasicSymbolRef(DataRefImpl(), this); |
49 |
| - } |
50 |
| - |
51 |
| - basic_symbol_iterator symbol_end_impl() const override { |
52 |
| - DataRefImpl Symb; |
53 |
| - Symb.p = isCode() ? 2 : 1; |
54 |
| - return BasicSymbolRef(Symb, this); |
55 |
| - } |
56 |
| - |
57 |
| -private: |
58 |
| - bool isCode() const { |
59 |
| - auto *Import = reinterpret_cast<const coff_import_header *>( |
60 |
| - Data.getBufferStart()); |
61 |
| - return Import->getType() == llvm::COFF::IMPORT_CODE; |
62 |
| - } |
63 |
| -}; |
64 |
| -} // anonymous namespace |
65 |
| - |
66 | 22 | SymbolicFile::SymbolicFile(unsigned int Type, MemoryBufferRef Source)
|
67 | 23 | : Binary(Type, Source) {}
|
68 | 24 |
|
@@ -98,10 +54,9 @@ ErrorOr<std::unique_ptr<SymbolicFile>> SymbolicFile::createSymbolicFile(
|
98 | 54 | case sys::fs::file_magic::macho_dynamically_linked_shared_lib_stub:
|
99 | 55 | case sys::fs::file_magic::macho_dsym_companion:
|
100 | 56 | case sys::fs::file_magic::macho_kext_bundle:
|
| 57 | + case sys::fs::file_magic::coff_import_library: |
101 | 58 | case sys::fs::file_magic::pecoff_executable:
|
102 | 59 | return ObjectFile::createObjectFile(Object, Type);
|
103 |
| - case sys::fs::file_magic::coff_import_library: |
104 |
| - return std::unique_ptr<SymbolicFile>(new COFFImportFile(Object)); |
105 | 60 | case sys::fs::file_magic::elf_relocatable:
|
106 | 61 | case sys::fs::file_magic::macho_object:
|
107 | 62 | case sys::fs::file_magic::coff_object: {
|
|
0 commit comments