003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/lib/DebugInfo/PDB/Native
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
lib
/
DebugInfo
/
PDB
/
Native
/
📁
..
📄
DbiModuleDescriptor.cpp
(2.5 KB)
📄
DbiModuleDescriptorBuilder.cpp
(6.63 KB)
📄
DbiModuleList.cpp
(8.3 KB)
📄
DbiStream.cpp
(12.8 KB)
📄
DbiStreamBuilder.cpp
(14.82 KB)
📄
EnumTables.cpp
(1.33 KB)
📄
GSIStreamBuilder.cpp
(17.23 KB)
📄
GlobalsStream.cpp
(6.56 KB)
📄
Hash.cpp
(2.39 KB)
📄
HashTable.cpp
(2.55 KB)
📄
InfoStream.cpp
(3.94 KB)
📄
InfoStreamBuilder.cpp
(2.67 KB)
📄
InjectedSourceStream.cpp
(2.31 KB)
📄
ModuleDebugStream.cpp
(4.74 KB)
📄
NamedStreamMap.cpp
(4.2 KB)
📄
NativeCompilandSymbol.cpp
(2.22 KB)
📄
NativeEnumGlobals.cpp
(1.87 KB)
📄
NativeEnumInjectedSources.cpp
(4.05 KB)
📄
NativeEnumLineNumbers.cpp
(1.44 KB)
📄
NativeEnumModules.cpp
(1.36 KB)
📄
NativeEnumTypes.cpp
(2.62 KB)
📄
NativeExeSymbol.cpp
(3.25 KB)
📄
NativeFunctionSymbol.cpp
(2.12 KB)
📄
NativeLineNumber.cpp
(1.88 KB)
📄
NativePublicSymbol.cpp
(1.92 KB)
📄
NativeRawSymbol.cpp
(14.98 KB)
📄
NativeSession.cpp
(12.36 KB)
📄
NativeSourceFile.cpp
(1.47 KB)
📄
NativeSymbolEnumerator.cpp
(4.24 KB)
📄
NativeTypeArray.cpp
(2.6 KB)
📄
NativeTypeBuiltin.cpp
(1.67 KB)
📄
NativeTypeEnum.cpp
(12.55 KB)
📄
NativeTypeFunctionSig.cpp
(7.3 KB)
📄
NativeTypePointer.cpp
(6.41 KB)
📄
NativeTypeTypedef.cpp
(1.05 KB)
📄
NativeTypeUDT.cpp
(6.93 KB)
📄
NativeTypeVTShape.cpp
(1.42 KB)
📄
PDBFile.cpp
(16.2 KB)
📄
PDBFileBuilder.cpp
(11 KB)
📄
PDBStringTable.cpp
(4.53 KB)
📄
PDBStringTableBuilder.cpp
(6.88 KB)
📄
PublicsStream.cpp
(3.89 KB)
📄
RawError.cpp
(2.13 KB)
📄
SymbolCache.cpp
(22.39 KB)
📄
SymbolStream.cpp
(1.4 KB)
📄
TpiHashing.cpp
(4.32 KB)
📄
TpiStream.cpp
(7.85 KB)
📄
TpiStreamBuilder.cpp
(6.32 KB)
Editing: NativeTypeFunctionSig.cpp
//===- NativeTypeFunctionSig.cpp - info about function signature -*- C++-*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/PDB/Native/NativeTypeFunctionSig.h" #include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h" #include "llvm/DebugInfo/PDB/Native/NativeEnumTypes.h" #include "llvm/DebugInfo/PDB/PDBExtras.h" #include "llvm/DebugInfo/PDB/Native/PDBFile.h" #include "llvm/DebugInfo/PDB/Native/TpiStream.h" using namespace llvm; using namespace llvm::codeview; using namespace llvm::pdb; namespace { // This is kind of a silly class, hence why we keep it private to the file. // It's only purpose is to wrap the real type record. I guess this is so that // we can have the lexical parent point to the function instead of the global // scope. class NativeTypeFunctionArg : public NativeRawSymbol { public: NativeTypeFunctionArg(NativeSession &Session, std::unique_ptr<PDBSymbol> RealType) : NativeRawSymbol(Session, PDB_SymType::FunctionArg, 0), RealType(std::move(RealType)) {} void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, PdbSymbolIdField RecurseIdFields) const override { NativeRawSymbol::dump(OS, Indent, ShowIdFields, RecurseIdFields); dumpSymbolIdField(OS, "typeId", getTypeId(), Indent, Session, PdbSymbolIdField::Type, ShowIdFields, RecurseIdFields); } SymIndexId getTypeId() const override { return RealType->getSymIndexId(); } std::unique_ptr<PDBSymbol> RealType; }; class NativeEnumFunctionArgs : public IPDBEnumChildren<PDBSymbol> { public: NativeEnumFunctionArgs(NativeSession &Session, std::unique_ptr<NativeEnumTypes> TypeEnumerator) : Session(Session), TypeEnumerator(std::move(TypeEnumerator)) {} uint32_t getChildCount() const override { return TypeEnumerator->getChildCount(); } std::unique_ptr<PDBSymbol> getChildAtIndex(uint32_t Index) const override { return wrap(TypeEnumerator->getChildAtIndex(Index)); } std::unique_ptr<PDBSymbol> getNext() override { return wrap(TypeEnumerator->getNext()); } void reset() override { TypeEnumerator->reset(); } private: std::unique_ptr<PDBSymbol> wrap(std::unique_ptr<PDBSymbol> S) const { if (!S) return nullptr; auto NTFA = std::make_unique<NativeTypeFunctionArg>(Session, std::move(S)); return PDBSymbol::create(Session, std::move(NTFA)); } NativeSession &Session; std::unique_ptr<NativeEnumTypes> TypeEnumerator; }; } // namespace NativeTypeFunctionSig::NativeTypeFunctionSig(NativeSession &Session, SymIndexId Id, codeview::TypeIndex Index, codeview::ProcedureRecord Proc) : NativeRawSymbol(Session, PDB_SymType::FunctionSig, Id), Proc(std::move(Proc)), Index(Index), IsMemberFunction(false) {} NativeTypeFunctionSig::NativeTypeFunctionSig( NativeSession &Session, SymIndexId Id, codeview::TypeIndex Index, codeview::MemberFunctionRecord MemberFunc) : NativeRawSymbol(Session, PDB_SymType::FunctionSig, Id), MemberFunc(std::move(MemberFunc)), Index(Index), IsMemberFunction(true) {} void NativeTypeFunctionSig::initialize() { if (IsMemberFunction) { ClassParentId = Session.getSymbolCache().findSymbolByTypeIndex(MemberFunc.ClassType); initializeArgList(MemberFunc.ArgumentList); } else { initializeArgList(Proc.ArgumentList); } } NativeTypeFunctionSig::~NativeTypeFunctionSig() {} void NativeTypeFunctionSig::initializeArgList(codeview::TypeIndex ArgListTI) { TpiStream &Tpi = cantFail(Session.getPDBFile().getPDBTpiStream()); CVType CVT = Tpi.typeCollection().getType(ArgListTI); cantFail(TypeDeserializer::deserializeAs<ArgListRecord>(CVT, ArgList)); } void NativeTypeFunctionSig::dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, PdbSymbolIdField RecurseIdFields) const { NativeRawSymbol::dump(OS, Indent, ShowIdFields, RecurseIdFields); dumpSymbolIdField(OS, "lexicalParentId", 0, Indent, Session, PdbSymbolIdField::LexicalParent, ShowIdFields, RecurseIdFields); dumpSymbolField(OS, "callingConvention", getCallingConvention(), Indent); dumpSymbolField(OS, "count", getCount(), Indent); dumpSymbolIdField(OS, "typeId", getTypeId(), Indent, Session, PdbSymbolIdField::Type, ShowIdFields, RecurseIdFields); if (IsMemberFunction) dumpSymbolField(OS, "thisAdjust", getThisAdjust(), Indent); dumpSymbolField(OS, "constructor", hasConstructor(), Indent); dumpSymbolField(OS, "constType", isConstType(), Indent); dumpSymbolField(OS, "isConstructorVirtualBase", isConstructorVirtualBase(), Indent); dumpSymbolField(OS, "isCxxReturnUdt", isCxxReturnUdt(), Indent); dumpSymbolField(OS, "unalignedType", isUnalignedType(), Indent); dumpSymbolField(OS, "volatileType", isVolatileType(), Indent); } std::unique_ptr<IPDBEnumSymbols> NativeTypeFunctionSig::findChildren(PDB_SymType Type) const { if (Type != PDB_SymType::FunctionArg) return std::make_unique<NullEnumerator<PDBSymbol>>(); auto NET = std::make_unique<NativeEnumTypes>(Session, /* copy */ ArgList.ArgIndices); return std::unique_ptr<IPDBEnumSymbols>( new NativeEnumFunctionArgs(Session, std::move(NET))); } SymIndexId NativeTypeFunctionSig::getClassParentId() const { if (!IsMemberFunction) return 0; return ClassParentId; } PDB_CallingConv NativeTypeFunctionSig::getCallingConvention() const { return IsMemberFunction ? MemberFunc.CallConv : Proc.CallConv; } uint32_t NativeTypeFunctionSig::getCount() const { return IsMemberFunction ? (1 + MemberFunc.getParameterCount()) : Proc.getParameterCount(); } SymIndexId NativeTypeFunctionSig::getTypeId() const { TypeIndex ReturnTI = IsMemberFunction ? MemberFunc.getReturnType() : Proc.getReturnType(); SymIndexId Result = Session.getSymbolCache().findSymbolByTypeIndex(ReturnTI); return Result; } int32_t NativeTypeFunctionSig::getThisAdjust() const { return IsMemberFunction ? MemberFunc.getThisPointerAdjustment() : 0; } bool NativeTypeFunctionSig::hasConstructor() const { if (!IsMemberFunction) return false; return (MemberFunc.getOptions() & FunctionOptions::Constructor) != FunctionOptions::None; } bool NativeTypeFunctionSig::isConstType() const { return false; } bool NativeTypeFunctionSig::isConstructorVirtualBase() const { if (!IsMemberFunction) return false; return (MemberFunc.getOptions() & FunctionOptions::ConstructorWithVirtualBases) != FunctionOptions::None; } bool NativeTypeFunctionSig::isCxxReturnUdt() const { FunctionOptions Options = IsMemberFunction ? MemberFunc.getOptions() : Proc.getOptions(); return (Options & FunctionOptions::CxxReturnUdt) != FunctionOptions::None; } bool NativeTypeFunctionSig::isUnalignedType() const { return false; } bool NativeTypeFunctionSig::isVolatileType() const { return false; }
Upload File
Create Folder