xref: /freebsd-src/contrib/llvm-project/llvm/lib/DebugInfo/PDB/Native/NativePublicSymbol.cpp (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
15ffd83dbSDimitry Andric //===- NativePublicSymbol.cpp - info about public symbols -------*- C++ -*-===//
25ffd83dbSDimitry Andric //
35ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
45ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
55ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65ffd83dbSDimitry Andric //
75ffd83dbSDimitry Andric //===----------------------------------------------------------------------===//
85ffd83dbSDimitry Andric 
95ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativePublicSymbol.h"
105ffd83dbSDimitry Andric 
115ffd83dbSDimitry Andric #include "llvm/DebugInfo/CodeView/SymbolRecord.h"
12*81ad6265SDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeSession.h"
135ffd83dbSDimitry Andric 
145ffd83dbSDimitry Andric using namespace llvm;
155ffd83dbSDimitry Andric using namespace llvm::codeview;
165ffd83dbSDimitry Andric using namespace llvm::pdb;
175ffd83dbSDimitry Andric 
NativePublicSymbol(NativeSession & Session,SymIndexId Id,const codeview::PublicSym32 & Sym)185ffd83dbSDimitry Andric NativePublicSymbol::NativePublicSymbol(NativeSession &Session, SymIndexId Id,
195ffd83dbSDimitry Andric                                        const codeview::PublicSym32 &Sym)
20e8d8bef9SDimitry Andric     : NativeRawSymbol(Session, PDB_SymType::PublicSymbol, Id), Sym(Sym) {}
215ffd83dbSDimitry Andric 
22*81ad6265SDimitry Andric NativePublicSymbol::~NativePublicSymbol() = default;
235ffd83dbSDimitry Andric 
dump(raw_ostream & OS,int Indent,PdbSymbolIdField ShowIdFields,PdbSymbolIdField RecurseIdFields) const245ffd83dbSDimitry Andric void NativePublicSymbol::dump(raw_ostream &OS, int Indent,
255ffd83dbSDimitry Andric                               PdbSymbolIdField ShowIdFields,
265ffd83dbSDimitry Andric                               PdbSymbolIdField RecurseIdFields) const {
275ffd83dbSDimitry Andric   NativeRawSymbol::dump(OS, Indent, ShowIdFields, RecurseIdFields);
285ffd83dbSDimitry Andric   dumpSymbolField(OS, "name", getName(), Indent);
295ffd83dbSDimitry Andric   dumpSymbolField(OS, "offset", getAddressOffset(), Indent);
305ffd83dbSDimitry Andric   dumpSymbolField(OS, "section", getAddressSection(), Indent);
315ffd83dbSDimitry Andric }
325ffd83dbSDimitry Andric 
getAddressOffset() const335ffd83dbSDimitry Andric uint32_t NativePublicSymbol::getAddressOffset() const { return Sym.Offset; }
345ffd83dbSDimitry Andric 
getAddressSection() const355ffd83dbSDimitry Andric uint32_t NativePublicSymbol::getAddressSection() const { return Sym.Segment; }
365ffd83dbSDimitry Andric 
getName() const375ffd83dbSDimitry Andric std::string NativePublicSymbol::getName() const {
385ffd83dbSDimitry Andric   return std::string(Sym.Name);
395ffd83dbSDimitry Andric }
405ffd83dbSDimitry Andric 
getRelativeVirtualAddress() const415ffd83dbSDimitry Andric uint32_t NativePublicSymbol::getRelativeVirtualAddress() const {
425ffd83dbSDimitry Andric   return Session.getRVAFromSectOffset(Sym.Segment, Sym.Offset);
435ffd83dbSDimitry Andric }
445ffd83dbSDimitry Andric 
getVirtualAddress() const455ffd83dbSDimitry Andric uint64_t NativePublicSymbol::getVirtualAddress() const {
465ffd83dbSDimitry Andric   return Session.getVAFromSectOffset(Sym.Segment, Sym.Offset);
475ffd83dbSDimitry Andric }
48