#endif /* __ICorDebugDataTarget3_FWD_DEFINED__ */
+#ifndef __ICorDebugDataTarget4_FWD_DEFINED__
+#define __ICorDebugDataTarget4_FWD_DEFINED__
+typedef interface ICorDebugDataTarget4 ICorDebugDataTarget4;
+
+#endif /* __ICorDebugDataTarget4_FWD_DEFINED__ */
+
+
#ifndef __ICorDebugMutableDataTarget_FWD_DEFINED__
#define __ICorDebugMutableDataTarget_FWD_DEFINED__
typedef interface ICorDebugMutableDataTarget ICorDebugMutableDataTarget;
#endif /* __ICorDebugDataTarget3_INTERFACE_DEFINED__ */
+#ifndef __ICorDebugDataTarget4_INTERFACE_DEFINED__
+#define __ICorDebugDataTarget4_INTERFACE_DEFINED__
+
+/* interface ICorDebugDataTarget4 */
+/* [unique][local][uuid][object] */
+
+
+EXTERN_C const IID IID_ICorDebugDataTarget4;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("E799DC06-E099-4713-BDD9-906D3CC02CF2")
+ ICorDebugDataTarget4 : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE GetPid(
+ /* [out] */ DWORD *pdwProcessId) = 0;
+
+ };
+
+
+#else /* C style interface */
+
+ typedef struct ICorDebugDataTarget4Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ ICorDebugDataTarget4 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ _COM_Outptr_ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ ICorDebugDataTarget4 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ ICorDebugDataTarget4 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetPid )(
+ ICorDebugDataTarget4 * This,
+ /* [out] */ DWORD *pdwProcessId);
+
+ END_INTERFACE
+ } ICorDebugDataTarget4Vtbl;
+
+ interface ICorDebugDataTarget4
+ {
+ CONST_VTBL struct ICorDebugDataTarget4Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define ICorDebugDataTarget4_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define ICorDebugDataTarget4_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define ICorDebugDataTarget4_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define ICorDebugDataTarget4_GetPid(This,pdwProcessId) \
+ ( (This)->lpVtbl -> GetPid(This,pdwProcessId) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __ICorDebugDataTarget4_INTERFACE_DEFINED__ */
+
+
#ifndef __ICorDebugMutableDataTarget_INTERFACE_DEFINED__
#define __ICorDebugMutableDataTarget_INTERFACE_DEFINED__
#endif /* __ICorDebugMetaDataLocator_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0014 */
+/* interface __MIDL_itf_cordebug_0000_0015 */
/* [local] */
#pragma warning(push)
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0014_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0014_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0015_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0015_v0_0_s_ifspec;
#ifndef __ICorDebugManagedCallback_INTERFACE_DEFINED__
#define __ICorDebugManagedCallback_INTERFACE_DEFINED__
#endif /* __ICorDebugManagedCallback_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0015 */
+/* interface __MIDL_itf_cordebug_0000_0016 */
/* [local] */
#pragma warning(pop)
#pragma warning(push)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0015_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0015_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0016_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0016_v0_0_s_ifspec;
#ifndef __ICorDebugManagedCallback3_INTERFACE_DEFINED__
#define __ICorDebugManagedCallback3_INTERFACE_DEFINED__
#endif /* __ICorDebugManagedCallback3_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0016 */
+/* interface __MIDL_itf_cordebug_0000_0017 */
/* [local] */
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0016_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0016_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0017_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0017_v0_0_s_ifspec;
#ifndef __ICorDebugManagedCallback2_INTERFACE_DEFINED__
#define __ICorDebugManagedCallback2_INTERFACE_DEFINED__
#endif /* __ICorDebugManagedCallback2_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0017 */
+/* interface __MIDL_itf_cordebug_0000_0018 */
/* [local] */
#pragma warning(pop)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0017_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0017_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0018_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0018_v0_0_s_ifspec;
#ifndef __ICorDebugUnmanagedCallback_INTERFACE_DEFINED__
#define __ICorDebugUnmanagedCallback_INTERFACE_DEFINED__
#endif /* __ICorDebugUnmanagedCallback_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0018 */
+/* interface __MIDL_itf_cordebug_0000_0019 */
/* [local] */
typedef
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0018_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0018_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0019_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0019_v0_0_s_ifspec;
#ifndef __ICorDebug_INTERFACE_DEFINED__
#define __ICorDebug_INTERFACE_DEFINED__
#endif /* __ICorDebug_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0019 */
+/* interface __MIDL_itf_cordebug_0000_0020 */
/* [local] */
#pragma warning(pop)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0019_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0019_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0020_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0020_v0_0_s_ifspec;
#ifndef __ICorDebugRemoteTarget_INTERFACE_DEFINED__
#define __ICorDebugRemoteTarget_INTERFACE_DEFINED__
#endif /* __ICorDebugRemote_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0021 */
+/* interface __MIDL_itf_cordebug_0000_0022 */
/* [local] */
typedef struct _COR_VERSION
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0021_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0021_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0022_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0022_v0_0_s_ifspec;
#ifndef __ICorDebug2_INTERFACE_DEFINED__
#define __ICorDebug2_INTERFACE_DEFINED__
#endif /* __ICorDebug2_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0022 */
+/* interface __MIDL_itf_cordebug_0000_0023 */
/* [local] */
typedef
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0022_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0022_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0023_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0023_v0_0_s_ifspec;
#ifndef __ICorDebugController_INTERFACE_DEFINED__
#define __ICorDebugController_INTERFACE_DEFINED__
#endif /* __ICorDebugController_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0023 */
+/* interface __MIDL_itf_cordebug_0000_0024 */
/* [local] */
#pragma warning(push)
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0023_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0023_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0024_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0024_v0_0_s_ifspec;
#ifndef __ICorDebugAppDomain_INTERFACE_DEFINED__
#define __ICorDebugAppDomain_INTERFACE_DEFINED__
#endif /* __ICorDebugAppDomain_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0024 */
+/* interface __MIDL_itf_cordebug_0000_0025 */
/* [local] */
#pragma warning(pop)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0024_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0024_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0025_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0025_v0_0_s_ifspec;
#ifndef __ICorDebugAppDomain2_INTERFACE_DEFINED__
#define __ICorDebugAppDomain2_INTERFACE_DEFINED__
#endif /* __ICorDebugAppDomain4_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0028 */
+/* interface __MIDL_itf_cordebug_0000_0029 */
/* [local] */
#pragma warning(push)
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0028_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0028_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0029_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0029_v0_0_s_ifspec;
#ifndef __ICorDebugAssembly_INTERFACE_DEFINED__
#define __ICorDebugAssembly_INTERFACE_DEFINED__
#endif /* __ICorDebugAssembly_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0029 */
+/* interface __MIDL_itf_cordebug_0000_0030 */
/* [local] */
#pragma warning(pop)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0029_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0029_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0030_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0030_v0_0_s_ifspec;
#ifndef __ICorDebugAssembly2_INTERFACE_DEFINED__
#define __ICorDebugAssembly2_INTERFACE_DEFINED__
#endif /* __ICorDebugAssembly3_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0031 */
+/* interface __MIDL_itf_cordebug_0000_0032 */
/* [local] */
#ifndef _DEF_COR_TYPEID_
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0031_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0031_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0032_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0032_v0_0_s_ifspec;
#ifndef __ICorDebugHeapEnum_INTERFACE_DEFINED__
#define __ICorDebugHeapEnum_INTERFACE_DEFINED__
#endif /* __ICorDebugHeapEnum_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0032 */
+/* interface __MIDL_itf_cordebug_0000_0033 */
/* [local] */
typedef
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0032_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0032_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0033_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0033_v0_0_s_ifspec;
#ifndef __ICorDebugHeapSegmentEnum_INTERFACE_DEFINED__
#define __ICorDebugHeapSegmentEnum_INTERFACE_DEFINED__
#endif /* __ICorDebugHeapSegmentEnum_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0033 */
+/* interface __MIDL_itf_cordebug_0000_0034 */
/* [local] */
typedef
#endif // _DEF_COR_GC_REFERENCE_
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0033_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0033_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0034_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0034_v0_0_s_ifspec;
#ifndef __ICorDebugGCReferenceEnum_INTERFACE_DEFINED__
#define __ICorDebugGCReferenceEnum_INTERFACE_DEFINED__
#endif /* __ICorDebugGCReferenceEnum_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0034 */
+/* interface __MIDL_itf_cordebug_0000_0035 */
/* [local] */
#ifndef _DEF_COR_ARRAY_LAYOUT_
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0034_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0034_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0035_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0035_v0_0_s_ifspec;
#ifndef __ICorDebugProcess_INTERFACE_DEFINED__
#define __ICorDebugProcess_INTERFACE_DEFINED__
#endif /* __ICorDebugProcess_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0035 */
+/* interface __MIDL_itf_cordebug_0000_0036 */
/* [local] */
#pragma warning(pop)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0035_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0035_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0036_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0036_v0_0_s_ifspec;
#ifndef __ICorDebugProcess2_INTERFACE_DEFINED__
#define __ICorDebugProcess2_INTERFACE_DEFINED__
#endif /* __ICorDebugProcess5_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0038 */
+/* interface __MIDL_itf_cordebug_0000_0039 */
/* [local] */
typedef
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0038_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0038_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0039_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0039_v0_0_s_ifspec;
#ifndef __ICorDebugDebugEvent_INTERFACE_DEFINED__
#define __ICorDebugDebugEvent_INTERFACE_DEFINED__
#endif /* __ICorDebugDebugEvent_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0039 */
+/* interface __MIDL_itf_cordebug_0000_0040 */
/* [local] */
typedef
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0039_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0039_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0040_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0040_v0_0_s_ifspec;
#ifndef __ICorDebugProcess6_INTERFACE_DEFINED__
#define __ICorDebugProcess6_INTERFACE_DEFINED__
#endif /* __ICorDebugProcess6_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0040 */
+/* interface __MIDL_itf_cordebug_0000_0041 */
/* [local] */
typedef
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0040_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0040_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0041_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0041_v0_0_s_ifspec;
#ifndef __ICorDebugProcess7_INTERFACE_DEFINED__
#define __ICorDebugProcess7_INTERFACE_DEFINED__
#endif /* __ICorDebugILFrame3_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0064 */
+/* interface __MIDL_itf_cordebug_0000_0065 */
/* [local] */
typedef
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0064_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0064_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0065_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0065_v0_0_s_ifspec;
#ifndef __ICorDebugILFrame4_INTERFACE_DEFINED__
#define __ICorDebugILFrame4_INTERFACE_DEFINED__
#endif /* __ICorDebugNativeFrame_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0066 */
+/* interface __MIDL_itf_cordebug_0000_0067 */
/* [local] */
#pragma warning(push)
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0066_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0066_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0067_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0067_v0_0_s_ifspec;
#ifndef __ICorDebugNativeFrame2_INTERFACE_DEFINED__
#define __ICorDebugNativeFrame2_INTERFACE_DEFINED__
#endif /* __ICorDebugModule_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0070 */
+/* interface __MIDL_itf_cordebug_0000_0071 */
/* [local] */
#pragma warning(pop)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0070_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0070_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0071_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0071_v0_0_s_ifspec;
#ifndef __ICorDebugModule2_INTERFACE_DEFINED__
#define __ICorDebugModule2_INTERFACE_DEFINED__
#endif /* __ICorDebugBoxValue_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0094 */
+/* interface __MIDL_itf_cordebug_0000_0095 */
/* [local] */
#pragma warning(push)
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0094_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0094_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0095_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0095_v0_0_s_ifspec;
#ifndef __ICorDebugStringValue_INTERFACE_DEFINED__
#define __ICorDebugStringValue_INTERFACE_DEFINED__
#endif /* __ICorDebugStringValue_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0095 */
+/* interface __MIDL_itf_cordebug_0000_0096 */
/* [local] */
#pragma warning(pop)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0095_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0095_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0096_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0096_v0_0_s_ifspec;
#ifndef __ICorDebugArrayValue_INTERFACE_DEFINED__
#define __ICorDebugArrayValue_INTERFACE_DEFINED__
#endif /* __ICorDebugBlockingObjectEnum_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0116 */
+/* interface __MIDL_itf_cordebug_0000_0117 */
/* [local] */
#pragma warning(push)
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0116_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0116_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0117_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0117_v0_0_s_ifspec;
#ifndef __ICorDebugMDA_INTERFACE_DEFINED__
#define __ICorDebugMDA_INTERFACE_DEFINED__
#endif /* __ICorDebugMDA_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0117 */
+/* interface __MIDL_itf_cordebug_0000_0118 */
/* [local] */
#pragma warning(pop)
#pragma warning(disable:28718)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0117_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0117_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0118_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0118_v0_0_s_ifspec;
#ifndef __ICorDebugEditAndContinueErrorInfo_INTERFACE_DEFINED__
#define __ICorDebugEditAndContinueErrorInfo_INTERFACE_DEFINED__
#endif /* __ICorDebugEditAndContinueErrorInfo_INTERFACE_DEFINED__ */
-/* interface __MIDL_itf_cordebug_0000_0118 */
+/* interface __MIDL_itf_cordebug_0000_0119 */
/* [local] */
#pragma warning(pop)
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0118_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0118_v0_0_s_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0119_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_cordebug_0000_0119_v0_0_s_ifspec;
#ifndef __ICorDebugEditAndContinueSnapshot_INTERFACE_DEFINED__
#define __ICorDebugEditAndContinueSnapshot_INTERFACE_DEFINED__
#endif // !FEATURE_PAL_SXS
#include "pal/context.h"
+#include "pal.h"
#include <dlfcn.h>
#include <exception>
+
#if HAVE_LIBUNWIND_H
+#ifndef __LINUX__
#define UNW_LOCAL_ONLY
+#endif // !__LINUX__
#include <libunwind.h>
-#endif
+#ifdef __LINUX__
+#include <libunwind-ptrace.h>
+#endif // __LINUX__
+#endif // HAVE_LIBUNWIND_H
+
//----------------------------------------------------------------------
// Virtual Unwinding
int st;
unw_context_t unwContext;
unw_cursor_t cursor;
+
#if defined(__APPLE__) || defined(__FreeBSD__) || defined(_ARM64_)
DWORD64 curPc;
#endif
return FALSE;
}
#endif
-
st = unw_init_local(&cursor, &unwContext);
if (st < 0)
{
{
GetContextPointers(&cursor, &unwContext, contextPointers);
}
-
return TRUE;
}
+
#else
#error don't know how to unwind on this platform
#endif
+
+#ifdef __LINUX__
+
+
+static struct LibunwindCallbacksInfoType
+{
+ CONTEXT *Context;
+ ReadMemoryWordCallback readMemCallback;
+} LibunwindCallbacksInfo;
+
+static int get_dyn_info_list_addr(unw_addr_space_t as, unw_word_t *dilap, void *arg)
+{
+ return -UNW_ENOINFO;
+}
+
+static int access_mem(unw_addr_space_t as, unw_word_t addr, unw_word_t *valp, int write, void *arg)
+{
+ if (write)
+ {
+ ASSERT("Memory write must never be called by libunwind during stackwalk");
+ return -UNW_EINVAL;
+ }
+
+ // access_mem sometimes gets called by _UPT_find_proc_info, in such cases arg has a pointer to libunwind internal data
+ // returned by _UPT_create. It makes it impossible to use arg for passing readMemCallback. That's why we have to use global variable.
+ if (LibunwindCallbacksInfo.readMemCallback((SIZE_T)addr, (SIZE_T *)valp))
+ {
+ return UNW_ESUCCESS;
+ }
+ else
+ {
+ return -UNW_EUNSPEC;
+ }
+}
+
+static int access_reg(unw_addr_space_t as, unw_regnum_t regnum, unw_word_t *valp, int write, void *arg)
+{
+ if (write)
+ {
+ ASSERT("Register write must never be called by libunwind during stackwalk");
+ return -UNW_EREADONLYREG;
+ }
+
+ CONTEXT *winContext = LibunwindCallbacksInfo.Context;
+
+ switch (regnum)
+ {
+#if defined(_AMD64_)
+ case UNW_REG_IP: *valp = (unw_word_t) winContext->Rip; break;
+ case UNW_REG_SP: *valp = (unw_word_t) winContext->Rsp; break;
+ case UNW_X86_64_RBP: *valp = (unw_word_t) winContext->Rbp; break;
+ case UNW_X86_64_RBX: *valp = (unw_word_t) winContext->Rbx; break;
+ case UNW_X86_64_R12: *valp = (unw_word_t) winContext->R12; break;
+ case UNW_X86_64_R13: *valp = (unw_word_t) winContext->R13; break;
+ case UNW_X86_64_R14: *valp = (unw_word_t) winContext->R14; break;
+ case UNW_X86_64_R15: *valp = (unw_word_t) winContext->R15; break;
+#elif defined(_ARM_)
+ case UNW_ARM_R13: *valp = (unw_word_t) winContext->Sp; break;
+ case UNW_ARM_R14: *valp = (unw_word_t) winContext->Lr; break;
+ case UNW_ARM_R15: *valp = (unw_word_t) winContext->Pc; break;
+ case UNW_ARM_R4: *valp = (unw_word_t) winContext->R4; break;
+ case UNW_ARM_R5: *valp = (unw_word_t) winContext->R5; break;
+ case UNW_ARM_R6: *valp = (unw_word_t) winContext->R6; break;
+ case UNW_ARM_R7: *valp = (unw_word_t) winContext->R7; break;
+ case UNW_ARM_R8: *valp = (unw_word_t) winContext->R8; break;
+ case UNW_ARM_R9: *valp = (unw_word_t) winContext->R9; break;
+ case UNW_ARM_R10: *valp = (unw_word_t) winContext->R10; break;
+ case UNW_ARM_R11: *valp = (unw_word_t) winContext->R11; break;
+#elif defined(_ARM64_)
+ case UNW_REG_IP: *valp = (unw_word_t) winContext->Pc; break;
+ case UNW_REG_SP: *valp = (unw_word_t) winContext->Sp; break;
+ case UNW_AARCH64_X29: *valp = (unw_word_t) winContext->Fp; break;
+ case UNW_AARCH64_X30: *valp = (unw_word_t) winContext->Lr; break;
+ case UNW_AARCH64_X19: *valp = (unw_word_t) winContext->X19; break;
+ case UNW_AARCH64_X20: *valp = (unw_word_t) winContext->X20; break;
+ case UNW_AARCH64_X21: *valp = (unw_word_t) winContext->X21; break;
+ case UNW_AARCH64_X22: *valp = (unw_word_t) winContext->X22; break;
+ case UNW_AARCH64_X23: *valp = (unw_word_t) winContext->X23; break;
+ case UNW_AARCH64_X24: *valp = (unw_word_t) winContext->X24; break;
+ case UNW_AARCH64_X25: *valp = (unw_word_t) winContext->X25; break;
+ case UNW_AARCH64_X26: *valp = (unw_word_t) winContext->X26; break;
+ case UNW_AARCH64_X27: *valp = (unw_word_t) winContext->X27; break;
+ case UNW_AARCH64_X28: *valp = (unw_word_t) winContext->X28; break;
+#else
+#error unsupported architecture
+#endif
+ default:
+ ASSERT("Attempt to read an unknown register.");
+ return -UNW_EBADREG;
+ }
+ return UNW_ESUCCESS;
+}
+
+static int access_fpreg(unw_addr_space_t as, unw_regnum_t regnum, unw_fpreg_t *fpvalp, int write, void *arg)
+{
+ ASSERT("Not supposed to be ever called");
+ return -UNW_EINVAL;
+}
+
+static int resume(unw_addr_space_t as, unw_cursor_t *cp, void *arg)
+{
+ ASSERT("Not supposed to be ever called");
+ return -UNW_EINVAL;
+}
+
+static int get_proc_name(unw_addr_space_t as, unw_word_t addr, char *bufp, size_t buf_len, unw_word_t *offp, void *arg)
+{
+ ASSERT("Not supposed to be ever called");
+ return -UNW_EINVAL;
+}
+
+static unw_accessors_t unwind_accessors =
+{
+ .find_proc_info = _UPT_find_proc_info,
+ .put_unwind_info = _UPT_put_unwind_info,
+ .get_dyn_info_list_addr = get_dyn_info_list_addr,
+ .access_mem = access_mem,
+ .access_reg = access_reg,
+ .access_fpreg = access_fpreg,
+ .resume = resume,
+ .get_proc_name = get_proc_name
+};
+
+BOOL PAL_VirtualUnwindOutOfProc(CONTEXT *context,
+ KNONVOLATILE_CONTEXT_POINTERS *contextPointers,
+ DWORD pid,
+ ReadMemoryWordCallback readMemCallback)
+{
+ // This function can be executed only by one thread at a time.
+ // The reason for this is that we need to pass context and read mem function to libunwind callbacks
+ // but "arg" is already used by the pointer returned from _UPT_create().
+ // So we resort to using global variables and a lock.
+ struct Lock
+ {
+ CRITICAL_SECTION cs;
+ Lock()
+ {
+ // ctor of a static variable is a thread-safe way to initialize critical section exactly once (clang,gcc)
+ InitializeCriticalSection(&cs);
+ }
+ };
+ struct LockHolder
+ {
+ CRITICAL_SECTION *cs;
+ LockHolder(CRITICAL_SECTION *cs)
+ {
+ this->cs = cs;
+ EnterCriticalSection(cs);
+ }
+
+ ~LockHolder()
+ {
+ LeaveCriticalSection(cs);
+ cs = NULL;
+ }
+ };
+ static Lock lock;
+ LockHolder lockHolder(&lock.cs);
+
+ int st;
+ unw_context_t unwContext;
+ unw_cursor_t cursor;
+ unw_addr_space_t addrSpace = 0;
+ void *libunwindUptPtr = NULL;
+ BOOL result = FALSE;
+
+ LibunwindCallbacksInfo.Context = context;
+ LibunwindCallbacksInfo.readMemCallback = readMemCallback;
+ WinContextToUnwindContext(context, &unwContext);
+ addrSpace = unw_create_addr_space(&unwind_accessors, 0);
+ libunwindUptPtr = _UPT_create(pid);
+ st = unw_init_remote(&cursor, addrSpace, libunwindUptPtr);
+ if (st < 0)
+ {
+ result = FALSE;
+ goto Exit;
+ }
+
+ st = unw_step(&cursor);
+ if (st < 0)
+ {
+ result = FALSE;
+ goto Exit;
+ }
+
+ UnwindContextToWinContext(&cursor, context);
+
+ if (contextPointers != NULL)
+ {
+ GetContextPointers(&cursor, &unwContext, contextPointers);
+ }
+ result = TRUE;
+
+Exit:
+ if (libunwindUptPtr != nullptr)
+ {
+ _UPT_destroy(libunwindUptPtr);
+ }
+ if (addrSpace != 0)
+ {
+ unw_destroy_addr_space(addrSpace);
+ }
+ return result;
+}
+#else // __LINUX__
+
+BOOL PAL_VirtualUnwindOutOfProc(CONTEXT *context,
+ KNONVOLATILE_CONTEXT_POINTERS *contextPointers,
+ DWORD pid,
+ ReadMemoryWordCallback readMemCallback)
+{
+ //UNIXTODO: Implement for Mac flavor of libunwind
+ return FALSE;
+}
+
+#endif // !__LINUX__
+
/*++
Function:
RtlpRaiseException