xref: /aosp_15_r20/external/llvm/tools/llvm-readobj/llvm-readobj.h (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker //===-- llvm-readobj.h ----------------------------------------------------===//
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 #ifndef LLVM_TOOLS_LLVM_READOBJ_LLVM_READOBJ_H
11*9880d681SAndroid Build Coastguard Worker #define LLVM_TOOLS_LLVM_READOBJ_LLVM_READOBJ_H
12*9880d681SAndroid Build Coastguard Worker 
13*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/CommandLine.h"
14*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Compiler.h"
15*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ErrorOr.h"
16*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/Error.h"
17*9880d681SAndroid Build Coastguard Worker #include <string>
18*9880d681SAndroid Build Coastguard Worker 
19*9880d681SAndroid Build Coastguard Worker namespace llvm {
20*9880d681SAndroid Build Coastguard Worker   namespace object {
21*9880d681SAndroid Build Coastguard Worker     class RelocationRef;
22*9880d681SAndroid Build Coastguard Worker   }
23*9880d681SAndroid Build Coastguard Worker 
24*9880d681SAndroid Build Coastguard Worker   // Various helper functions.
25*9880d681SAndroid Build Coastguard Worker   LLVM_ATTRIBUTE_NORETURN void reportError(Twine Msg);
26*9880d681SAndroid Build Coastguard Worker   void error(std::error_code ec);
unwrapOrError(ErrorOr<T> EO)27*9880d681SAndroid Build Coastguard Worker   template <class T> T unwrapOrError(ErrorOr<T> EO) {
28*9880d681SAndroid Build Coastguard Worker     if (EO)
29*9880d681SAndroid Build Coastguard Worker       return *EO;
30*9880d681SAndroid Build Coastguard Worker     reportError(EO.getError().message());
31*9880d681SAndroid Build Coastguard Worker   }
unwrapOrError(Expected<T> EO)32*9880d681SAndroid Build Coastguard Worker   template <class T> T unwrapOrError(Expected<T> EO) {
33*9880d681SAndroid Build Coastguard Worker     if (EO)
34*9880d681SAndroid Build Coastguard Worker       return *EO;
35*9880d681SAndroid Build Coastguard Worker     std::string Buf;
36*9880d681SAndroid Build Coastguard Worker     raw_string_ostream OS(Buf);
37*9880d681SAndroid Build Coastguard Worker     logAllUnhandledErrors(EO.takeError(), OS, "");
38*9880d681SAndroid Build Coastguard Worker     OS.flush();
39*9880d681SAndroid Build Coastguard Worker     reportError(Buf);
40*9880d681SAndroid Build Coastguard Worker   }
41*9880d681SAndroid Build Coastguard Worker   bool relocAddressLess(object::RelocationRef A,
42*9880d681SAndroid Build Coastguard Worker                         object::RelocationRef B);
43*9880d681SAndroid Build Coastguard Worker } // namespace llvm
44*9880d681SAndroid Build Coastguard Worker 
45*9880d681SAndroid Build Coastguard Worker namespace opts {
46*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::list<std::string> InputFilenames;
47*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> FileHeaders;
48*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> Sections;
49*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> SectionRelocations;
50*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> SectionSymbols;
51*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> SectionData;
52*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> Relocations;
53*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> Symbols;
54*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> DynamicSymbols;
55*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> UnwindInfo;
56*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> ExpandRelocs;
57*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> CodeView;
58*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> CodeViewSubsectionBytes;
59*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> ARMAttributes;
60*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<bool> MipsPLTGOT;
61*9880d681SAndroid Build Coastguard Worker   enum OutputStyleTy { LLVM, GNU };
62*9880d681SAndroid Build Coastguard Worker   extern llvm::cl::opt<OutputStyleTy> Output;
63*9880d681SAndroid Build Coastguard Worker } // namespace opts
64*9880d681SAndroid Build Coastguard Worker 
65*9880d681SAndroid Build Coastguard Worker #define LLVM_READOBJ_ENUM_ENT(ns, enum) \
66*9880d681SAndroid Build Coastguard Worker   { #enum, ns::enum }
67*9880d681SAndroid Build Coastguard Worker 
68*9880d681SAndroid Build Coastguard Worker #define LLVM_READOBJ_ENUM_CLASS_ENT(enum_class, enum) \
69*9880d681SAndroid Build Coastguard Worker   { #enum, std::underlying_type<enum_class>::type(enum_class::enum) }
70*9880d681SAndroid Build Coastguard Worker 
71*9880d681SAndroid Build Coastguard Worker #endif
72