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