Make dumpmd work with tiered jitting. Now displays previous code addresses (#13805)
[platform/upstream/coreclr.git] / src / inc / sospriv.idl
1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 /*****************************************************************************
5  **                                                                         **
6  ** sospriv.idl - The private interface that SOS uses to query the runtime  **
7  **               for internal data.                                        **
8  **                                                                         **
9  *****************************************************************************/
10 import "unknwn.idl";
11
12 import "xclrdata.idl";
13
14 struct DacpSyncBlockCleanupData;
15 struct DacpThreadStoreData;
16 struct DacpAppDomainStoreData;
17 struct DacpAppDomainData;
18 struct DacpAssemblyData;
19 struct DacpThreadData;
20 struct DacpMethodDescData;
21 struct DacpCodeHeaderData;
22 struct DacpThreadpoolData;
23 struct DacpObjectData;
24 struct DacpWorkRequestData;
25 struct DacpMethodTableData;
26 struct DacpWorkRequestData;
27 struct DacpModuleData;
28 struct DacpGcHeapData;
29 struct DacpJitManagerInfo;
30 struct DacpHeapSegmentData;
31 struct DacpDomainLocalModuleData;
32 struct DacpDomainLocalModuleData;
33 struct DACEHInfo;
34 struct DacpRCWData;
35 struct DacpAllocData;
36 struct DacpGenerationAllocData;
37 struct DacpExceptionObjectData;
38 cpp_quote("#if 0")
39 typedef ULONG64 CLRDATA_ADDRESS;
40 typedef int CONTEXT;
41 typedef int T_CONTEXT;
42 typedef int mdToken;
43 typedef unsigned int size_t;
44 typedef int ModuleMapType;
45 typedef int VCSHeapType;
46 cpp_quote("#endif")
47     
48
49 cpp_quote("typedef enum ModuleMapType { TYPEDEFTOMETHODTABLE, TYPEREFTOMETHODTABLE };")
50 cpp_quote("typedef enum VCSHeapType {IndcellHeap, LookupHeap, ResolveHeap, DispatchHeap, CacheEntryHeap};")
51
52 typedef void (*MODULEMAPTRAVERSE)(UINT index, CLRDATA_ADDRESS methodTable,LPVOID token);
53 typedef void (*VISITHEAP)(CLRDATA_ADDRESS blockData,size_t blockSize,BOOL blockIsCurrentBlock);
54
55 typedef BOOL (*VISITRCWFORCLEANUP)(CLRDATA_ADDRESS RCW,CLRDATA_ADDRESS Context,CLRDATA_ADDRESS Thread, 
56     BOOL bIsFreeThreaded, LPVOID token);
57 typedef BOOL (*DUMPEHINFO)(UINT clauseIndex,UINT totalClauses, struct DACEHInfo *pEHInfo,LPVOID token);
58
59 cpp_quote("#ifndef _SOS_HandleData")
60 cpp_quote("#define _SOS_HandleData")
61
62 typedef struct _SOSHandleData
63 {
64     CLRDATA_ADDRESS AppDomain;
65     CLRDATA_ADDRESS Handle;
66     CLRDATA_ADDRESS Secondary;
67     unsigned int Type;
68     BOOL StrongReference;
69     
70     // For RefCounted Handles
71     unsigned int RefCount;
72     unsigned int JupiterRefCount;
73     BOOL IsPegged;
74 } SOSHandleData;
75
76 cpp_quote("#endif //HandleData")
77
78 [
79     object,
80     local,
81     uuid(286CA186-E763-4F61-9760-487D43AE4341)
82 ]
83 interface ISOSEnum : IUnknown
84 {
85     HRESULT Skip([in] unsigned int count);
86     HRESULT Reset();
87     HRESULT GetCount([out] unsigned int *pCount);
88 }
89
90
91 [
92     object,
93     local,
94     uuid(3E269830-4A2B-4301-8EE2-D6805B29B2FA)
95 ]
96 interface ISOSHandleEnum : ISOSEnum
97 {
98     HRESULT Next([in] unsigned int count,
99                  [out, size_is(count), length_is(*pNeeded)] SOSHandleData handles[],
100                  [out] unsigned int *pNeeded);
101 }
102
103 cpp_quote("#ifndef _SOS_StackReference_")
104 cpp_quote("#define _SOS_StackReference_")
105
106 typedef enum SOSStackSourceType
107 {
108     SOS_StackSourceIP,     // Instuction pointer in managed code
109     SOS_StackSourceFrame,  // clr!Frame
110 } SOSStackSourceType;
111
112 typedef enum SOSRefFlags
113 {
114     SOSRefInterior = 1,
115     SOSRefPinned = 2
116 } SOSRefFlags;
117
118 typedef struct _SOS_StackRefData
119 {
120     BOOL HasRegisterInformation;
121     int Register;
122     int Offset;
123     CLRDATA_ADDRESS Address;
124     CLRDATA_ADDRESS Object;
125     unsigned int Flags;
126     
127     SOSStackSourceType SourceType;
128     CLRDATA_ADDRESS Source;
129     CLRDATA_ADDRESS StackPointer;
130 } SOSStackRefData;
131
132 /* Informs the user that we were unable to process the given clr!Frame or
133  * managed frame.
134  */
135 typedef struct _SOS_StackRefError
136 {
137     SOSStackSourceType SourceType;
138     CLRDATA_ADDRESS Source;
139     CLRDATA_ADDRESS StackPointer;
140 } SOSStackRefError;
141
142 cpp_quote("#endif // _SOS_StackReference_")
143
144 [
145     object,
146     local,
147     uuid(774F4E1B-FB7B-491B-976D-A8130FE355E9)
148 ]
149 interface ISOSStackRefErrorEnum : ISOSEnum
150 {
151     HRESULT Next([in] unsigned int count,
152                  [out, size_is(count), length_is(*pFetched)] SOSStackRefError ref[],
153                  [out] unsigned int *pFetched);
154 }
155
156 [
157     object,
158     local,
159     uuid(8FA642BD-9F10-4799-9AA3-512AE78C77EE)
160 ]
161 interface ISOSStackRefEnum  : ISOSEnum
162 {
163     HRESULT Next([in] unsigned int count,
164                  [out, size_is(count), length_is(*pFetched)] SOSStackRefData ref[],
165                  [out] unsigned int *pFetched);
166      
167      
168      /* Reports all frames which we could not enumerate gc references for.
169       */
170      HRESULT EnumerateErrors([out] ISOSStackRefErrorEnum **ppEnum);
171 }
172
173
174 [
175     object,
176     local,
177     uuid(436f00f2-b42a-4b9f-870c-e73db66ae930)
178 ]
179 interface ISOSDacInterface : IUnknown
180 {
181     // ThreadStore
182     HRESULT GetThreadStoreData(struct DacpThreadStoreData *data);
183     
184     // AppDomains
185     HRESULT GetAppDomainStoreData(struct DacpAppDomainStoreData *data);
186     HRESULT GetAppDomainList(unsigned int count, CLRDATA_ADDRESS values[], unsigned int *pNeeded);
187     HRESULT GetAppDomainData(CLRDATA_ADDRESS addr, struct DacpAppDomainData *data);
188     HRESULT GetAppDomainName(CLRDATA_ADDRESS addr, unsigned int count, WCHAR *name, unsigned int *pNeeded);
189     HRESULT GetDomainFromContext(CLRDATA_ADDRESS context, CLRDATA_ADDRESS *domain);
190     
191     // Assemblies
192     HRESULT GetAssemblyList(CLRDATA_ADDRESS appDomain, int count, CLRDATA_ADDRESS values[], int *pNeeded);
193     HRESULT GetAssemblyData(CLRDATA_ADDRESS baseDomainPtr, CLRDATA_ADDRESS assembly, struct DacpAssemblyData *data);
194     HRESULT GetAssemblyName(CLRDATA_ADDRESS assembly, unsigned int count, WCHAR *name, unsigned int *pNeeded);
195     
196     // Modules
197     HRESULT GetModule(CLRDATA_ADDRESS addr, IXCLRDataModule **mod);
198     HRESULT GetModuleData(CLRDATA_ADDRESS moduleAddr, struct DacpModuleData *data);
199     HRESULT TraverseModuleMap(ModuleMapType mmt, CLRDATA_ADDRESS moduleAddr, MODULEMAPTRAVERSE pCallback, LPVOID token);
200     HRESULT GetAssemblyModuleList(CLRDATA_ADDRESS assembly, unsigned int count, CLRDATA_ADDRESS modules[], unsigned int *pNeeded);
201     HRESULT GetILForModule(CLRDATA_ADDRESS moduleAddr, DWORD rva, CLRDATA_ADDRESS *il);
202     
203     // Threads
204     HRESULT GetThreadData(CLRDATA_ADDRESS thread, struct DacpThreadData *data);
205     HRESULT GetThreadFromThinlockID(UINT thinLockId, CLRDATA_ADDRESS *pThread);
206     HRESULT GetStackLimits(CLRDATA_ADDRESS threadPtr, CLRDATA_ADDRESS *lower, CLRDATA_ADDRESS *upper, CLRDATA_ADDRESS *fp);
207     
208     // MethodDescs
209     HRESULT GetMethodDescData(CLRDATA_ADDRESS methodDesc, CLRDATA_ADDRESS ip, struct DacpMethodDescData *data, ULONG cRevertedRejitVersions, struct DacpReJitData * rgRevertedRejitData, ULONG * pcNeededRevertedRejitData);
210     HRESULT GetMethodDescPtrFromIP(CLRDATA_ADDRESS ip, CLRDATA_ADDRESS * ppMD);
211     HRESULT GetMethodDescName(CLRDATA_ADDRESS methodDesc, unsigned int count, WCHAR *name, unsigned int *pNeeded);
212     HRESULT GetMethodDescPtrFromFrame(CLRDATA_ADDRESS frameAddr, CLRDATA_ADDRESS * ppMD);
213     HRESULT GetMethodDescFromToken(CLRDATA_ADDRESS moduleAddr, mdToken token, CLRDATA_ADDRESS *methodDesc);
214     HRESULT GetMethodDescTransparencyData(CLRDATA_ADDRESS methodDesc, struct DacpMethodDescTransparencyData *data);
215
216     // JIT Data
217     HRESULT GetCodeHeaderData(CLRDATA_ADDRESS ip, struct DacpCodeHeaderData *data);
218     HRESULT GetJitManagerList(unsigned int count, struct DacpJitManagerInfo *managers, unsigned int *pNeeded);
219     HRESULT GetJitHelperFunctionName(CLRDATA_ADDRESS ip, unsigned int count, char *name, unsigned int *pNeeded);
220     HRESULT GetJumpThunkTarget(T_CONTEXT *ctx, CLRDATA_ADDRESS *targetIP, CLRDATA_ADDRESS *targetMD);
221
222     // ThreadPool
223     HRESULT GetThreadpoolData(struct DacpThreadpoolData *data);
224     HRESULT GetWorkRequestData(CLRDATA_ADDRESS addrWorkRequest, struct DacpWorkRequestData *data);
225     HRESULT GetHillClimbingLogEntry(CLRDATA_ADDRESS addr, struct DacpHillClimbingLogEntry *data);
226
227     // Objects
228     HRESULT GetObjectData(CLRDATA_ADDRESS objAddr, struct DacpObjectData *data);
229     HRESULT GetObjectStringData(CLRDATA_ADDRESS obj, unsigned int count, WCHAR *stringData, unsigned int *pNeeded);
230     HRESULT GetObjectClassName(CLRDATA_ADDRESS obj, unsigned int count, WCHAR *className, unsigned int *pNeeded);
231     
232     // MethodTable
233     HRESULT GetMethodTableName(CLRDATA_ADDRESS mt, unsigned int count, WCHAR *mtName, unsigned int *pNeeded);
234     HRESULT GetMethodTableData(CLRDATA_ADDRESS mt, struct DacpMethodTableData *data);
235     HRESULT GetMethodTableSlot(CLRDATA_ADDRESS mt, unsigned int slot, CLRDATA_ADDRESS *value);
236     HRESULT GetMethodTableFieldData(CLRDATA_ADDRESS mt, struct DacpMethodTableFieldData *data);
237     HRESULT GetMethodTableTransparencyData(CLRDATA_ADDRESS mt, struct DacpMethodTableTransparencyData *data);
238
239     // EEClass
240     HRESULT GetMethodTableForEEClass(CLRDATA_ADDRESS eeClass, CLRDATA_ADDRESS *value);
241     
242     // FieldDesc
243     HRESULT GetFieldDescData(CLRDATA_ADDRESS fieldDesc, struct DacpFieldDescData *data);
244
245     // Frames
246     HRESULT GetFrameName(CLRDATA_ADDRESS vtable, unsigned int count, WCHAR *frameName, unsigned int *pNeeded);
247
248
249     // PEFiles
250     HRESULT GetPEFileBase(CLRDATA_ADDRESS addr, CLRDATA_ADDRESS *base);
251     HRESULT GetPEFileName(CLRDATA_ADDRESS addr, unsigned int count, WCHAR *fileName, unsigned int *pNeeded);
252
253     // GC
254     HRESULT GetGCHeapData(struct DacpGcHeapData *data);
255     HRESULT GetGCHeapList(unsigned int count, CLRDATA_ADDRESS heaps[], unsigned int *pNeeded); // svr only
256     HRESULT GetGCHeapDetails(CLRDATA_ADDRESS heap, struct DacpGcHeapDetails *details); // wks only
257     HRESULT GetGCHeapStaticData(struct DacpGcHeapDetails *data);
258     HRESULT GetHeapSegmentData(CLRDATA_ADDRESS seg, struct DacpHeapSegmentData *data);
259     HRESULT GetOOMData(CLRDATA_ADDRESS oomAddr, struct DacpOomData *data);
260     HRESULT GetOOMStaticData(struct DacpOomData *data);
261     HRESULT GetHeapAnalyzeData(CLRDATA_ADDRESS addr, struct  DacpGcHeapAnalyzeData *data);
262     HRESULT GetHeapAnalyzeStaticData(struct DacpGcHeapAnalyzeData *data);
263         
264     // DomainLocal
265     HRESULT GetDomainLocalModuleData(CLRDATA_ADDRESS addr, struct DacpDomainLocalModuleData *data);
266     HRESULT GetDomainLocalModuleDataFromAppDomain(CLRDATA_ADDRESS appDomainAddr, int moduleID, struct DacpDomainLocalModuleData *data);
267     HRESULT GetDomainLocalModuleDataFromModule(CLRDATA_ADDRESS moduleAddr, struct DacpDomainLocalModuleData *data);
268
269     // ThreadLocal
270     HRESULT GetThreadLocalModuleData(CLRDATA_ADDRESS thread, unsigned int index, struct DacpThreadLocalModuleData *data);
271
272     // SyncBlock
273     HRESULT GetSyncBlockData(unsigned int number, struct DacpSyncBlockData *data);
274     HRESULT GetSyncBlockCleanupData(CLRDATA_ADDRESS addr, struct DacpSyncBlockCleanupData *data);
275
276     // Handles
277     HRESULT GetHandleEnum(ISOSHandleEnum **ppHandleEnum);
278     HRESULT GetHandleEnumForTypes(unsigned int types[], unsigned int count, ISOSHandleEnum **ppHandleEnum);
279     HRESULT GetHandleEnumForGC(unsigned int gen, ISOSHandleEnum **ppHandleEnum);
280
281     // EH
282     HRESULT TraverseEHInfo(CLRDATA_ADDRESS ip, DUMPEHINFO pCallback, LPVOID token);
283     HRESULT GetNestedExceptionData(CLRDATA_ADDRESS exception, CLRDATA_ADDRESS *exceptionObject, CLRDATA_ADDRESS *nextNestedException);
284     
285     // StressLog
286     HRESULT GetStressLogAddress(CLRDATA_ADDRESS *stressLog);
287
288     // Heaps
289     HRESULT TraverseLoaderHeap(CLRDATA_ADDRESS loaderHeapAddr, VISITHEAP pCallback);
290     HRESULT GetCodeHeapList(CLRDATA_ADDRESS jitManager, unsigned int count, struct DacpJitCodeHeapInfo *codeHeaps, unsigned int *pNeeded);
291     HRESULT TraverseVirtCallStubHeap(CLRDATA_ADDRESS pAppDomain, VCSHeapType heaptype, VISITHEAP pCallback);
292
293     // Other
294     HRESULT GetUsefulGlobals(struct DacpUsefulGlobalsData *data);
295     HRESULT GetClrWatsonBuckets(CLRDATA_ADDRESS thread, void *pGenericModeBlock);
296     HRESULT GetTLSIndex(ULONG *pIndex);
297     HRESULT GetDacModuleHandle(HMODULE *phModule);
298
299     // COM
300     HRESULT GetRCWData(CLRDATA_ADDRESS addr, struct DacpRCWData *data);
301     HRESULT GetRCWInterfaces(CLRDATA_ADDRESS rcw, unsigned int count, struct DacpCOMInterfacePointerData *interfaces, unsigned int *pNeeded);
302     HRESULT GetCCWData(CLRDATA_ADDRESS ccw, struct DacpCCWData *data);
303     HRESULT GetCCWInterfaces(CLRDATA_ADDRESS ccw, unsigned int count, struct DacpCOMInterfacePointerData *interfaces, unsigned int *pNeeded);
304     HRESULT TraverseRCWCleanupList(CLRDATA_ADDRESS cleanupListPtr, VISITRCWFORCLEANUP pCallback, LPVOID token);
305     
306     // GC Reference Functions
307     
308     /*      GetStackReferences
309      * Enumerates all references on a given callstack.
310      */
311     HRESULT GetStackReferences([in] DWORD osThreadID, [out] ISOSStackRefEnum **ppEnum);
312     HRESULT GetRegisterName([in] int regName, [in] unsigned int count, [out] WCHAR *buffer, [out] unsigned int *pNeeded);
313
314     HRESULT GetThreadAllocData(CLRDATA_ADDRESS thread, struct DacpAllocData *data);
315     HRESULT GetHeapAllocData(unsigned int count, struct DacpGenerationAllocData *data, unsigned int *pNeeded);
316     
317     // For BindingDisplay plugin
318     HRESULT GetFailedAssemblyList(CLRDATA_ADDRESS appDomain, int count, CLRDATA_ADDRESS values[], unsigned int *pNeeded);
319     HRESULT GetPrivateBinPaths(CLRDATA_ADDRESS appDomain, int count, WCHAR *paths, unsigned int *pNeeded);
320     HRESULT GetAssemblyLocation(CLRDATA_ADDRESS assembly, int count, WCHAR *location, unsigned int *pNeeded);
321     HRESULT GetAppDomainConfigFile(CLRDATA_ADDRESS appDomain, int count, WCHAR *configFile, unsigned int *pNeeded);
322     HRESULT GetApplicationBase(CLRDATA_ADDRESS appDomain, int count, WCHAR *base, unsigned int *pNeeded);
323     HRESULT GetFailedAssemblyData(CLRDATA_ADDRESS assembly, unsigned int *pContext, HRESULT *pResult);
324     HRESULT GetFailedAssemblyLocation(CLRDATA_ADDRESS assesmbly, unsigned int count, WCHAR *location, unsigned int *pNeeded);
325     HRESULT GetFailedAssemblyDisplayName(CLRDATA_ADDRESS assembly, unsigned int count, WCHAR *name, unsigned int *pNeeded);
326 };
327
328 [
329     object,
330     local,
331     uuid(A16026EC-96F4-40BA-87FB-5575986FB7AF)
332 ]
333 interface ISOSDacInterface2 : IUnknown
334 {
335     HRESULT GetObjectExceptionData(CLRDATA_ADDRESS objAddr, struct DacpExceptionObjectData *data);
336     HRESULT IsRCWDCOMProxy(CLRDATA_ADDRESS rcwAddr, BOOL* isDCOMProxy);
337 };
338
339 [
340     object,
341     local,
342     uuid(B08C5CDC-FD8A-49C5-AB38-5FEEF35235B4)
343 ]
344 interface ISOSDacInterface3 : IUnknown
345 {
346     HRESULT GetGCInterestingInfoData(CLRDATA_ADDRESS interestingInfoAddr, struct DacpGCInterestingInfoData *data);
347     HRESULT GetGCInterestingInfoStaticData(struct DacpGCInterestingInfoData *data);
348     HRESULT GetGCGlobalMechanisms(size_t* globalMechanisms);
349 };
350
351 [
352     object,
353     local,
354     uuid(74B9D34C-A612-4B07-93DD-5462178FCE11)
355 ]
356 interface ISOSDacInterface4 : IUnknown
357 {
358     HRESULT GetClrNotification(CLRDATA_ADDRESS arguments[], int count, int *pNeeded);
359 };
360
361 [
362     object,
363     local,
364     uuid(127d6abe-6c86-4e48-8e7b-220781c58101)
365 ]
366 interface ISOSDacInterface5 : IUnknown
367 {
368     HRESULT GetTieredVersions(CLRDATA_ADDRESS methodDesc, int rejitId, struct DacpTieredVersionData *nativeCodeAddrs, int cNativeCodeAddrs, int *pcNativeCodeAddrs);
369 };