xref: /aosp_15_r20/external/llvm/tools/llvm-readobj/COFFImportDumper.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- COFFImportDumper.cpp - COFF import library dumper -------*- C++ -*-===//
2*9880d681SAndroid Build Coastguard Worker //
3*9880d681SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker //
5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker //
8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker ///
10*9880d681SAndroid Build Coastguard Worker /// \file
11*9880d681SAndroid Build Coastguard Worker /// \brief This file implements the COFF import library dumper for llvm-readobj.
12*9880d681SAndroid Build Coastguard Worker ///
13*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
14*9880d681SAndroid Build Coastguard Worker 
15*9880d681SAndroid Build Coastguard Worker #include "Error.h"
16*9880d681SAndroid Build Coastguard Worker #include "ObjDumper.h"
17*9880d681SAndroid Build Coastguard Worker #include "llvm-readobj.h"
18*9880d681SAndroid Build Coastguard Worker #include "llvm/Object/COFF.h"
19*9880d681SAndroid Build Coastguard Worker #include "llvm/Object/COFFImportFile.h"
20*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/COFF.h"
21*9880d681SAndroid Build Coastguard Worker 
22*9880d681SAndroid Build Coastguard Worker using namespace llvm::object;
23*9880d681SAndroid Build Coastguard Worker 
24*9880d681SAndroid Build Coastguard Worker namespace llvm {
25*9880d681SAndroid Build Coastguard Worker 
dumpCOFFImportFile(const COFFImportFile * File)26*9880d681SAndroid Build Coastguard Worker void dumpCOFFImportFile(const COFFImportFile *File) {
27*9880d681SAndroid Build Coastguard Worker   outs() << '\n';
28*9880d681SAndroid Build Coastguard Worker   outs() << "File: " << File->getFileName() << "\n";
29*9880d681SAndroid Build Coastguard Worker   outs() << "Format: COFF-import-file\n";
30*9880d681SAndroid Build Coastguard Worker 
31*9880d681SAndroid Build Coastguard Worker   const coff_import_header *H = File->getCOFFImportHeader();
32*9880d681SAndroid Build Coastguard Worker   switch (H->getType()) {
33*9880d681SAndroid Build Coastguard Worker   case COFF::IMPORT_CODE:  outs() << "Type: code\n"; break;
34*9880d681SAndroid Build Coastguard Worker   case COFF::IMPORT_DATA:  outs() << "Type: data\n"; break;
35*9880d681SAndroid Build Coastguard Worker   case COFF::IMPORT_CONST: outs() << "Type: const\n"; break;
36*9880d681SAndroid Build Coastguard Worker   }
37*9880d681SAndroid Build Coastguard Worker 
38*9880d681SAndroid Build Coastguard Worker   switch (H->getNameType()) {
39*9880d681SAndroid Build Coastguard Worker   case COFF::IMPORT_ORDINAL: outs() << "Name type: ordinal\n"; break;
40*9880d681SAndroid Build Coastguard Worker   case COFF::IMPORT_NAME: outs() << "Name type: name\n"; break;
41*9880d681SAndroid Build Coastguard Worker   case COFF::IMPORT_NAME_NOPREFIX: outs() << "Name type: noprefix\n"; break;
42*9880d681SAndroid Build Coastguard Worker   case COFF::IMPORT_NAME_UNDECORATE: outs() << "Name type: undecorate\n"; break;
43*9880d681SAndroid Build Coastguard Worker   }
44*9880d681SAndroid Build Coastguard Worker 
45*9880d681SAndroid Build Coastguard Worker   for (const object::BasicSymbolRef &Sym : File->symbols()) {
46*9880d681SAndroid Build Coastguard Worker     outs() << "Symbol: ";
47*9880d681SAndroid Build Coastguard Worker     Sym.printName(outs());
48*9880d681SAndroid Build Coastguard Worker     outs() << "\n";
49*9880d681SAndroid Build Coastguard Worker   }
50*9880d681SAndroid Build Coastguard Worker }
51*9880d681SAndroid Build Coastguard Worker 
52*9880d681SAndroid Build Coastguard Worker } // namespace llvm
53