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