xref: /freebsd-src/contrib/llvm-project/llvm/lib/DebugInfo/PDB/Native/NativeFunctionSymbol.cpp (revision 5ffd83dbcc34f10e07f6d3e968ae6365869615f4)
1*5ffd83dbSDimitry Andric //===- NativeFunctionSymbol.cpp - info about function symbols----*- C++ -*-===//
2*5ffd83dbSDimitry Andric //
3*5ffd83dbSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*5ffd83dbSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*5ffd83dbSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*5ffd83dbSDimitry Andric //
7*5ffd83dbSDimitry Andric //===----------------------------------------------------------------------===//
8*5ffd83dbSDimitry Andric 
9*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeFunctionSymbol.h"
10*5ffd83dbSDimitry Andric 
11*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/CodeView/SymbolRecord.h"
12*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeTypeBuiltin.h"
13*5ffd83dbSDimitry Andric #include "llvm/DebugInfo/PDB/Native/NativeTypeEnum.h"
14*5ffd83dbSDimitry Andric 
15*5ffd83dbSDimitry Andric using namespace llvm;
16*5ffd83dbSDimitry Andric using namespace llvm::codeview;
17*5ffd83dbSDimitry Andric using namespace llvm::pdb;
18*5ffd83dbSDimitry Andric 
19*5ffd83dbSDimitry Andric NativeFunctionSymbol::NativeFunctionSymbol(NativeSession &Session,
20*5ffd83dbSDimitry Andric                                            SymIndexId Id,
21*5ffd83dbSDimitry Andric                                            const codeview::ProcSym &Sym)
22*5ffd83dbSDimitry Andric     : NativeRawSymbol(Session, PDB_SymType::Data, Id), Sym(Sym) {}
23*5ffd83dbSDimitry Andric 
24*5ffd83dbSDimitry Andric NativeFunctionSymbol::~NativeFunctionSymbol() {}
25*5ffd83dbSDimitry Andric 
26*5ffd83dbSDimitry Andric void NativeFunctionSymbol::dump(raw_ostream &OS, int Indent,
27*5ffd83dbSDimitry Andric                                 PdbSymbolIdField ShowIdFields,
28*5ffd83dbSDimitry Andric                                 PdbSymbolIdField RecurseIdFields) const {
29*5ffd83dbSDimitry Andric   NativeRawSymbol::dump(OS, Indent, ShowIdFields, RecurseIdFields);
30*5ffd83dbSDimitry Andric   dumpSymbolField(OS, "name", getName(), Indent);
31*5ffd83dbSDimitry Andric   dumpSymbolField(OS, "length", getLength(), Indent);
32*5ffd83dbSDimitry Andric   dumpSymbolField(OS, "offset", getAddressOffset(), Indent);
33*5ffd83dbSDimitry Andric   dumpSymbolField(OS, "section", getAddressSection(), Indent);
34*5ffd83dbSDimitry Andric }
35*5ffd83dbSDimitry Andric 
36*5ffd83dbSDimitry Andric uint32_t NativeFunctionSymbol::getAddressOffset() const {
37*5ffd83dbSDimitry Andric   return Sym.CodeOffset;
38*5ffd83dbSDimitry Andric }
39*5ffd83dbSDimitry Andric 
40*5ffd83dbSDimitry Andric uint32_t NativeFunctionSymbol::getAddressSection() const { return Sym.Segment; }
41*5ffd83dbSDimitry Andric std::string NativeFunctionSymbol::getName() const {
42*5ffd83dbSDimitry Andric   return std::string(Sym.Name);
43*5ffd83dbSDimitry Andric }
44*5ffd83dbSDimitry Andric 
45*5ffd83dbSDimitry Andric PDB_SymType NativeFunctionSymbol::getSymTag() const {
46*5ffd83dbSDimitry Andric   return PDB_SymType::Function;
47*5ffd83dbSDimitry Andric }
48*5ffd83dbSDimitry Andric 
49*5ffd83dbSDimitry Andric uint64_t NativeFunctionSymbol::getLength() const { return Sym.CodeSize; }
50*5ffd83dbSDimitry Andric 
51*5ffd83dbSDimitry Andric uint32_t NativeFunctionSymbol::getRelativeVirtualAddress() const {
52*5ffd83dbSDimitry Andric   return Session.getRVAFromSectOffset(Sym.Segment, Sym.CodeOffset);
53*5ffd83dbSDimitry Andric }
54*5ffd83dbSDimitry Andric 
55*5ffd83dbSDimitry Andric uint64_t NativeFunctionSymbol::getVirtualAddress() const {
56*5ffd83dbSDimitry Andric   return Session.getVAFromSectOffset(Sym.Segment, Sym.CodeOffset);
57*5ffd83dbSDimitry Andric }
58