diff --git a/eng/Subsets.props b/eng/Subsets.props index 8ffcda01855039..37452b53a69b50 100644 --- a/eng/Subsets.props +++ b/eng/Subsets.props @@ -509,6 +509,7 @@ diff --git a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/ContractRegistry.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/ContractRegistry.cs index 85f4f954404536..80723c030051b4 100644 --- a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/ContractRegistry.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/ContractRegistry.cs @@ -14,80 +14,82 @@ public abstract class ContractRegistry /// /// Gets an instance of the Exception contract for the target. /// - public abstract IException Exception { get; } + public virtual IException Exception => GetContract(); /// /// Gets an instance of the Loader contract for the target. /// - public abstract ILoader Loader { get; } + public virtual ILoader Loader => GetContract(); /// /// Gets an instance of the EcmaMetadata contract for the target. /// - public abstract IEcmaMetadata EcmaMetadata { get; } + public virtual IEcmaMetadata EcmaMetadata => GetContract(); /// /// Gets an instance of the Object contract for the target. /// - public abstract IObject Object { get; } + public virtual IObject Object => GetContract(); /// /// Gets an instance of the Thread contract for the target. /// - public abstract IThread Thread { get; } + public virtual IThread Thread => GetContract(); /// /// Gets an instance of the RuntimeTypeSystem contract for the target. /// - public abstract IRuntimeTypeSystem RuntimeTypeSystem { get; } + public virtual IRuntimeTypeSystem RuntimeTypeSystem => GetContract(); /// /// Gets an instance of the DacStreams contract for the target. /// - public abstract IDacStreams DacStreams { get; } + public virtual IDacStreams DacStreams => GetContract(); /// /// Gets an instance of the ExecutionManager contract for the target. /// - public abstract IExecutionManager ExecutionManager { get; } + public virtual IExecutionManager ExecutionManager => GetContract(); /// /// Gets an instance of the CodeVersions contract for the target. /// - public abstract ICodeVersions CodeVersions { get; } + public virtual ICodeVersions CodeVersions => GetContract(); /// /// Gets an instance of the PlatformMetadata contract for the target. /// - public abstract IPlatformMetadata PlatformMetadata { get; } + public virtual IPlatformMetadata PlatformMetadata => GetContract(); /// /// Gets an instance of the PrecodeStubs contract for the target. /// - public abstract IPrecodeStubs PrecodeStubs { get; } + public virtual IPrecodeStubs PrecodeStubs => GetContract(); /// /// Gets an instance of the ReJIT contract for the target. /// - public abstract IReJIT ReJIT { get; } + public virtual IReJIT ReJIT => GetContract(); /// /// Gets an instance of the StackWalk contract for the target. /// - public abstract IStackWalk StackWalk { get; } + public virtual IStackWalk StackWalk => GetContract(); /// /// Gets an instance of the RuntimeInfo contract for the target. /// - public abstract IRuntimeInfo RuntimeInfo { get; } + public virtual IRuntimeInfo RuntimeInfo => GetContract(); /// /// Gets an instance of the ComWrappers contract for the target. /// - public abstract IComWrappers ComWrappers { get; } + public virtual IComWrappers ComWrappers => GetContract(); /// Gets an instance of the DebugInfo contract for the target. /// - public abstract IDebugInfo DebugInfo { get; } + public virtual IDebugInfo DebugInfo => GetContract(); /// /// Gets an instance of the SHash contract for the target. /// - public abstract ISHash SHash { get; } + public virtual ISHash SHash => GetContract(); /// /// Gets an instance of the GC contract for the target. /// - public abstract IGC GC { get; } + public virtual IGC GC => GetContract(); /// /// Gets an instance of the Notifications contract for the target. /// - public abstract INotifications Notifications { get; } + public virtual INotifications Notifications => GetContract(); /// /// Gets an instance of the SignatureDecoder contract for the target. /// - public abstract ISignatureDecoder SignatureDecoder { get; } + public virtual ISignatureDecoder SignatureDecoder => GetContract(); + + public abstract TContract GetContract() where TContract : IContract; } diff --git a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/IContractFactory.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/IContractFactory.cs index ca19d7ed3d05fb..2973c86784f554 100644 --- a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/IContractFactory.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/IContractFactory.cs @@ -8,4 +8,5 @@ namespace Microsoft.Diagnostics.DataContractReader; public interface IContractFactory where TContract : Contracts.IContract { TContract CreateContract(Target target, int version); + Type ContractType => typeof(TContract); } diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataAddress.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataAddress.cs similarity index 92% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataAddress.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataAddress.cs index 4ad6a9186a9803..9d9055fe20c555 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataAddress.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataAddress.cs @@ -12,7 +12,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; /// When marshalled to native code, this type is represented as a 64-bit unsigned integer. /// [NativeMarshalling(typeof(ClrDataAddressMarshaller))] -internal struct ClrDataAddress : IEquatable +public struct ClrDataAddress : IEquatable { public ulong Value; @@ -29,7 +29,7 @@ internal struct ClrDataAddress : IEquatable } [CustomMarshaller(typeof(ClrDataAddress), MarshalMode.Default, typeof(ClrDataAddressMarshaller))] -internal static class ClrDataAddressMarshaller +public static class ClrDataAddressMarshaller { public static ClrDataAddress ConvertToManaged(ulong address) => new ClrDataAddress(address); public static ulong ConvertToUnmanaged(ClrDataAddress address) => address.Value; diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataFrame.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataFrame.cs similarity index 99% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataFrame.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataFrame.cs index d174d416034642..a47ab74739da47 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataFrame.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataFrame.cs @@ -12,7 +12,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; [GeneratedComClass] -internal sealed unsafe partial class ClrDataFrame : IXCLRDataFrame, IXCLRDataFrame2 +public sealed unsafe partial class ClrDataFrame : IXCLRDataFrame, IXCLRDataFrame2 { private readonly Target _target; private readonly IXCLRDataFrame? _legacyImpl; diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataMethodInstance.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataMethodInstance.cs similarity index 99% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataMethodInstance.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataMethodInstance.cs index ad2930e770093a..4e24967f6226e4 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataMethodInstance.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataMethodInstance.cs @@ -15,7 +15,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; [GeneratedComClass] -internal sealed unsafe partial class ClrDataMethodInstance : IXCLRDataMethodInstance +public sealed unsafe partial class ClrDataMethodInstance : IXCLRDataMethodInstance { private readonly Target _target; private readonly MethodDescHandle _methodDesc; diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataModule.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataModule.cs similarity index 99% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataModule.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataModule.cs index c38cba1b3e023c..f8f08dc5c3e762 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataModule.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataModule.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; @@ -11,7 +11,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; [GeneratedComClass] -internal sealed unsafe partial class ClrDataModule : ICustomQueryInterface, IXCLRDataModule, IXCLRDataModule2 +public sealed unsafe partial class ClrDataModule : ICustomQueryInterface, IXCLRDataModule, IXCLRDataModule2 { private readonly TargetPointer _address; private readonly Target _target; diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataStackWalk.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataStackWalk.cs similarity index 97% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataStackWalk.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataStackWalk.cs index 0448ec77295953..b2e29676afea0a 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataStackWalk.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataStackWalk.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; @@ -12,7 +12,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; [GeneratedComClass] -internal sealed unsafe partial class ClrDataStackWalk : IXCLRDataStackWalk +public sealed unsafe partial class ClrDataStackWalk : IXCLRDataStackWalk { private readonly TargetPointer _threadAddr; private readonly uint _flags; diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataTask.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataTask.cs similarity index 95% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataTask.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataTask.cs index 3c189701e57fd5..64b70646e5f675 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/ClrDataTask.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ClrDataTask.cs @@ -1,13 +1,14 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Runtime.InteropServices.Marshalling; +using Microsoft.Diagnostics.DataContractReader.Contracts; namespace Microsoft.Diagnostics.DataContractReader.Legacy; [GeneratedComClass] -internal sealed unsafe partial class ClrDataTask : IXCLRDataTask +public sealed unsafe partial class ClrDataTask : IXCLRDataTask { private readonly TargetPointer _address; private readonly Target _target; diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/ConversionExtensions.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ConversionExtensions.cs similarity index 96% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/ConversionExtensions.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ConversionExtensions.cs index 63d1a7354991dc..c95e0188e92cd1 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/ConversionExtensions.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ConversionExtensions.cs @@ -7,7 +7,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; -internal static class ConversionExtensions +public static class ConversionExtensions { private const uint Arm32ThumbBit = 1; @@ -86,7 +86,7 @@ public static TargetCodePointer ToTargetCodePointer(this ClrDataAddress address, /// /// Converts a TargetCodePointer to an address TargetPointer, removing any platform-specific bits such as the ARM32 Thumb bit or ARM64 pointer authentication. /// - internal static TargetPointer ToAddress(this TargetCodePointer code, Target target) + public static TargetPointer ToAddress(this TargetCodePointer code, Target target) { IPlatformMetadata metadata = target.Contracts.PlatformMetadata; CodePointerFlags flags = metadata.GetCodePointerFlags(); diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/HeaderReaderHelpers.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/HeaderReaderHelpers.cs similarity index 100% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/HeaderReaderHelpers.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/HeaderReaderHelpers.cs diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/ICLRData.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ICLRData.cs similarity index 92% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/ICLRData.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ICLRData.cs index 56748a4f08f89d..eb7fa9918af177 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/ICLRData.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ICLRData.cs @@ -12,7 +12,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; [GeneratedComInterface] [Guid("471c35b4-7c2f-4ef0-a945-00f8c38056f1")] -internal unsafe partial interface ICLRDataEnumMemoryRegions +public unsafe partial interface ICLRDataEnumMemoryRegions { [PreserveSig] int EnumMemoryRegions(/*ICLRDataEnumMemoryRegionsCallback*/ void* callback, uint miniDumpFlags, /*CLRDataEnumMemoryFlags*/ int clrFlags); @@ -20,7 +20,7 @@ internal unsafe partial interface ICLRDataEnumMemoryRegions [GeneratedComInterface] [Guid("3e11ccee-d08b-43e5-af01-32717a64da03")] -internal unsafe partial interface ICLRDataTarget +public unsafe partial interface ICLRDataTarget { [PreserveSig] int GetMachineType(uint* machineType); @@ -58,7 +58,7 @@ internal unsafe partial interface ICLRDataTarget [GeneratedComInterface] [Guid("17d5b8c6-34a9-407f-af4f-a930201d4e02")] -internal unsafe partial interface ICLRContractLocator +public unsafe partial interface ICLRContractLocator { [PreserveSig] int GetContractDescriptor(ulong* contractAddress); diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/ISOSDacInterface.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ISOSDacInterface.cs similarity index 93% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/ISOSDacInterface.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ISOSDacInterface.cs index 0426e0cce705fd..a43959d81f63dc 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/ISOSDacInterface.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ISOSDacInterface.cs @@ -12,7 +12,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; // See src/coreclr/inc/sospriv.idl #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value -internal enum CLRDataOtherNotifyFlag +public enum CLRDataOtherNotifyFlag { CLRDATA_NOTIFY_ON_MODULE_LOAD = 0x1, CLRDATA_NOTIFY_ON_MODULE_UNLOAD = 0x2, @@ -20,7 +20,7 @@ internal enum CLRDataOtherNotifyFlag CLRDATA_NOTIFY_ON_EXCEPTION_CATCH_ENTER = 0x8 } -internal struct DacpThreadStoreData +public struct DacpThreadStoreData { public int threadCount; public int unstartedThreadCount; @@ -33,7 +33,7 @@ internal struct DacpThreadStoreData public int fHostConfig; // Uses hosting flags defined above }; -internal enum DacpAppDomainDataStage : uint +public enum DacpAppDomainDataStage : uint { STAGE_CREATING, STAGE_READYFORMANAGEDCODE, @@ -50,7 +50,7 @@ internal enum DacpAppDomainDataStage : uint STAGE_CLOSED }; -internal struct DacpAppDomainData +public struct DacpAppDomainData { // The pointer to the AppDomain or SystemDomain. // It's useful to keep this around in the structure @@ -68,14 +68,14 @@ internal struct DacpAppDomainData public DacpAppDomainDataStage appDomainStage; }; -internal struct DacpAppDomainStoreData +public struct DacpAppDomainStoreData { public ClrDataAddress sharedDomain; public ClrDataAddress systemDomain; public int DomainCount; }; -internal struct DacpAssemblyData +public struct DacpAssemblyData { public ClrDataAddress AssemblyPtr; public ClrDataAddress ClassLoader; @@ -89,7 +89,7 @@ internal struct DacpAssemblyData public uint dwLocationFlags; } -internal struct DacpThreadData +public struct DacpThreadData { public int corThreadId; public int osThreadId; @@ -108,7 +108,7 @@ internal struct DacpThreadData public ClrDataAddress nextThread; } -internal struct DacpModuleData +public struct DacpModuleData { public ClrDataAddress Address; public ClrDataAddress PEAssembly; // Actually the module address in .NET 9+ @@ -138,13 +138,13 @@ internal struct DacpModuleData public ulong dwModuleIndex; // Always 0 - .NET no longer has this } -internal enum ModuleMapType +public enum ModuleMapType { TYPEDEFTOMETHODTABLE = 0x0, TYPEREFTOMETHODTABLE = 0x1 } -internal struct DacpMethodTableData +public struct DacpMethodTableData { public int bIsFree; // everything else is NULL if this is true. public ClrDataAddress module; @@ -163,7 +163,7 @@ internal struct DacpMethodTableData public int bContainsGCPointers; } -internal enum DacpObjectType +public enum DacpObjectType { OBJ_STRING = 0, OBJ_FREE, @@ -172,7 +172,7 @@ internal enum DacpObjectType OBJ_OTHER }; -internal struct DacpObjectData +public struct DacpObjectData { public ClrDataAddress MethodTable; public DacpObjectType ObjectType; @@ -189,7 +189,7 @@ internal struct DacpObjectData public ulong CCW; } -internal struct DacpUsefulGlobalsData +public struct DacpUsefulGlobalsData { public ClrDataAddress ArrayMethodTable; public ClrDataAddress StringMethodTable; @@ -199,7 +199,7 @@ internal struct DacpUsefulGlobalsData } #pragma warning restore CS0649 // Field is never assigned to, and will always have its default value -internal struct DacpMethodTableFieldData +public struct DacpMethodTableFieldData { public ushort wNumInstanceFields; public ushort wNumStaticFields; @@ -209,13 +209,13 @@ internal struct DacpMethodTableFieldData public ushort wContextStaticsSize; }; -internal enum MethodTableInitializationFlags +public enum MethodTableInitializationFlags { MethodTableInitialized = 1, MethodTableInitializationFailed = 2 }; -internal struct DacpReJitData +public struct DacpReJitData { // FIXME[cdac]: the C++ definition enum doesn't have an explicit underlying type or constant values for the flags public enum Flags : uint @@ -231,7 +231,7 @@ public enum Flags : uint public ClrDataAddress NativeCodeAddr; }; -internal struct DacpMethodDescData +public struct DacpMethodDescData { public int bHasNativeCode; public int bIsDynamic; @@ -264,21 +264,21 @@ internal struct DacpMethodDescData } -internal struct DacpMethodDescTransparencyData +public struct DacpMethodDescTransparencyData { public int bHasCriticalTransparentInfo; public int bIsCritical; public int bIsTreatAsSafe; } -internal struct DacpMethodTableTransparencyData +public struct DacpMethodTableTransparencyData { public int bHasCriticalTransparentInfo; public int bIsCritical; public int bIsTreatAsSafe; } -internal static class GCConstants +public static class GCConstants { public const int DAC_NUMBERGENERATIONS = 4; @@ -289,7 +289,7 @@ internal static class GCConstants public const int DAC_MAX_GLOBAL_GC_MECHANISMS_COUNT = 6; } -internal struct DacpGcHeapData +public struct DacpGcHeapData { public int bServerMode; public int bGcStructuresValid; @@ -297,7 +297,7 @@ internal struct DacpGcHeapData public uint g_max_generation; } -internal struct DacpGenerationData +public struct DacpGenerationData { public ClrDataAddress start_segment; public ClrDataAddress allocation_start; @@ -307,7 +307,7 @@ internal struct DacpGenerationData public ClrDataAddress allocContextLimit; } -internal struct DacpGcHeapDetails +public struct DacpGcHeapDetails { public ClrDataAddress heapAddr; // Only filled in server mode, otherwise NULL public ClrDataAddress alloc_allocated; @@ -341,7 +341,7 @@ public struct FinalizationDataArray public ClrDataAddress card_table; } -internal struct DacpHeapSegmentData +public struct DacpHeapSegmentData { public ClrDataAddress segmentAddr; public ClrDataAddress allocated; @@ -357,7 +357,7 @@ internal struct DacpHeapSegmentData public ClrDataAddress background_allocated; } -internal struct DacpOomData +public struct DacpOomData { public int reason; public ulong alloc_size; @@ -368,7 +368,7 @@ internal struct DacpOomData public int loh_p; // BOOL } -internal struct DacpGcHeapAnalyzeData +public struct DacpGcHeapAnalyzeData { public ClrDataAddress heapAddr; public ClrDataAddress internal_root_array; @@ -378,7 +378,7 @@ internal struct DacpGcHeapAnalyzeData [GeneratedComInterface] [Guid("286CA186-E763-4F61-9760-487D43AE4341")] -internal unsafe partial interface ISOSEnum +public unsafe partial interface ISOSEnum { [PreserveSig] int Skip(uint count); @@ -390,7 +390,7 @@ internal unsafe partial interface ISOSEnum int GetCount(uint* pCount); } -internal struct DacpFieldDescData +public struct DacpFieldDescData { public CorElementType Type; public CorElementType sigType; // ELEMENT_TYPE_XXX from signature. We need this to display pretty name for String in minidump's case @@ -408,7 +408,7 @@ internal struct DacpFieldDescData [GeneratedComInterface] [Guid("436f00f2-b42a-4b9f-870c-e73db66ae930")] -internal unsafe partial interface ISOSDacInterface +public unsafe partial interface ISOSDacInterface { // All functions are explicitly PreserveSig so that we can just return E_NOTIMPL instead of throwing // as the cDAC slowly replaces parts of the DAC. @@ -648,7 +648,7 @@ internal unsafe partial interface ISOSDacInterface }; #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value -internal struct DacpExceptionObjectData +public struct DacpExceptionObjectData { public ClrDataAddress Message; public ClrDataAddress InnerException; @@ -663,7 +663,7 @@ internal struct DacpExceptionObjectData [GeneratedComInterface] [Guid("A16026EC-96F4-40BA-87FB-5575986FB7AF")] -internal unsafe partial interface ISOSDacInterface2 +public unsafe partial interface ISOSDacInterface2 { [PreserveSig] int GetObjectExceptionData(ClrDataAddress objectAddress, DacpExceptionObjectData* data); @@ -671,7 +671,7 @@ internal unsafe partial interface ISOSDacInterface2 int IsRCWDCOMProxy(ClrDataAddress rcwAddress, int* inDCOMProxy); } -internal struct DacpGCInterestingInfoData +public struct DacpGCInterestingInfoData { [System.Runtime.CompilerServices.InlineArray(GCConstants.DAC_NUM_GC_DATA_POINTS)] public struct InterestingDataPointsArray @@ -712,7 +712,7 @@ public struct GlobalMechanismsArray [GeneratedComInterface] [Guid("B08C5CDC-FD8A-49C5-AB38-5FEEF35235B4")] -internal unsafe partial interface ISOSDacInterface3 +public unsafe partial interface ISOSDacInterface3 { [PreserveSig] int GetGCInterestingInfoData(ClrDataAddress interestingInfoAddr, DacpGCInterestingInfoData* data); @@ -724,7 +724,7 @@ internal unsafe partial interface ISOSDacInterface3 [GeneratedComInterface] [Guid("74B9D34C-A612-4B07-93DD-5462178FCE11")] -internal unsafe partial interface ISOSDacInterface4 +public unsafe partial interface ISOSDacInterface4 { [PreserveSig] int GetClrNotification([In, Out, MarshalUsing(CountElementName = nameof(count))] ClrDataAddress[] arguments, int count, int* pNeeded); @@ -732,13 +732,13 @@ internal unsafe partial interface ISOSDacInterface4 [GeneratedComInterface] [Guid("127d6abe-6c86-4e48-8e7b-220781c58101")] -internal unsafe partial interface ISOSDacInterface5 +public unsafe partial interface ISOSDacInterface5 { [PreserveSig] int GetTieredVersions(ClrDataAddress methodDesc, int rejitId, /*struct DacpTieredVersionData*/void* nativeCodeAddrs, int cNativeCodeAddrs, int* pcNativeCodeAddrs); }; -internal struct DacpMethodTableCollectibleData +public struct DacpMethodTableCollectibleData { public ClrDataAddress LoaderAllocatorObjectHandle; public int bCollectible; @@ -746,13 +746,13 @@ internal struct DacpMethodTableCollectibleData [GeneratedComInterface] [Guid("11206399-4B66-4EDB-98EA-85654E59AD45")] -internal unsafe partial interface ISOSDacInterface6 +public unsafe partial interface ISOSDacInterface6 { [PreserveSig] int GetMethodTableCollectibleData(ClrDataAddress mt, DacpMethodTableCollectibleData* data); }; -internal struct DacpReJitData2 +public struct DacpReJitData2 { public enum Flags : uint { @@ -768,7 +768,7 @@ public enum Flags : uint public ClrDataAddress ilCodeVersionNodePtr; } -internal struct DacpProfilerILData +public struct DacpProfilerILData { public enum ModificationType { @@ -784,7 +784,7 @@ public enum ModificationType [GeneratedComInterface] [Guid("c1020dde-fe98-4536-a53b-f35a74c327eb")] -internal unsafe partial interface ISOSDacInterface7 +public unsafe partial interface ISOSDacInterface7 { [PreserveSig] int GetPendingReJITID(ClrDataAddress methodDesc, int* pRejitId); @@ -798,7 +798,7 @@ internal unsafe partial interface ISOSDacInterface7 [GeneratedComInterface] [Guid("c12f35a9-e55c-4520-a894-b3dc5165dfce")] -internal unsafe partial interface ISOSDacInterface8 +public unsafe partial interface ISOSDacInterface8 { [PreserveSig] int GetNumberGenerations(uint* pGenerations); @@ -821,14 +821,14 @@ internal unsafe partial interface ISOSDacInterface8 [GeneratedComInterface] [Guid("4eca42d8-7e7b-4c8a-a116-7bfbf6929267")] -internal partial interface ISOSDacInterface9 +public partial interface ISOSDacInterface9 { int GetBreakingChangeVersion(); } [GeneratedComInterface] [Guid("90B8FCC3-7251-4B0A-AE3D-5C13A67EC9AA")] -internal unsafe partial interface ISOSDacInterface10 +public unsafe partial interface ISOSDacInterface10 { [PreserveSig] int GetObjectComWrappersData(ClrDataAddress objAddr, ClrDataAddress* rcw, uint count, ClrDataAddress* mowList, uint* pNeeded); @@ -844,7 +844,7 @@ internal unsafe partial interface ISOSDacInterface10 [GeneratedComInterface] [Guid("96BA1DB9-14CD-4492-8065-1CAAECF6E5CF")] -internal unsafe partial interface ISOSDacInterface11 +public unsafe partial interface ISOSDacInterface11 { [PreserveSig] int IsTrackedType(ClrDataAddress objAddr, Interop.BOOL* isTrackedType, Interop.BOOL* hasTaggedMemory); @@ -854,7 +854,7 @@ internal unsafe partial interface ISOSDacInterface11 [GeneratedComInterface] [Guid("1b93bacc-8ca4-432d-943a-3e6e7ec0b0a3")] -internal unsafe partial interface ISOSDacInterface12 +public unsafe partial interface ISOSDacInterface12 { [PreserveSig] int GetGlobalAllocationContext(ClrDataAddress* allocPtr, ClrDataAddress* allocLimit); @@ -862,7 +862,7 @@ internal unsafe partial interface ISOSDacInterface12 [GeneratedComInterface] [Guid("3176a8ed-597b-4f54-a71f-83695c6a8c5e")] -internal unsafe partial interface ISOSDacInterface13 +public unsafe partial interface ISOSDacInterface13 { [PreserveSig] int TraverseLoaderHeap(ClrDataAddress loaderHeapAddr, /*LoaderHeapKind*/ int kind, /*VISITHEAP*/ delegate* unmanaged pCallback); @@ -884,7 +884,7 @@ internal unsafe partial interface ISOSDacInterface13 [GeneratedComInterface] [Guid("9aa22aca-6dc6-4a0c-b4e0-70d2416b9837")] -internal unsafe partial interface ISOSDacInterface14 +public unsafe partial interface ISOSDacInterface14 { [PreserveSig] int GetStaticBaseAddress(ClrDataAddress methodTable, ClrDataAddress* nonGCStaticsAddress, ClrDataAddress* GCStaticsAddress); @@ -894,7 +894,7 @@ internal unsafe partial interface ISOSDacInterface14 int GetMethodTableInitializationFlags(ClrDataAddress methodTable, MethodTableInitializationFlags* initializationStatus); } -internal struct SOSMethodData +public struct SOSMethodData { public ClrDataAddress MethodDesc; public ClrDataAddress Entrypoint; @@ -906,7 +906,7 @@ internal struct SOSMethodData [GeneratedComInterface] [Guid("3c0fe725-c324-4a4f-8100-d399588a662e")] -internal unsafe partial interface ISOSMethodEnum : ISOSEnum +public unsafe partial interface ISOSMethodEnum : ISOSEnum { [PreserveSig] int Next(uint count, [In, Out, MarshalUsing(CountElementName = nameof(count))] SOSMethodData[] values, uint* pNeeded); @@ -914,7 +914,7 @@ internal unsafe partial interface ISOSMethodEnum : ISOSEnum [GeneratedComInterface] [Guid("7ed81261-52a9-4a23-a358-c3313dea30a8")] -internal unsafe partial interface ISOSDacInterface15 +public unsafe partial interface ISOSDacInterface15 { [PreserveSig] int GetMethodTableSlotEnumerator(ClrDataAddress mt, out ISOSMethodEnum? enumerator); @@ -922,7 +922,7 @@ internal unsafe partial interface ISOSDacInterface15 [GeneratedComInterface] [Guid("4ba12ff8-daac-4e43-ac56-98cf8d5c595d")] -internal unsafe partial interface ISOSDacInterface16 +public unsafe partial interface ISOSDacInterface16 { [PreserveSig] int GetGCDynamicAdaptationMode(int* pDynamicAdaptationMode); diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/IXCLRData.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/IXCLRData.cs similarity index 96% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/IXCLRData.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/IXCLRData.cs index 6b391907634fc7..9e181eeab46671 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/IXCLRData.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/IXCLRData.cs @@ -10,14 +10,14 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; // This file contains managed declarations for the IXCLRData interfaces. // See src/coreclr/inc/xclrdata.idl -internal struct CLRDataModuleExtent +public struct CLRDataModuleExtent { public ClrDataAddress baseAddress; public uint length; public uint /* CLRDataModuleExtentType */ type; } -internal struct DacpGetModuleData +public struct DacpGetModuleData { public uint IsDynamic; public uint IsInMemory; @@ -31,7 +31,7 @@ internal struct DacpGetModuleData [GeneratedComInterface] [Guid("88E32849-0A0A-4cb0-9022-7CD2E9E139E2")] -internal unsafe partial interface IXCLRDataModule +public unsafe partial interface IXCLRDataModule { [PreserveSig] int StartEnumAssemblies(ulong* handle); @@ -129,7 +129,7 @@ internal unsafe partial interface IXCLRDataModule [GeneratedComInterface] [Guid("34625881-7EB3-4524-817B-8DB9D064C760")] -internal unsafe partial interface IXCLRDataModule2 +public unsafe partial interface IXCLRDataModule2 { [PreserveSig] int SetJITCompilerFlags(uint flags); @@ -137,7 +137,7 @@ internal unsafe partial interface IXCLRDataModule2 [GeneratedComInterface] [Guid("5c552ab6-fc09-4cb3-8e36-22fa03c798b7")] -internal unsafe partial interface IXCLRDataProcess +public unsafe partial interface IXCLRDataProcess { [PreserveSig] int Flush(); @@ -313,9 +313,9 @@ int DumpNativeImage( /*IXCLRDisassemblySupport*/ void* dis); } -internal struct GcEvtArgs +public struct GcEvtArgs { - internal enum GcEvt_t + public enum GcEvt_t { GC_MARK_END = 1, GC_EVENT_TYPE_MAX = GC_MARK_END + 1 @@ -326,7 +326,7 @@ internal enum GcEvt_t [GeneratedComInterface] [Guid("5c552ab6-fc09-4cb3-8e36-22fa03c798b8")] -internal unsafe partial interface IXCLRDataProcess2 : IXCLRDataProcess +public unsafe partial interface IXCLRDataProcess2 : IXCLRDataProcess { [PreserveSig] int GetGcNotification(GcEvtArgs* gcEvtArgs); @@ -336,7 +336,7 @@ internal unsafe partial interface IXCLRDataProcess2 : IXCLRDataProcess [GeneratedComInterface] [Guid("E59D8D22-ADA7-49a2-89B5-A415AFCFC95F")] -internal unsafe partial interface IXCLRDataStackWalk +public unsafe partial interface IXCLRDataStackWalk { [PreserveSig] int GetContext( @@ -369,7 +369,7 @@ int GetContext( [GeneratedComInterface] [Guid("271498C2-4085-4766-BC3A-7F8ED188A173")] -internal unsafe partial interface IXCLRDataFrame +public unsafe partial interface IXCLRDataFrame { [PreserveSig] int GetFrameType(uint* simpleType, uint* detailedType); @@ -433,7 +433,7 @@ int Request( [GeneratedComInterface] [Guid("1C4D9A4B-702D-4CF6-B290-1DB6F43050D0")] -internal unsafe partial interface IXCLRDataFrame2 +public unsafe partial interface IXCLRDataFrame2 { [PreserveSig] int GetExactGenericArgsToken(/*IXCLRDataValue*/ void** genericToken); @@ -441,7 +441,7 @@ internal unsafe partial interface IXCLRDataFrame2 [GeneratedComInterface] [Guid("A5B0BEEA-EC62-4618-8012-A24FFC23934C")] -internal unsafe partial interface IXCLRDataTask +public unsafe partial interface IXCLRDataTask { [PreserveSig] int GetProcess(/*IXCLRDataProcess*/ void** process); @@ -492,13 +492,13 @@ internal unsafe partial interface IXCLRDataTask int GetLastExceptionState(/*IXCLRDataExceptionState*/ void** exception); } -internal enum ClrDataSourceType : uint +public enum ClrDataSourceType : uint { CLRDATA_SOURCE_TYPE_INVALID = 0, } // CLRDATA_IL_ADDRESS_MAP -internal struct ClrDataILAddressMap +public struct ClrDataILAddressMap { public uint ilOffset; public ClrDataAddress startAddress; @@ -508,7 +508,7 @@ internal struct ClrDataILAddressMap [GeneratedComInterface] [Guid("ECD73800-22CA-4b0d-AB55-E9BA7E6318A5")] -internal unsafe partial interface IXCLRDataMethodInstance +public unsafe partial interface IXCLRDataMethodInstance { [PreserveSig] int GetTypeInstance(/*IXCLRDataTypeInstance*/ void** typeInstance); diff --git a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/Interop.BOOL.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/Interop.BOOL.cs new file mode 100644 index 00000000000000..f70aded7565cb2 --- /dev/null +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/Interop.BOOL.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +namespace Microsoft.Diagnostics.DataContractReader.Legacy; +public static partial class Interop +{ + /// + /// Blittable version of Windows BOOL type. It is convenient in situations where + /// manual marshalling is required, or to avoid overhead of regular bool marshalling. + /// + /// + /// Some Windows APIs return arbitrary integer values although the return type is defined + /// as BOOL. It is best to never compare BOOL to TRUE. Always use bResult != BOOL.FALSE + /// or bResult == BOOL.FALSE . + /// + public enum BOOL : int + { + FALSE = 0, + TRUE = 1, + } +} diff --git a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/Microsoft.Diagnostics.DataContractReader.Legacy.csproj b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/Microsoft.Diagnostics.DataContractReader.Legacy.csproj new file mode 100644 index 00000000000000..4eb5f58cc529dc --- /dev/null +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/Microsoft.Diagnostics.DataContractReader.Legacy.csproj @@ -0,0 +1,21 @@ + + + + $(NetCoreAppToolCurrent) + Microsoft.Diagnostics.DataContractReader.Legacy + enable + true + false + true + true + false + + + + + + + + + + diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/OutputBufferHelpers.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/OutputBufferHelpers.cs similarity index 95% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/OutputBufferHelpers.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/OutputBufferHelpers.cs index 1f6d00716e3768..51ae00d6d1b962 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/OutputBufferHelpers.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/OutputBufferHelpers.cs @@ -5,7 +5,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; -internal static class OutputBufferHelpers +public static class OutputBufferHelpers { public static unsafe void CopyStringToBuffer(char* stringBuf, uint bufferSize, uint* neededBufferSize, string str) { diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.ICLRDataEnumMemoryRegions.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.ICLRDataEnumMemoryRegions.cs similarity index 89% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.ICLRDataEnumMemoryRegions.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.ICLRDataEnumMemoryRegions.cs index c0a327e21f969b..4c5be79950a737 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.ICLRDataEnumMemoryRegions.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.ICLRDataEnumMemoryRegions.cs @@ -9,7 +9,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; /// Implementation of ICLRDataEnumMemoryRegions interface intended to be passed out to consumers /// interacting with the DAC via those COM interfaces. /// -internal sealed unsafe partial class SOSDacImpl : ICLRDataEnumMemoryRegions +public sealed unsafe partial class SOSDacImpl : ICLRDataEnumMemoryRegions { int ICLRDataEnumMemoryRegions.EnumMemoryRegions(void* callback, uint miniDumpFlags, int clrFlags) => _legacyEnumMemory is not null ? _legacyEnumMemory.EnumMemoryRegions(callback, miniDumpFlags, clrFlags) : HResults.E_NOTIMPL; diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.IXCLRDataProcess.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.IXCLRDataProcess.cs similarity index 99% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.IXCLRDataProcess.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.IXCLRDataProcess.cs index 72bb5b717bf0df..6fa6cbe173ec1a 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.IXCLRDataProcess.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.IXCLRDataProcess.cs @@ -16,7 +16,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; /// Implementation of IXCLRDataProcess* interfaces intended to be passed out to consumers /// interacting with the DAC via those COM interfaces. /// -internal sealed unsafe partial class SOSDacImpl : IXCLRDataProcess, IXCLRDataProcess2 +public sealed unsafe partial class SOSDacImpl : IXCLRDataProcess, IXCLRDataProcess2 { int IXCLRDataProcess.Flush() { @@ -136,7 +136,7 @@ int IXCLRDataProcess.EndEnumModules(ulong handle) int IXCLRDataProcess.GetModuleByAddress(ClrDataAddress address, /*IXCLRDataModule*/ void** mod) => _legacyProcess is not null ? _legacyProcess.GetModuleByAddress(address, mod) : HResults.E_NOTIMPL; - internal class EnumMethodInstances + internal sealed class EnumMethodInstances { private readonly Target _target; private readonly TargetPointer _mainMethodDesc; diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.cs similarity index 99% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.cs index 9061601fd126c6..dd385161312b2d 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.cs @@ -28,7 +28,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; /// corresponding error code. /// [GeneratedComClass] -internal sealed unsafe partial class SOSDacImpl +public sealed unsafe partial class SOSDacImpl : ISOSDacInterface, ISOSDacInterface2, ISOSDacInterface3, ISOSDacInterface4, ISOSDacInterface5, ISOSDacInterface6, ISOSDacInterface7, ISOSDacInterface8, ISOSDacInterface9, ISOSDacInterface10, ISOSDacInterface11, ISOSDacInterface12, ISOSDacInterface13, ISOSDacInterface14, ISOSDacInterface15, diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/SigFormat.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SigFormat.cs similarity index 100% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/SigFormat.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SigFormat.cs diff --git a/src/native/managed/cdac/mscordaccore_universal/Legacy/TypeNameBuilder.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/TypeNameBuilder.cs similarity index 99% rename from src/native/managed/cdac/mscordaccore_universal/Legacy/TypeNameBuilder.cs rename to src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/TypeNameBuilder.cs index d05f14803d5baa..15f5bc8778eb20 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Legacy/TypeNameBuilder.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/TypeNameBuilder.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; @@ -11,7 +11,7 @@ namespace Microsoft.Diagnostics.DataContractReader.Legacy; [Flags] -internal enum TypeNameFormat +public enum TypeNameFormat { FormatNamespace = 1, FormatFullInst = 2, @@ -21,7 +21,7 @@ internal enum TypeNameFormat FormatSignature = 32, } -internal struct TypeNameBuilder +public struct TypeNameBuilder { [Flags] private enum ParseState @@ -112,7 +112,7 @@ public static void AppendMethodImpl(Target target, StringBuilder stringBuilder, arrayName = ".ctor"; break; default: - throw new ArgumentException(nameof(method)); + throw new ArgumentException($"Unkown ArrayFunctionType: {functionType}.", nameof(method)); } stringBuilder.Append(arrayName); diff --git a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader/CachingContractRegistry.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader/CachingContractRegistry.cs index 0afe774efde541..629a2d66e58cd4 100644 --- a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader/CachingContractRegistry.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader/CachingContractRegistry.cs @@ -20,7 +20,7 @@ internal sealed class CachingContractRegistry : ContractRegistry private readonly Target _target; private readonly TryGetContractVersionDelegate _tryGetContractVersion; - public CachingContractRegistry(Target target, TryGetContractVersionDelegate tryGetContractVersion, Action>>? configureFactories = null) + public CachingContractRegistry(Target target, TryGetContractVersionDelegate tryGetContractVersion, IEnumerable> additionalFactories, Action>>? configureFactories = null) { _target = target; _tryGetContractVersion = tryGetContractVersion; @@ -47,31 +47,15 @@ public CachingContractRegistry(Target target, TryGetContractVersionDelegate tryG [typeof(INotifications)] = new NotificationsFactory(), [typeof(ISignatureDecoder)] = new SignatureDecoderFactory(), }; + + foreach (IContractFactory factory in additionalFactories) + { + _factories[factory.ContractType] = factory; + } configureFactories?.Invoke(_factories); } - public override IException Exception => GetContract(); - public override ILoader Loader => GetContract(); - public override IEcmaMetadata EcmaMetadata => GetContract(); - public override IObject Object => GetContract(); - public override IThread Thread => GetContract(); - public override IRuntimeTypeSystem RuntimeTypeSystem => GetContract(); - public override IDacStreams DacStreams => GetContract(); - public override IExecutionManager ExecutionManager => GetContract(); - public override ICodeVersions CodeVersions => GetContract(); - public override IPlatformMetadata PlatformMetadata => GetContract(); - public override IPrecodeStubs PrecodeStubs => GetContract(); - public override IReJIT ReJIT => GetContract(); - public override IStackWalk StackWalk => GetContract(); - public override IRuntimeInfo RuntimeInfo => GetContract(); - public override IComWrappers ComWrappers => GetContract(); - public override IDebugInfo DebugInfo => GetContract(); - public override ISHash SHash => GetContract(); - public override IGC GC => GetContract(); - public override INotifications Notifications => GetContract(); - public override ISignatureDecoder SignatureDecoder => GetContract(); - - private TContract GetContract() where TContract : IContract + public override TContract GetContract() { if (_contracts.TryGetValue(typeof(TContract), out IContract? contractMaybe)) return (TContract)contractMaybe; diff --git a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader/ContractDescriptorTarget.cs b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader/ContractDescriptorTarget.cs index bec5c1cb7dc3f1..50d138a7c507df 100644 --- a/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader/ContractDescriptorTarget.cs +++ b/src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader/ContractDescriptorTarget.cs @@ -9,6 +9,7 @@ using System.Runtime.CompilerServices; using System.Text; using Microsoft.Diagnostics.DataContractReader.Data; +using Microsoft.Diagnostics.DataContractReader.Contracts; namespace Microsoft.Diagnostics.DataContractReader; @@ -59,6 +60,7 @@ public static bool TryCreate( ReadFromTargetDelegate readFromTarget, WriteToTargetDelegate writeToTarget, GetTargetThreadContextDelegate getThreadContext, + IEnumerable> additionalFactories, [NotNullWhen(true)] out ContractDescriptorTarget? target) { DataTargetDelegates dataTargetDelegates = new DataTargetDelegates(readFromTarget, writeToTarget, getThreadContext); @@ -67,7 +69,7 @@ public static bool TryCreate( dataTargetDelegates, out Descriptor[] descriptors)) { - target = new ContractDescriptorTarget(descriptors, dataTargetDelegates); + target = new ContractDescriptorTarget(descriptors, dataTargetDelegates, additionalFactories); return true; } @@ -92,7 +94,8 @@ public static ContractDescriptorTarget Create( WriteToTargetDelegate writeToTarget, GetTargetThreadContextDelegate getThreadContext, bool isLittleEndian, - int pointerSize) + int pointerSize, + IEnumerable> additionalFactories) { return new ContractDescriptorTarget( [ @@ -103,12 +106,13 @@ public static ContractDescriptorTarget Create( PointerData = globalPointerValues } ], - new DataTargetDelegates(readFromTarget, writeToTarget, getThreadContext)); + new DataTargetDelegates(readFromTarget, writeToTarget, getThreadContext), + additionalFactories); } - private ContractDescriptorTarget(Descriptor[] descriptors, DataTargetDelegates dataTargetDelegates) + private ContractDescriptorTarget(Descriptor[] descriptors, DataTargetDelegates dataTargetDelegates, IEnumerable> additionalFactories) { - Contracts = new CachingContractRegistry(this, this.TryGetContractVersion); + Contracts = new CachingContractRegistry(this, this.TryGetContractVersion, additionalFactories); ProcessedData = new DataCache(this); _config = descriptors[0].Config; _dataTargetDelegates = dataTargetDelegates; diff --git a/src/native/managed/cdac/mscordaccore_universal/Entrypoints.cs b/src/native/managed/cdac/mscordaccore_universal/Entrypoints.cs index d0db95a1e58ccb..acc5dec4a18775 100644 --- a/src/native/managed/cdac/mscordaccore_universal/Entrypoints.cs +++ b/src/native/managed/cdac/mscordaccore_universal/Entrypoints.cs @@ -45,6 +45,7 @@ private static unsafe int Init( return readThreadContext(threadId, contextFlags, (uint)buffer.Length, bufferPtr, delegateContext); } }, + [], out ContractDescriptorTarget? target)) return -1; @@ -147,6 +148,7 @@ private static unsafe int CLRDataCreateInstanceImpl(Guid* pIID, IntPtr /*ICLRDat return dataTarget.GetThreadContext(threadId, contextFlags, (uint)bufferToFill.Length, bufferPtr); } }, + [], out ContractDescriptorTarget? target)) { return -1; diff --git a/src/native/managed/cdac/mscordaccore_universal/mscordaccore_universal.csproj b/src/native/managed/cdac/mscordaccore_universal/mscordaccore_universal.csproj index e0674b33864f71..dd127583c1592b 100644 --- a/src/native/managed/cdac/mscordaccore_universal/mscordaccore_universal.csproj +++ b/src/native/managed/cdac/mscordaccore_universal/mscordaccore_universal.csproj @@ -17,9 +17,6 @@ - - Common\Interop\Windows\Interop.BOOL.cs - @@ -32,7 +29,7 @@ - + diff --git a/src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorBuilder.cs b/src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorBuilder.cs index 19e0db7c404314..c7961216806527 100644 --- a/src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorBuilder.cs +++ b/src/native/managed/cdac/tests/ContractDescriptor/ContractDescriptorBuilder.cs @@ -205,6 +205,6 @@ public bool TryCreateTarget(DescriptorBuilder descriptor, [NotNullWhen(true)] ou _created = true; ulong contractDescriptorAddress = descriptor.CreateSubDescriptor(ContractDescriptorAddr, JsonDescriptorAddr, ContractPointerDataAddr); MockMemorySpace.MemoryContext memoryContext = GetMemoryContext(); - return ContractDescriptorTarget.TryCreate(contractDescriptorAddress, memoryContext.ReadFromTarget, memoryContext.WriteToTarget, null, out target); + return ContractDescriptorTarget.TryCreate(contractDescriptorAddress, memoryContext.ReadFromTarget, memoryContext.WriteToTarget, null, [], out target); } } diff --git a/src/tools/StressLogAnalyzer/src/Program.cs b/src/tools/StressLogAnalyzer/src/Program.cs index 4012f137e97673..f1f10ea3ae4cd4 100644 --- a/src/tools/StressLogAnalyzer/src/Program.cs +++ b/src/tools/StressLogAnalyzer/src/Program.cs @@ -496,7 +496,8 @@ ContractDescriptorTarget CreateTarget() => ContractDescriptorTarget.Create( (address, buffer) => throw new NotImplementedException("StressLogAnalyzer does not provide WriteToTarget implementation"), (threadId, contextFlags, bufferToFill) => throw new NotImplementedException("StressLogAnalyzer does not provide GetTargetThreadContext implementation"), true, - nuint.Size); + nuint.Size, + []); } private static unsafe TimeTracker CreateTimeTracker(SafeMemoryMappedViewHandle handle, Options options)