1 //===- SymbolizableObjectFile.h ---------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file declares the SymbolizableObjectFile class.
12 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_LIB_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEOBJECTFILE_H
14 #define LLVM_LIB_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEOBJECTFILE_H
16 #include "llvm/ADT/StringRef.h"
17 #include "llvm/DebugInfo/DIContext.h"
18 #include "llvm/DebugInfo/Symbolize/SymbolizableModule.h"
19 #include "llvm/Support/ErrorOr.h"
24 #include <system_error>
32 class SymbolizableObjectFile
: public SymbolizableModule
{
34 static ErrorOr
<std::unique_ptr
<SymbolizableObjectFile
>>
35 create(object::ObjectFile
*Obj
, std::unique_ptr
<DIContext
> DICtx
);
37 DILineInfo
symbolizeCode(uint64_t ModuleOffset
, FunctionNameKind FNKind
,
38 bool UseSymbolTable
) const override
;
39 DIInliningInfo
symbolizeInlinedCode(uint64_t ModuleOffset
,
40 FunctionNameKind FNKind
,
41 bool UseSymbolTable
) const override
;
42 DIGlobal
symbolizeData(uint64_t ModuleOffset
) const override
;
44 // Return true if this is a 32-bit x86 PE COFF module.
45 bool isWin32Module() const override
;
47 // Returns the preferred base of the module, i.e. where the loader would place
48 // it in memory assuming there were no conflicts.
49 uint64_t getModulePreferredBase() const override
;
52 bool shouldOverrideWithSymbolTable(FunctionNameKind FNKind
,
53 bool UseSymbolTable
) const;
55 bool getNameFromSymbolTable(object::SymbolRef::Type Type
, uint64_t Address
,
56 std::string
&Name
, uint64_t &Addr
,
57 uint64_t &Size
) const;
58 // For big-endian PowerPC64 ELF, OpdAddress is the address of the .opd
59 // (function descriptor) section and OpdExtractor refers to its contents.
60 std::error_code
addSymbol(const object::SymbolRef
&Symbol
,
62 DataExtractor
*OpdExtractor
= nullptr,
63 uint64_t OpdAddress
= 0);
64 std::error_code
addCoffExportSymbols(const object::COFFObjectFile
*CoffObj
);
66 object::ObjectFile
*Module
;
67 std::unique_ptr
<DIContext
> DebugInfoContext
;
71 // If size is 0, assume that symbol occupies the whole memory range up to
72 // the following symbol.
75 friend bool operator<(const SymbolDesc
&s1
, const SymbolDesc
&s2
) {
76 return s1
.Addr
< s2
.Addr
;
79 std::map
<SymbolDesc
, StringRef
> Functions
;
80 std::map
<SymbolDesc
, StringRef
> Objects
;
82 SymbolizableObjectFile(object::ObjectFile
*Obj
,
83 std::unique_ptr
<DIContext
> DICtx
);
86 } // end namespace symbolize
88 } // end namespace llvm
90 #endif // LLVM_LIB_DEBUGINFO_SYMBOLIZE_SYMBOLIZABLEOBJECTFILE_H