summaryrefslogtreecommitdiff
path: root/src/inc/sospriv.idl
diff options
context:
space:
mode:
Diffstat (limited to 'src/inc/sospriv.idl')
-rw-r--r--src/inc/sospriv.idl359
1 files changed, 359 insertions, 0 deletions
diff --git a/src/inc/sospriv.idl b/src/inc/sospriv.idl
new file mode 100644
index 0000000000..1f9028c8e1
--- /dev/null
+++ b/src/inc/sospriv.idl
@@ -0,0 +1,359 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+/*****************************************************************************
+ ** **
+ ** sospriv.idl - The private interface that SOS uses to query the runtime **
+ ** for internal data. **
+ ** **
+ *****************************************************************************/
+import "unknwn.idl";
+
+import "xclrdata.idl";
+
+struct DacpSyncBlockCleanupData;
+struct DacpThreadStoreData;
+struct DacpAppDomainStoreData;
+struct DacpAppDomainData;
+struct DacpAssemblyData;
+struct DacpThreadData;
+struct DacpMethodDescData;
+struct DacpCodeHeaderData;
+struct DacpThreadpoolData;
+struct DacpObjectData;
+struct DacpWorkRequestData;
+struct DacpMethodTableData;
+struct DacpWorkRequestData;
+struct DacpModuleData;
+struct DacpGcHeapData;
+struct DacpJitManagerInfo;
+struct DacpHeapSegmentData;
+struct DacpDomainLocalModuleData;
+struct DacpDomainLocalModuleData;
+struct DACEHInfo;
+struct DacpRCWData;
+struct DacpAllocData;
+struct DacpGenerationAllocData;
+struct DacpExceptionObjectData;
+cpp_quote("#if 0")
+typedef ULONG64 CLRDATA_ADDRESS;
+typedef int CONTEXT;
+typedef int T_CONTEXT;
+typedef int mdToken;
+typedef unsigned int size_t;
+typedef int ModuleMapType;
+typedef int VCSHeapType;
+cpp_quote("#endif")
+
+
+cpp_quote("typedef enum ModuleMapType { TYPEDEFTOMETHODTABLE, TYPEREFTOMETHODTABLE };")
+cpp_quote("typedef enum VCSHeapType {IndcellHeap, LookupHeap, ResolveHeap, DispatchHeap, CacheEntryHeap};")
+
+typedef void (*MODULEMAPTRAVERSE)(UINT index, CLRDATA_ADDRESS methodTable,LPVOID token);
+typedef void (*VISITHEAP)(CLRDATA_ADDRESS blockData,size_t blockSize,BOOL blockIsCurrentBlock);
+
+typedef BOOL (*VISITRCWFORCLEANUP)(CLRDATA_ADDRESS RCW,CLRDATA_ADDRESS Context,CLRDATA_ADDRESS Thread,
+ BOOL bIsFreeThreaded, LPVOID token);
+typedef BOOL (*DUMPEHINFO)(UINT clauseIndex,UINT totalClauses, struct DACEHInfo *pEHInfo,LPVOID token);
+
+cpp_quote("#ifndef _SOS_HandleData")
+cpp_quote("#define _SOS_HandleData")
+
+typedef struct _SOSHandleData
+{
+ CLRDATA_ADDRESS AppDomain;
+ CLRDATA_ADDRESS Handle;
+ CLRDATA_ADDRESS Secondary;
+ unsigned int Type;
+ BOOL StrongReference;
+
+ // For RefCounted Handles
+ unsigned int RefCount;
+ unsigned int JupiterRefCount;
+ BOOL IsPegged;
+} SOSHandleData;
+
+cpp_quote("#endif //HandleData")
+
+[
+ object,
+ local,
+ uuid(286CA186-E763-4F61-9760-487D43AE4341)
+]
+interface ISOSEnum : IUnknown
+{
+ HRESULT Skip([in] unsigned int count);
+ HRESULT Reset();
+ HRESULT GetCount([out] unsigned int *pCount);
+}
+
+
+[
+ object,
+ local,
+ uuid(3E269830-4A2B-4301-8EE2-D6805B29B2FA)
+]
+interface ISOSHandleEnum : ISOSEnum
+{
+ HRESULT Next([in] unsigned int count,
+ [out, size_is(count), length_is(*pNeeded)] SOSHandleData handles[],
+ [out] unsigned int *pNeeded);
+}
+
+cpp_quote("#ifndef _SOS_StackReference_")
+cpp_quote("#define _SOS_StackReference_")
+
+typedef enum SOSStackSourceType
+{
+ SOS_StackSourceIP, // Instuction pointer in managed code
+ SOS_StackSourceFrame, // clr!Frame
+} SOSStackSourceType;
+
+typedef enum SOSRefFlags
+{
+ SOSRefInterior = 1,
+ SOSRefPinned = 2
+} SOSRefFlags;
+
+typedef struct _SOS_StackRefData
+{
+ BOOL HasRegisterInformation;
+ int Register;
+ int Offset;
+ CLRDATA_ADDRESS Address;
+ CLRDATA_ADDRESS Object;
+ unsigned int Flags;
+
+ SOSStackSourceType SourceType;
+ CLRDATA_ADDRESS Source;
+ CLRDATA_ADDRESS StackPointer;
+} SOSStackRefData;
+
+/* Informs the user that we were unable to process the given clr!Frame or
+ * managed frame.
+ */
+typedef struct _SOS_StackRefError
+{
+ SOSStackSourceType SourceType;
+ CLRDATA_ADDRESS Source;
+ CLRDATA_ADDRESS StackPointer;
+} SOSStackRefError;
+
+cpp_quote("#endif // _SOS_StackReference_")
+
+[
+ object,
+ local,
+ uuid(774F4E1B-FB7B-491B-976D-A8130FE355E9)
+]
+interface ISOSStackRefErrorEnum : ISOSEnum
+{
+ HRESULT Next([in] unsigned int count,
+ [out, size_is(count), length_is(*pFetched)] SOSStackRefError ref[],
+ [out] unsigned int *pFetched);
+}
+
+[
+ object,
+ local,
+ uuid(8FA642BD-9F10-4799-9AA3-512AE78C77EE)
+]
+interface ISOSStackRefEnum : ISOSEnum
+{
+ HRESULT Next([in] unsigned int count,
+ [out, size_is(count), length_is(*pFetched)] SOSStackRefData ref[],
+ [out] unsigned int *pFetched);
+
+
+ /* Reports all frames which we could not enumerate gc references for.
+ */
+ HRESULT EnumerateErrors([out] ISOSStackRefErrorEnum **ppEnum);
+}
+
+
+[
+ object,
+ local,
+ uuid(436f00f2-b42a-4b9f-870c-e73db66ae930)
+]
+interface ISOSDacInterface : IUnknown
+{
+ // ThreadStore
+ HRESULT GetThreadStoreData(struct DacpThreadStoreData *data);
+
+ // AppDomains
+ HRESULT GetAppDomainStoreData(struct DacpAppDomainStoreData *data);
+ HRESULT GetAppDomainList(unsigned int count, CLRDATA_ADDRESS values[], unsigned int *pNeeded);
+ HRESULT GetAppDomainData(CLRDATA_ADDRESS addr, struct DacpAppDomainData *data);
+ HRESULT GetAppDomainName(CLRDATA_ADDRESS addr, unsigned int count, WCHAR *name, unsigned int *pNeeded);
+ HRESULT GetDomainFromContext(CLRDATA_ADDRESS context, CLRDATA_ADDRESS *domain);
+
+ // Assemblies
+ HRESULT GetAssemblyList(CLRDATA_ADDRESS appDomain, int count, CLRDATA_ADDRESS values[], int *pNeeded);
+ HRESULT GetAssemblyData(CLRDATA_ADDRESS baseDomainPtr, CLRDATA_ADDRESS assembly, struct DacpAssemblyData *data);
+ HRESULT GetAssemblyName(CLRDATA_ADDRESS assembly, unsigned int count, WCHAR *name, unsigned int *pNeeded);
+
+ // Modules
+ HRESULT GetModule(CLRDATA_ADDRESS addr, IXCLRDataModule **mod);
+ HRESULT GetModuleData(CLRDATA_ADDRESS moduleAddr, struct DacpModuleData *data);
+ HRESULT TraverseModuleMap(ModuleMapType mmt, CLRDATA_ADDRESS moduleAddr, MODULEMAPTRAVERSE pCallback, LPVOID token);
+ HRESULT GetAssemblyModuleList(CLRDATA_ADDRESS assembly, unsigned int count, CLRDATA_ADDRESS modules[], unsigned int *pNeeded);
+ HRESULT GetILForModule(CLRDATA_ADDRESS moduleAddr, DWORD rva, CLRDATA_ADDRESS *il);
+
+ // Threads
+ HRESULT GetThreadData(CLRDATA_ADDRESS thread, struct DacpThreadData *data);
+ HRESULT GetThreadFromThinlockID(UINT thinLockId, CLRDATA_ADDRESS *pThread);
+ HRESULT GetStackLimits(CLRDATA_ADDRESS threadPtr, CLRDATA_ADDRESS *lower, CLRDATA_ADDRESS *upper, CLRDATA_ADDRESS *fp);
+
+ // MethodDescs
+ HRESULT GetMethodDescData(CLRDATA_ADDRESS methodDesc, CLRDATA_ADDRESS ip, struct DacpMethodDescData *data, ULONG cRevertedRejitVersions, struct DacpReJitData * rgRevertedRejitData, ULONG * pcNeededRevertedRejitData);
+ HRESULT GetMethodDescPtrFromIP(CLRDATA_ADDRESS ip, CLRDATA_ADDRESS * ppMD);
+ HRESULT GetMethodDescName(CLRDATA_ADDRESS methodDesc, unsigned int count, WCHAR *name, unsigned int *pNeeded);
+ HRESULT GetMethodDescPtrFromFrame(CLRDATA_ADDRESS frameAddr, CLRDATA_ADDRESS * ppMD);
+ HRESULT GetMethodDescFromToken(CLRDATA_ADDRESS moduleAddr, mdToken token, CLRDATA_ADDRESS *methodDesc);
+ HRESULT GetMethodDescTransparencyData(CLRDATA_ADDRESS methodDesc, struct DacpMethodDescTransparencyData *data);
+
+ // JIT Data
+ HRESULT GetCodeHeaderData(CLRDATA_ADDRESS ip, struct DacpCodeHeaderData *data);
+ HRESULT GetJitManagerList(unsigned int count, struct DacpJitManagerInfo *managers, unsigned int *pNeeded);
+ HRESULT GetJitHelperFunctionName(CLRDATA_ADDRESS ip, unsigned int count, char *name, unsigned int *pNeeded);
+ HRESULT GetJumpThunkTarget(T_CONTEXT *ctx, CLRDATA_ADDRESS *targetIP, CLRDATA_ADDRESS *targetMD);
+
+ // ThreadPool
+ HRESULT GetThreadpoolData(struct DacpThreadpoolData *data);
+ HRESULT GetWorkRequestData(CLRDATA_ADDRESS addrWorkRequest, struct DacpWorkRequestData *data);
+ HRESULT GetHillClimbingLogEntry(CLRDATA_ADDRESS addr, struct DacpHillClimbingLogEntry *data);
+
+ // Objects
+ HRESULT GetObjectData(CLRDATA_ADDRESS objAddr, struct DacpObjectData *data);
+ HRESULT GetObjectStringData(CLRDATA_ADDRESS obj, unsigned int count, WCHAR *stringData, unsigned int *pNeeded);
+ HRESULT GetObjectClassName(CLRDATA_ADDRESS obj, unsigned int count, WCHAR *className, unsigned int *pNeeded);
+
+ // MethodTable
+ HRESULT GetMethodTableName(CLRDATA_ADDRESS mt, unsigned int count, WCHAR *mtName, unsigned int *pNeeded);
+ HRESULT GetMethodTableData(CLRDATA_ADDRESS mt, struct DacpMethodTableData *data);
+ HRESULT GetMethodTableSlot(CLRDATA_ADDRESS mt, unsigned int slot, CLRDATA_ADDRESS *value);
+ HRESULT GetMethodTableFieldData(CLRDATA_ADDRESS mt, struct DacpMethodTableFieldData *data);
+ HRESULT GetMethodTableTransparencyData(CLRDATA_ADDRESS mt, struct DacpMethodTableTransparencyData *data);
+
+ // EEClass
+ HRESULT GetMethodTableForEEClass(CLRDATA_ADDRESS eeClass, CLRDATA_ADDRESS *value);
+
+ // FieldDesc
+ HRESULT GetFieldDescData(CLRDATA_ADDRESS fieldDesc, struct DacpFieldDescData *data);
+
+ // Frames
+ HRESULT GetFrameName(CLRDATA_ADDRESS vtable, unsigned int count, WCHAR *frameName, unsigned int *pNeeded);
+
+
+ // PEFiles
+ HRESULT GetPEFileBase(CLRDATA_ADDRESS addr, CLRDATA_ADDRESS *base);
+ HRESULT GetPEFileName(CLRDATA_ADDRESS addr, unsigned int count, WCHAR *fileName, unsigned int *pNeeded);
+
+ // GC
+ HRESULT GetGCHeapData(struct DacpGcHeapData *data);
+ HRESULT GetGCHeapList(unsigned int count, CLRDATA_ADDRESS heaps[], unsigned int *pNeeded); // svr only
+ HRESULT GetGCHeapDetails(CLRDATA_ADDRESS heap, struct DacpGcHeapDetails *details); // wks only
+ HRESULT GetGCHeapStaticData(struct DacpGcHeapDetails *data);
+ HRESULT GetHeapSegmentData(CLRDATA_ADDRESS seg, struct DacpHeapSegmentData *data);
+ HRESULT GetOOMData(CLRDATA_ADDRESS oomAddr, struct DacpOomData *data);
+ HRESULT GetOOMStaticData(struct DacpOomData *data);
+ HRESULT GetHeapAnalyzeData(CLRDATA_ADDRESS addr, struct DacpGcHeapAnalyzeData *data);
+ HRESULT GetHeapAnalyzeStaticData(struct DacpGcHeapAnalyzeData *data);
+
+ // DomainLocal
+ HRESULT GetDomainLocalModuleData(CLRDATA_ADDRESS addr, struct DacpDomainLocalModuleData *data);
+ HRESULT GetDomainLocalModuleDataFromAppDomain(CLRDATA_ADDRESS appDomainAddr, int moduleID, struct DacpDomainLocalModuleData *data);
+ HRESULT GetDomainLocalModuleDataFromModule(CLRDATA_ADDRESS moduleAddr, struct DacpDomainLocalModuleData *data);
+
+ // ThreadLocal
+ HRESULT GetThreadLocalModuleData(CLRDATA_ADDRESS thread, unsigned int index, struct DacpThreadLocalModuleData *data);
+
+ // SyncBlock
+ HRESULT GetSyncBlockData(unsigned int number, struct DacpSyncBlockData *data);
+ HRESULT GetSyncBlockCleanupData(CLRDATA_ADDRESS addr, struct DacpSyncBlockCleanupData *data);
+
+ // Handles
+ HRESULT GetHandleEnum(ISOSHandleEnum **ppHandleEnum);
+ HRESULT GetHandleEnumForTypes(unsigned int types[], unsigned int count, ISOSHandleEnum **ppHandleEnum);
+ HRESULT GetHandleEnumForGC(unsigned int gen, ISOSHandleEnum **ppHandleEnum);
+
+ // EH
+ HRESULT TraverseEHInfo(CLRDATA_ADDRESS ip, DUMPEHINFO pCallback, LPVOID token);
+ HRESULT GetNestedExceptionData(CLRDATA_ADDRESS exception, CLRDATA_ADDRESS *exceptionObject, CLRDATA_ADDRESS *nextNestedException);
+
+ // StressLog
+ HRESULT GetStressLogAddress(CLRDATA_ADDRESS *stressLog);
+
+ // Heaps
+ HRESULT TraverseLoaderHeap(CLRDATA_ADDRESS loaderHeapAddr, VISITHEAP pCallback);
+ HRESULT GetCodeHeapList(CLRDATA_ADDRESS jitManager, unsigned int count, struct DacpJitCodeHeapInfo *codeHeaps, unsigned int *pNeeded);
+ HRESULT TraverseVirtCallStubHeap(CLRDATA_ADDRESS pAppDomain, VCSHeapType heaptype, VISITHEAP pCallback);
+
+ // Other
+ HRESULT GetUsefulGlobals(struct DacpUsefulGlobalsData *data);
+ HRESULT GetClrWatsonBuckets(CLRDATA_ADDRESS thread, void *pGenericModeBlock);
+ HRESULT GetTLSIndex(ULONG *pIndex);
+ HRESULT GetDacModuleHandle(HMODULE *phModule);
+
+ // COM
+ HRESULT GetRCWData(CLRDATA_ADDRESS addr, struct DacpRCWData *data);
+ HRESULT GetRCWInterfaces(CLRDATA_ADDRESS rcw, unsigned int count, struct DacpCOMInterfacePointerData *interfaces, unsigned int *pNeeded);
+ HRESULT GetCCWData(CLRDATA_ADDRESS ccw, struct DacpCCWData *data);
+ HRESULT GetCCWInterfaces(CLRDATA_ADDRESS ccw, unsigned int count, struct DacpCOMInterfacePointerData *interfaces, unsigned int *pNeeded);
+ HRESULT TraverseRCWCleanupList(CLRDATA_ADDRESS cleanupListPtr, VISITRCWFORCLEANUP pCallback, LPVOID token);
+
+ // GC Reference Functions
+
+ /* GetStackReferences
+ * Enumerates all references on a given callstack.
+ */
+ HRESULT GetStackReferences([in] DWORD osThreadID, [out] ISOSStackRefEnum **ppEnum);
+ HRESULT GetRegisterName([in] int regName, [in] unsigned int count, [out] WCHAR *buffer, [out] unsigned int *pNeeded);
+
+ HRESULT GetThreadAllocData(CLRDATA_ADDRESS thread, struct DacpAllocData *data);
+ HRESULT GetHeapAllocData(unsigned int count, struct DacpGenerationAllocData *data, unsigned int *pNeeded);
+
+ // For BindingDisplay plugin
+ HRESULT GetFailedAssemblyList(CLRDATA_ADDRESS appDomain, int count, CLRDATA_ADDRESS values[], unsigned int *pNeeded);
+ HRESULT GetPrivateBinPaths(CLRDATA_ADDRESS appDomain, int count, WCHAR *paths, unsigned int *pNeeded);
+ HRESULT GetAssemblyLocation(CLRDATA_ADDRESS assembly, int count, WCHAR *location, unsigned int *pNeeded);
+ HRESULT GetAppDomainConfigFile(CLRDATA_ADDRESS appDomain, int count, WCHAR *configFile, unsigned int *pNeeded);
+ HRESULT GetApplicationBase(CLRDATA_ADDRESS appDomain, int count, WCHAR *base, unsigned int *pNeeded);
+ HRESULT GetFailedAssemblyData(CLRDATA_ADDRESS assembly, unsigned int *pContext, HRESULT *pResult);
+ HRESULT GetFailedAssemblyLocation(CLRDATA_ADDRESS assesmbly, unsigned int count, WCHAR *location, unsigned int *pNeeded);
+ HRESULT GetFailedAssemblyDisplayName(CLRDATA_ADDRESS assembly, unsigned int count, WCHAR *name, unsigned int *pNeeded);
+};
+
+[
+ object,
+ local,
+ uuid(A16026EC-96F4-40BA-87FB-5575986FB7AF)
+]
+interface ISOSDacInterface2 : IUnknown
+{
+ HRESULT GetObjectExceptionData(CLRDATA_ADDRESS objAddr, struct DacpExceptionObjectData *data);
+ HRESULT IsRCWDCOMProxy(CLRDATA_ADDRESS rcwAddr, BOOL* isDCOMProxy);
+};
+
+[
+ object,
+ local,
+ uuid(B08C5CDC-FD8A-49C5-AB38-5FEEF35235B4)
+]
+interface ISOSDacInterface3 : IUnknown
+{
+ HRESULT GetGCInterestingInfoData(CLRDATA_ADDRESS interestingInfoAddr, struct DacpGCInterestingInfoData *data);
+ HRESULT GetGCInterestingInfoStaticData(struct DacpGCInterestingInfoData *data);
+ HRESULT GetGCGlobalMechanisms(size_t* globalMechanisms);
+};
+
+[
+ object,
+ local,
+ uuid(74B9D34C-A612-4B07-93DD-5462178FCE11)
+]
+interface ISOSDacInterface4 : IUnknown
+{
+ HRESULT GetClrNotification(CLRDATA_ADDRESS arguments[], int count, int *pNeeded);
+}; \ No newline at end of file