diff options
author | Amy Huang <akhuang@google.com> | 2020-03-16 09:53:49 -0700 |
---|---|---|
committer | Amy Huang <akhuang@google.com> | 2020-05-13 09:39:25 -0700 |
commit | 641ae73f2eba1a4c52d8ddeefad44f26cc7530f3 (patch) | |
tree | 533bca8e2b441adddde2ba0eacf7fc0453a2b847 /llvm/lib/DebugInfo/PDB/Native/NativeFunctionSymbol.cpp | |
parent | a8bf2deae4f1e96857c8869f9931f5adb469e929 (diff) | |
download | llvm-641ae73f2eba1a4c52d8ddeefad44f26cc7530f3.zip llvm-641ae73f2eba1a4c52d8ddeefad44f26cc7530f3.tar.gz llvm-641ae73f2eba1a4c52d8ddeefad44f26cc7530f3.tar.bz2 |
[NativeSession] Implement NativeSession::findSymbolByAddress.
Summary: This implements searching for function symbols and public symbols by address.
More specifically,
-Implements NativeSession::findSymbolByAddress for function symbols and
public symbols. I think data symbols are also searched for, but isn't
implemented in this patch.
-Adds classes for NativeFunctionSymbol and NativePublicSymbol
-Adds a '-use-native-pdb-reader' option to llvm-symbolizer, for testing
purposes.
Reviewers: rnk, amccarth, labath
Subscribers: mgorny, hiraditya, MaskRay, rupprecht, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D79269
Diffstat (limited to 'llvm/lib/DebugInfo/PDB/Native/NativeFunctionSymbol.cpp')
-rw-r--r-- | llvm/lib/DebugInfo/PDB/Native/NativeFunctionSymbol.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/llvm/lib/DebugInfo/PDB/Native/NativeFunctionSymbol.cpp b/llvm/lib/DebugInfo/PDB/Native/NativeFunctionSymbol.cpp new file mode 100644 index 0000000..2537daa --- /dev/null +++ b/llvm/lib/DebugInfo/PDB/Native/NativeFunctionSymbol.cpp @@ -0,0 +1,57 @@ +//===- NativeFunctionSymbol.cpp - info about function symbols----*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "llvm/DebugInfo/PDB/Native/NativeFunctionSymbol.h" + +#include "llvm/DebugInfo/CodeView/SymbolRecord.h" +#include "llvm/DebugInfo/PDB/Native/NativeTypeBuiltin.h" +#include "llvm/DebugInfo/PDB/Native/NativeTypeEnum.h" + +using namespace llvm; +using namespace llvm::codeview; +using namespace llvm::pdb; + +NativeFunctionSymbol::NativeFunctionSymbol(NativeSession &Session, + SymIndexId Id, + const codeview::ProcSym &Sym) + : NativeRawSymbol(Session, PDB_SymType::Data, Id), Sym(Sym) {} + +NativeFunctionSymbol::~NativeFunctionSymbol() {} + +void NativeFunctionSymbol::dump(raw_ostream &OS, int Indent, + PdbSymbolIdField ShowIdFields, + PdbSymbolIdField RecurseIdFields) const { + NativeRawSymbol::dump(OS, Indent, ShowIdFields, RecurseIdFields); + dumpSymbolField(OS, "name", getName(), Indent); + dumpSymbolField(OS, "length", getLength(), Indent); + dumpSymbolField(OS, "offset", getAddressOffset(), Indent); + dumpSymbolField(OS, "section", getAddressSection(), Indent); +} + +uint32_t NativeFunctionSymbol::getAddressOffset() const { + return Sym.CodeOffset; +} + +uint32_t NativeFunctionSymbol::getAddressSection() const { return Sym.Segment; } +std::string NativeFunctionSymbol::getName() const { + return std::string(Sym.Name); +} + +PDB_SymType NativeFunctionSymbol::getSymTag() const { + return PDB_SymType::Function; +} + +uint64_t NativeFunctionSymbol::getLength() const { return Sym.CodeSize; } + +uint32_t NativeFunctionSymbol::getRelativeVirtualAddress() const { + return Session.getRVAFromSectOffset(Sym.Segment, Sym.CodeOffset); +} + +uint64_t NativeFunctionSymbol::getVirtualAddress() const { + return Session.getVAFromSectOffset(Sym.Segment, Sym.CodeOffset); +} |