xref: /llvm-project/llvm/lib/DebugInfo/PDB/Native/NativePublicSymbol.cpp (revision eb4c8608115c1c9af0fc8cb5b1e9f2bc960014ef)
1641ae73fSAmy Huang //===- NativePublicSymbol.cpp - info about public symbols -------*- C++ -*-===//
2641ae73fSAmy Huang //
3641ae73fSAmy Huang // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4641ae73fSAmy Huang // See https://llvm.org/LICENSE.txt for license information.
5641ae73fSAmy Huang // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6641ae73fSAmy Huang //
7641ae73fSAmy Huang //===----------------------------------------------------------------------===//
8641ae73fSAmy Huang 
9641ae73fSAmy Huang #include "llvm/DebugInfo/PDB/Native/NativePublicSymbol.h"
10641ae73fSAmy Huang 
11641ae73fSAmy Huang #include "llvm/DebugInfo/CodeView/SymbolRecord.h"
12*eb4c8608Sserge-sans-paille #include "llvm/DebugInfo/PDB/Native/NativeSession.h"
13641ae73fSAmy Huang 
14641ae73fSAmy Huang using namespace llvm;
15641ae73fSAmy Huang using namespace llvm::codeview;
16641ae73fSAmy Huang using namespace llvm::pdb;
17641ae73fSAmy Huang 
NativePublicSymbol(NativeSession & Session,SymIndexId Id,const codeview::PublicSym32 & Sym)18641ae73fSAmy Huang NativePublicSymbol::NativePublicSymbol(NativeSession &Session, SymIndexId Id,
19641ae73fSAmy Huang                                        const codeview::PublicSym32 &Sym)
200881d0beSAmy Huang     : NativeRawSymbol(Session, PDB_SymType::PublicSymbol, Id), Sym(Sym) {}
21641ae73fSAmy Huang 
223a3cb929SKazu Hirata NativePublicSymbol::~NativePublicSymbol() = default;
23641ae73fSAmy Huang 
dump(raw_ostream & OS,int Indent,PdbSymbolIdField ShowIdFields,PdbSymbolIdField RecurseIdFields) const24641ae73fSAmy Huang void NativePublicSymbol::dump(raw_ostream &OS, int Indent,
25641ae73fSAmy Huang                               PdbSymbolIdField ShowIdFields,
26641ae73fSAmy Huang                               PdbSymbolIdField RecurseIdFields) const {
27641ae73fSAmy Huang   NativeRawSymbol::dump(OS, Indent, ShowIdFields, RecurseIdFields);
28641ae73fSAmy Huang   dumpSymbolField(OS, "name", getName(), Indent);
29641ae73fSAmy Huang   dumpSymbolField(OS, "offset", getAddressOffset(), Indent);
30641ae73fSAmy Huang   dumpSymbolField(OS, "section", getAddressSection(), Indent);
31641ae73fSAmy Huang }
32641ae73fSAmy Huang 
getAddressOffset() const33641ae73fSAmy Huang uint32_t NativePublicSymbol::getAddressOffset() const { return Sym.Offset; }
34641ae73fSAmy Huang 
getAddressSection() const35641ae73fSAmy Huang uint32_t NativePublicSymbol::getAddressSection() const { return Sym.Segment; }
36641ae73fSAmy Huang 
getName() const37641ae73fSAmy Huang std::string NativePublicSymbol::getName() const {
38641ae73fSAmy Huang   return std::string(Sym.Name);
39641ae73fSAmy Huang }
40641ae73fSAmy Huang 
getRelativeVirtualAddress() const41641ae73fSAmy Huang uint32_t NativePublicSymbol::getRelativeVirtualAddress() const {
42641ae73fSAmy Huang   return Session.getRVAFromSectOffset(Sym.Segment, Sym.Offset);
43641ae73fSAmy Huang }
44641ae73fSAmy Huang 
getVirtualAddress() const45641ae73fSAmy Huang uint64_t NativePublicSymbol::getVirtualAddress() const {
46641ae73fSAmy Huang   return Session.getVAFromSectOffset(Sym.Segment, Sym.Offset);
47641ae73fSAmy Huang }
48