From eee2fc9476857718057ce42dd56a75a77ff2135f Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 24 Sep 2014 20:24:19 +0100 Subject: [PATCH] Inline the couple of DIA interfaces used so USE_DIA isn't needed --- README.md | 2 - pdblocate/pdblocate.cpp | 279 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 258 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 4cf671b61..f336e425e 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,6 @@ The main [renderdoc.sln](renderdoc.sln) is a VS2010 solution. To build on later The only external dependency should be the Windows 8.1 SDK. The 8.0 SDK should also work fine, but [the vcxproj](renderdoc/renderdoc.vcxproj) is set up to look in `$(ProgramFiles)\Windows Kits\8.1\` for the necessary paths. If your SDK is installed elsewhere you'll also need to change these locally. You can also compile only against the June 2010 DirectX SDK if you undefine `INCLUDE_D3D_11_1` in `d3d11_common.h`. -If you are on VS express you won't have the DIA SDK, so set `USE_DIA` 0 in [pdblocate.cpp](pdblocate/pdblocate.cpp) and you'll just lose callstack symbol resolution. - Profile is recommended for day-to-day dev. It's debuggable but not too slow. Release is obviously what you should build for any builds you'll send out to people or if you want to evaluate performance. ### Linux ### diff --git a/pdblocate/pdblocate.cpp b/pdblocate/pdblocate.cpp index c9fe15a43..397f0cbfb 100644 --- a/pdblocate/pdblocate.cpp +++ b/pdblocate/pdblocate.cpp @@ -22,8 +22,6 @@ * THE SOFTWARE. ******************************************************************************/ -#define USE_DIA 1 - #include #include @@ -41,14 +39,262 @@ using std::vector; using std::wstring; -#if USE_DIA -// if you don't have dia2.h (only included with VS pro and above) -// set USE_DIA to 1. Everything will compile but symbol resolution -// for callstacks will not work. -// If you need this, you could always drop in a pre-compiled pdblocate -// from a normal build as this file/project changes very rarely. -#include -#include +// Inline the couple of necessary definitions from dia2.h below +//#include + +// don't need these +struct IDiaEnumSymbols; +struct IDiaEnumTables; +struct IDiaEnumSymbolsByAddr; +struct IDiaEnumSourceFiles; +struct IDiaEnumInjectedSources; +struct IDiaEnumDebugStreams; + +enum SymTagEnum +{ + SymTagFunction = 5, +}; + +struct IDiaSourceFile : public IUnknown +{ + virtual HRESULT STDMETHODCALLTYPE get_uniqueId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_fileName(BSTR *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_checksumType(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_compilands(IDiaEnumSymbols **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_checksum(DWORD cbData, DWORD *pcbData, BYTE *pbData) = 0; +}; + +struct IDiaSymbol : public IUnknown +{ + virtual HRESULT STDMETHODCALLTYPE get_symIndexId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_symTag(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_name(BSTR *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_lexicalParent(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_classParent(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_type(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_dataKind(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_locationType(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_addressSection(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_addressOffset(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_relativeVirtualAddress(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtualAddress(ULONGLONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_registerId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_offset(LONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_length(ULONGLONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_slot(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_volatileType(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_constType(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_unalignedType(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_access(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_libraryName(BSTR *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_platform(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_language(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_editAndContinueEnabled(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_frontEndMajor(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_frontEndMinor(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_frontEndBuild(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_backEndMajor(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_backEndMinor(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_backEndBuild(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_sourceFileName(BSTR *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_unused(BSTR *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_thunkOrdinal(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_thisAdjust(LONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtualBaseOffset(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtual(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_intro(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_pure(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_callingConvention(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_value(VARIANT *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_baseType(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_token(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_timeStamp(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_guid(GUID *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_symbolsFileName(BSTR *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_reference(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_count(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_bitPosition(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_arrayIndexType(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_packed(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_constructor(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_overloadedOperator(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_nested(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasNestedTypes(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasAssignmentOperator(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasCastOperator(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_scoped(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtualBaseClass(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_indirectVirtualBaseClass(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtualBasePointerOffset(LONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtualTableShape(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_lexicalParentId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_classParentId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_typeId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_arrayIndexTypeId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtualTableShapeId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_code(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_function(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_managed(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_msil(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtualBaseDispIndex(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_undecoratedName(BSTR *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_age(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_signature(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_compilerGenerated(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_addressTaken(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_rank(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_lowerBound(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_upperBound(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_lowerBoundId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_upperBoundId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_dataBytes(DWORD cbData, DWORD *pcbData, BYTE *pbData) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildren(enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildrenEx(enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildrenExByAddr(enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, DWORD isect, DWORD offset, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildrenExByVA(enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, ULONGLONG va, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildrenExByRVA(enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, DWORD rva, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE get_targetSection(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_targetOffset(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_targetRelativeVirtualAddress(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_targetVirtualAddress(ULONGLONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_machineType(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_oemId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_oemSymbolId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_types(DWORD cTypes, DWORD *pcTypes, IDiaSymbol **pTypes) = 0; + virtual HRESULT STDMETHODCALLTYPE get_typeIds(DWORD cTypeIds, DWORD *pcTypeIds, DWORD *pdwTypeIds) = 0; + virtual HRESULT STDMETHODCALLTYPE get_objectPointerType(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_udtKind(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_undecoratedNameEx(DWORD undecorateOptions, BSTR *name) = 0; + virtual HRESULT STDMETHODCALLTYPE get_noReturn(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_customCallingConvention(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_noInline(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_optimizedCodeDebugInfo(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_notReached(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_interruptReturn(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_farReturn(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isStatic(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasDebugInfo(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isLTCG(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isDataAligned(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasSecurityChecks(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_compilerName(BSTR *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasAlloca(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasSetJump(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasLongJump(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasInlAsm(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasEH(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasSEH(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasEHa(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isNaked(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isAggregated(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isSplitted(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_container(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_inlSpec(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_noStackOrdering(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtualBaseTableType(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hasManagedCode(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isHotpatchable(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isCVTCIL(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isMSILNetmodule(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isCTypes(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isStripped(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_frontEndQFE(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_backEndQFE(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_wasInlined(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_strictGSCheck(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isCxxReturnUdt(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isConstructorVirtualBase(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_RValueReference(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_unmodifiedType(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_framePointerPresent(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_isSafeBuffers(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_intrinsic(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_sealed(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hfaFloat(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_hfaDouble(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_liveRangeStartAddressSection(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_liveRangeStartAddressOffset(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_liveRangeStartRelativeVirtualAddress(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_countLiveRanges(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_liveRangeLength(ULONGLONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_offsetInUdt(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_paramBasePointerRegisterId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_localBasePointerRegisterId(DWORD *pRetVal) = 0; +}; + +struct IDiaLineNumber : public IUnknown +{ +public: + virtual HRESULT STDMETHODCALLTYPE get_compiland(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_sourceFile(IDiaSourceFile **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_lineNumber(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_lineNumberEnd(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_columnNumber(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_columnNumberEnd(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_addressSection(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_addressOffset(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_relativeVirtualAddress(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_virtualAddress(ULONGLONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_length(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_sourceFileId(DWORD *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_statement(BOOL *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_compilandId(DWORD *pRetVal) = 0; +}; + +struct IDiaEnumLineNumbers : public IUnknown +{ + virtual HRESULT STDMETHODCALLTYPE get__NewEnum(IUnknown **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_Count(LONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE Item(DWORD index, IDiaLineNumber **lineNumber) = 0; + virtual HRESULT STDMETHODCALLTYPE Next(ULONG celt, IDiaLineNumber **rgelt, ULONG *pceltFetched) = 0; + virtual HRESULT STDMETHODCALLTYPE Skip(ULONG celt) = 0; + virtual HRESULT STDMETHODCALLTYPE Reset(void) = 0; + virtual HRESULT STDMETHODCALLTYPE Clone(IDiaEnumLineNumbers **ppenum) = 0; +}; + +struct IDiaSession : public IUnknown +{ + virtual HRESULT STDMETHODCALLTYPE get_loadAddress(ULONGLONG *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE put_loadAddress(ULONGLONG NewVal) = 0; + virtual HRESULT STDMETHODCALLTYPE get_globalScope(IDiaSymbol **pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE getEnumTables(IDiaEnumTables **ppEnumTables) = 0; + virtual HRESULT STDMETHODCALLTYPE getSymbolsByAddr(IDiaEnumSymbolsByAddr **ppEnumbyAddr) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildren(IDiaSymbol *parent, enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildrenEx(IDiaSymbol *parent, enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildrenExByAddr(IDiaSymbol *parent, enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, DWORD isect, DWORD offset, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildrenExByVA(IDiaSymbol *parent, enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, ULONGLONG va, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findChildrenExByRVA(IDiaSymbol *parent, enum SymTagEnum symtag, LPCOLESTR name, DWORD compareFlags, DWORD rva, IDiaEnumSymbols **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findSymbolByAddr(DWORD isect, DWORD offset, enum SymTagEnum symtag, IDiaSymbol **ppSymbol) = 0; + virtual HRESULT STDMETHODCALLTYPE findSymbolByRVA(DWORD rva, enum SymTagEnum symtag, IDiaSymbol **ppSymbol) = 0; + virtual HRESULT STDMETHODCALLTYPE findSymbolByVA(ULONGLONG va, enum SymTagEnum symtag, IDiaSymbol **ppSymbol) = 0; + virtual HRESULT STDMETHODCALLTYPE findSymbolByToken(ULONG token, enum SymTagEnum symtag, IDiaSymbol **ppSymbol) = 0; + virtual HRESULT STDMETHODCALLTYPE symsAreEquiv(IDiaSymbol *symbolA, IDiaSymbol *symbolB) = 0; + virtual HRESULT STDMETHODCALLTYPE symbolById(DWORD id, IDiaSymbol **ppSymbol) = 0; + virtual HRESULT STDMETHODCALLTYPE findSymbolByRVAEx(DWORD rva, enum SymTagEnum symtag, IDiaSymbol **ppSymbol, long *displacement) = 0; + virtual HRESULT STDMETHODCALLTYPE findSymbolByVAEx(ULONGLONG va, enum SymTagEnum symtag, IDiaSymbol **ppSymbol, long *displacement) = 0; + virtual HRESULT STDMETHODCALLTYPE findFile(IDiaSymbol *pCompiland, LPCOLESTR name, DWORD compareFlags, IDiaEnumSourceFiles **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findFileById(DWORD uniqueId, IDiaSourceFile **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findLines(IDiaSymbol *compiland, IDiaSourceFile *file, IDiaEnumLineNumbers **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findLinesByAddr(DWORD seg, DWORD offset, DWORD length, IDiaEnumLineNumbers **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findLinesByRVA(DWORD rva, DWORD length, IDiaEnumLineNumbers **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findLinesByVA(ULONGLONG va, DWORD length, IDiaEnumLineNumbers **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findLinesByLinenum(IDiaSymbol *compiland, IDiaSourceFile *file, DWORD linenum, DWORD column, IDiaEnumLineNumbers **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE findInjectedSource(LPCOLESTR srcFile, IDiaEnumInjectedSources **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE getEnumDebugStreams(IDiaEnumDebugStreams **ppEnumDebugStreams) = 0; +}; + +MIDL_INTERFACE("79F1BB5F-B66E-48e5-B6A9-1545C323CA3D") +IDiaDataSource : public IUnknown +{ + virtual HRESULT STDMETHODCALLTYPE get_lastError(BSTR *pRetVal) = 0; + virtual HRESULT STDMETHODCALLTYPE loadDataFromPdb(LPCOLESTR pdbPath) = 0; + virtual HRESULT STDMETHODCALLTYPE loadAndValidateDataFromPdb(LPCOLESTR pdbPath, GUID *pcsig70, DWORD sig, DWORD age) = 0; + virtual HRESULT STDMETHODCALLTYPE loadDataForExe(LPCOLESTR executable, LPCOLESTR searchPath, IUnknown *pCallback) = 0; + virtual HRESULT STDMETHODCALLTYPE loadDataFromIStream(IStream *pIStream) = 0; + virtual HRESULT STDMETHODCALLTYPE openSession(IDiaSession **ppSession) = 0; +}; + +class DECLSPEC_UUID("B86AE24D-BF2F-4ac9-B5A2-34B14E4CE11D") DiaSource; // must match definition in callstack.h struct AddrInfo @@ -183,9 +429,6 @@ uint32_t GetModule(wstring moduleDetails) guid.Data4[6] = params[10]; guid.Data4[7] = params[11]; - USES_CONVERSION; - LPCOLESTR fName = W2COLE(pdbName); - Module m(NULL, NULL); CoCreateInstance(__uuidof(DiaSource), NULL, CLSCTX_INPROC_SERVER, __uuidof(IDiaDataSource), (void **)&m.pSource); @@ -195,11 +438,11 @@ uint32_t GetModule(wstring moduleDetails) // check this pdb is the one we expected from our chunk if(guid.Data1 == 0 && guid.Data2 == 0) { - hr = m.pSource->loadDataFromPdb( fName ); + hr = m.pSource->loadDataFromPdb( pdbName ); } else { - hr = m.pSource->loadAndValidateDataFromPdb( fName, &guid, 0, age); + hr = m.pSource->loadAndValidateDataFromPdb( pdbName, &guid, 0, age); } if(SUCCEEDED(hr)) @@ -483,9 +726,3 @@ int WINAPI wWinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, CloseHandle(pipe); return 0; } -#else -int WINAPI wWinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPWSTR lpCmdLine, __in int nShowCmd) -{ - return 2; -} -#endif