Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
043157d
cDAC: Add no-fallback mode via CDAC_NO_FALLBACK env var
max-charlamb Apr 14, 2026
ede7a70
cDAC: Always delegate ICLRDataEnumMemoryRegions to legacy DAC
max-charlamb Apr 15, 2026
5b89ccc
Revert crosscomp.h changes
max-charlamb Apr 15, 2026
cd48474
cDAC: Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 15, 2026
bf0cb57
Replace binary no-fallback switch with granular LegacyFallbackHelper
max-charlamb Apr 16, 2026
dc569ce
Fix allowlist to use nameof and correct method name
max-charlamb Apr 16, 2026
352cf06
Simplify CreateDacDbiInterface to match CreateSosInterface pattern
max-charlamb Apr 16, 2026
5172453
Gate IMetaDataImport QI fallback through LegacyFallbackHelper
max-charlamb Apr 16, 2026
b7f57b0
Track blocked fallback calls and log on process exit
max-charlamb Apr 16, 2026
3839a5d
Allowlist GetInterface QI, switch blocked fallback logging to stderr
max-charlamb Apr 16, 2026
8723a34
Log every fallback attempt (allowed and blocked) to stderr
max-charlamb Apr 16, 2026
dd401b3
Allowlist remaining blocked APIs and add file-level DBI allowlist
max-charlamb Apr 17, 2026
bee8db9
Use -noFallback flag in CI and remove unnecessary try/catch
max-charlamb Apr 17, 2026
f29fd2e
Address PR review feedback
max-charlamb Apr 17, 2026
8ec4bef
Remove unused _prevent_release field from DacDbiImpl
max-charlamb Apr 17, 2026
4884646
Revert datadescriptor.inc and restore CanFallback check ordering
max-charlamb Apr 17, 2026
38cf507
Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 17, 2026
17974c6
Remove AggressiveInlining from CanFallback
max-charlamb Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/pipelines/diagnostics/runtime-diag-job.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,7 @@ parameters:
disableComponentGovernance: ''
liveRuntimeDir: ''
useCdac: false
noFallback: false
classFilter: ''

jobs:
Expand DownExpand Up@@ -89,6 +90,7 @@ jobs:
- _TestArgs: '-test'
- _Cross: ''
- _CdacArgs: ''
- _NoFallbackArgs: ''
- _ClassFilterArgs: ''

- _buildScript: $(Build.SourcesDirectory)$(dir)build$(scriptExt)
Expand All@@ -105,6 +107,9 @@ jobs:
- ${{ if eq(parameters.useCdac, 'true') }}:
- _CdacArgs: '-useCdac'

- ${{ if eq(parameters.noFallback, 'true') }}:
- _NoFallbackArgs: '-noFallback'

- ${{ if ne(parameters.classFilter, '') }}:
- _ClassFilterArgs: '-classfilter ${{ parameters.classFilter }}'

Expand DownExpand Up@@ -201,6 +206,7 @@ jobs:
-architecture ${{ parameters.archType }}
-privatebuild
$(_CdacArgs)
$(_NoFallbackArgs)
-liveRuntimeDir ${{ parameters.liveRuntimeDir }}
$(_TestArgs)
$(_Cross)
Expand Down
54 changes: 54 additions & 0 deletions eng/pipelines/runtime-diagnostics.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -144,6 +144,60 @@ extends:
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
buildConfig: release
platforms:
- windows_x64
# Workaround: microsoft/azure-pipelines-tasks#21871
variables:
- name: AllowPtrToDetectTestRunRetryFiles
value: false
jobParameters:
name: cDAC_no_fallback
useCdac: true
noFallback: true
classFilter: SOS
isOfficialBuild: ${{ variables.isOfficialBuild }}
liveRuntimeDir: $(Build.SourcesDirectory)/artifacts/runtime
timeoutInMinutes: 360
Comment thread
max-charlamb marked this conversation as resolved.
dependsOn:
- build_windows_x64_release_AllSubsets_CoreCLR
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
artifactFileName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/runtime
displayName: 'Runtime Build Artifacts'
postBuildSteps:
- task: PublishTestResults@2
inputs:
testResultsFormat: xUnit
testResultsFiles: '**/*.xml'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults'
testRunTitle: 'Tests $(_PhaseName)'
failTaskOnFailedTests: true
publishRunAttachments: true
mergeTestResults: true
buildConfiguration: $(_BuildConfig)
continueOnError: true
condition: always()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/tmp/$(_BuildConfig)/dumps'
artifactName: 'Dumps_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Crash Dumps'
continueOnError: true
condition: failed()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults'
artifactName: 'TestResults_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/datadescriptor/datadescriptor.inc
Original file line numberDiff line numberDiff line change
Expand Up@@ -1274,7 +1274,7 @@ CDAC_TYPE_END(SyncBlockCache)

CDAC_TYPE_BEGIN(AuxiliarySymbolInfo)
CDAC_TYPE_SIZE(sizeof(VMAUXILIARYSYMBOLDEF))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, TYPE(CodePointer), Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Name, offsetof(VMAUXILIARYSYMBOLDEF, name))
CDAC_TYPE_END(AuxiliarySymbolInfo)

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ public ClrDataAppDomain(Target target, TargetPointer appDomain, IXCLRDataAppDoma
}

int IXCLRDataAppDomain.GetProcess(DacComNullableByRef<IXCLRDataProcess> process)
=> _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.GetName(uint bufLen, uint* nameLen, char* name)
{
Expand DownExpand Up@@ -181,8 +181,8 @@ int IXCLRDataAppDomain.IsSameObject(IXCLRDataAppDomain* appDomain)
}

int IXCLRDataAppDomain.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -112,7 +112,7 @@ int IXCLRDataExceptionState.GetPrevious(DacComNullableByRef<IXCLRDataExceptionSt
}

int IXCLRDataExceptionState.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataExceptionState.GetBaseType(/*CLRDataBaseExceptionType*/ uint* type) => HResults.E_NOTIMPL;

Expand DownExpand Up@@ -213,9 +213,9 @@ int IXCLRDataExceptionState.Request(uint reqCode, uint inBufferSize, byte* inBuf
}

int IXCLRDataExceptionState.IsSameState(EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.IsSameState2(uint flags, EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.GetTask(DacComNullableByRef<IXCLRDataTask> task)
{
int hr = HResults.S_OK, hrLocal = HResults.S_OK;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,7 +34,7 @@ public ClrDataFrame(Target target, IStackDataFrameHandle dataFrame, IXCLRDataFra

// IXCLRDataFrame implementation
int IXCLRDataFrame.GetFrameType(uint* simpleType, uint* detailedType)
=> _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetContext(
uint contextFlags,
Expand DownExpand Up@@ -332,7 +332,7 @@ int IXCLRDataFrame.GetCodeName(
uint bufLen,
uint* nameLen,
char* nameBuf)
=> _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetMethodInstance(DacComNullableByRef<IXCLRDataMethodInstance> method)
{
Expand DownExpand Up@@ -384,17 +384,17 @@ int IXCLRDataFrame.Request(
byte* inBuffer,
uint outBufferSize,
byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetNumTypeArguments(uint* numTypeArgs)
=> _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetTypeArgumentByIndex(uint index, DacComNullableByRef<IXCLRDataTypeInstance> typeArg)
=> _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;

// IXCLRDataFrame2 implementation
int IXCLRDataFrame2.GetExactGenericArgsToken(DacComNullableByRef<IXCLRDataValue> genericToken)
=> _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;

// ========== Metadata resolution helpers ==========

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,19 +27,19 @@ public ClrDataMethodDefinition(
_legacyImpl = legacyImpl;
}
int IXCLRDataMethodDefinition.GetTypeDefinition(DacComNullableByRef<IXCLRDataTypeDefinition> typeDefinition)
=> _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumInstances(IXCLRDataAppDomain? appDomain, ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumInstance(ulong* handle, DacComNullableByRef<IXCLRDataMethodInstance> instance)
=> _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumInstances(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetName(uint flags, uint bufLen, uint* nameLen, char* name)
=> _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<IXCLRDataModule> mod)
{
Expand DownExpand Up@@ -93,35 +93,35 @@ int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<
}

int IXCLRDataMethodDefinition.GetFlags(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.IsSameObject(IXCLRDataMethodDefinition? method)
=> _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetLatestEnCVersion(uint* version)
=> _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumExtents(ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumExtent(ulong* handle, ClrDataMethodDefinitionExtent* extent)
=> _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumExtents(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetCodeNotification(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.SetCodeNotification(uint flags)
=> _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetRepresentativeEntryAddress(ClrDataAddress* addr)
=> _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.HasClassOrMethodInstantiation(int* bGeneric)
=> _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
}
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
043157d
cDAC: Add no-fallback mode via CDAC_NO_FALLBACK env var
max-charlamb Apr 14, 2026
ede7a70
cDAC: Always delegate ICLRDataEnumMemoryRegions to legacy DAC
max-charlamb Apr 15, 2026
5b89ccc
Revert crosscomp.h changes
max-charlamb Apr 15, 2026
cd48474
cDAC: Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 15, 2026
bf0cb57
Replace binary no-fallback switch with granular LegacyFallbackHelper
max-charlamb Apr 16, 2026
dc569ce
Fix allowlist to use nameof and correct method name
max-charlamb Apr 16, 2026
352cf06
Simplify CreateDacDbiInterface to match CreateSosInterface pattern
max-charlamb Apr 16, 2026
5172453
Gate IMetaDataImport QI fallback through LegacyFallbackHelper
max-charlamb Apr 16, 2026
b7f57b0
Track blocked fallback calls and log on process exit
max-charlamb Apr 16, 2026
3839a5d
Allowlist GetInterface QI, switch blocked fallback logging to stderr
max-charlamb Apr 16, 2026
8723a34
Log every fallback attempt (allowed and blocked) to stderr
max-charlamb Apr 16, 2026
dd401b3
Allowlist remaining blocked APIs and add file-level DBI allowlist
max-charlamb Apr 17, 2026
bee8db9
Use -noFallback flag in CI and remove unnecessary try/catch
max-charlamb Apr 17, 2026
f29fd2e
Address PR review feedback
max-charlamb Apr 17, 2026
8ec4bef
Remove unused _prevent_release field from DacDbiImpl
max-charlamb Apr 17, 2026
4884646
Revert datadescriptor.inc and restore CanFallback check ordering
max-charlamb Apr 17, 2026
38cf507
Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 17, 2026
17974c6
Remove AggressiveInlining from CanFallback
max-charlamb Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/pipelines/diagnostics/runtime-diag-job.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,7 @@ parameters:
disableComponentGovernance: ''
liveRuntimeDir: ''
useCdac: false
noFallback: false
classFilter: ''

jobs:
Expand DownExpand Up@@ -89,6 +90,7 @@ jobs:
- _TestArgs: '-test'
- _Cross: ''
- _CdacArgs: ''
- _NoFallbackArgs: ''
- _ClassFilterArgs: ''

- _buildScript: $(Build.SourcesDirectory)$(dir)build$(scriptExt)
Expand All@@ -105,6 +107,9 @@ jobs:
- ${{ if eq(parameters.useCdac, 'true') }}:
- _CdacArgs: '-useCdac'

- ${{ if eq(parameters.noFallback, 'true') }}:
- _NoFallbackArgs: '-noFallback'

- ${{ if ne(parameters.classFilter, '') }}:
- _ClassFilterArgs: '-classfilter ${{ parameters.classFilter }}'

Expand DownExpand Up@@ -201,6 +206,7 @@ jobs:
-architecture ${{ parameters.archType }}
-privatebuild
$(_CdacArgs)
$(_NoFallbackArgs)
-liveRuntimeDir ${{ parameters.liveRuntimeDir }}
$(_TestArgs)
$(_Cross)
Expand Down
54 changes: 54 additions & 0 deletions eng/pipelines/runtime-diagnostics.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -144,6 +144,60 @@ extends:
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
buildConfig: release
platforms:
- windows_x64
# Workaround: microsoft/azure-pipelines-tasks#21871
variables:
- name: AllowPtrToDetectTestRunRetryFiles
value: false
jobParameters:
name: cDAC_no_fallback
useCdac: true
noFallback: true
classFilter: SOS
isOfficialBuild: ${{ variables.isOfficialBuild }}
liveRuntimeDir: $(Build.SourcesDirectory)/artifacts/runtime
timeoutInMinutes: 360
Comment thread
max-charlamb marked this conversation as resolved.
dependsOn:
- build_windows_x64_release_AllSubsets_CoreCLR
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
artifactFileName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/runtime
displayName: 'Runtime Build Artifacts'
postBuildSteps:
- task: PublishTestResults@2
inputs:
testResultsFormat: xUnit
testResultsFiles: '**/*.xml'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults'
testRunTitle: 'Tests $(_PhaseName)'
failTaskOnFailedTests: true
publishRunAttachments: true
mergeTestResults: true
buildConfiguration: $(_BuildConfig)
continueOnError: true
condition: always()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/tmp/$(_BuildConfig)/dumps'
artifactName: 'Dumps_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Crash Dumps'
continueOnError: true
condition: failed()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults'
artifactName: 'TestResults_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/datadescriptor/datadescriptor.inc
Original file line numberDiff line numberDiff line change
Expand Up@@ -1274,7 +1274,7 @@ CDAC_TYPE_END(SyncBlockCache)

CDAC_TYPE_BEGIN(AuxiliarySymbolInfo)
CDAC_TYPE_SIZE(sizeof(VMAUXILIARYSYMBOLDEF))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, TYPE(CodePointer), Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Name, offsetof(VMAUXILIARYSYMBOLDEF, name))
CDAC_TYPE_END(AuxiliarySymbolInfo)

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ public ClrDataAppDomain(Target target, TargetPointer appDomain, IXCLRDataAppDoma
}

int IXCLRDataAppDomain.GetProcess(DacComNullableByRef<IXCLRDataProcess> process)
=> _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.GetName(uint bufLen, uint* nameLen, char* name)
{
Expand DownExpand Up@@ -181,8 +181,8 @@ int IXCLRDataAppDomain.IsSameObject(IXCLRDataAppDomain* appDomain)
}

int IXCLRDataAppDomain.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -112,7 +112,7 @@ int IXCLRDataExceptionState.GetPrevious(DacComNullableByRef<IXCLRDataExceptionSt
}

int IXCLRDataExceptionState.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataExceptionState.GetBaseType(/*CLRDataBaseExceptionType*/ uint* type) => HResults.E_NOTIMPL;

Expand DownExpand Up@@ -213,9 +213,9 @@ int IXCLRDataExceptionState.Request(uint reqCode, uint inBufferSize, byte* inBuf
}

int IXCLRDataExceptionState.IsSameState(EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.IsSameState2(uint flags, EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.GetTask(DacComNullableByRef<IXCLRDataTask> task)
{
int hr = HResults.S_OK, hrLocal = HResults.S_OK;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,7 +34,7 @@ public ClrDataFrame(Target target, IStackDataFrameHandle dataFrame, IXCLRDataFra

// IXCLRDataFrame implementation
int IXCLRDataFrame.GetFrameType(uint* simpleType, uint* detailedType)
=> _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetContext(
uint contextFlags,
Expand DownExpand Up@@ -332,7 +332,7 @@ int IXCLRDataFrame.GetCodeName(
uint bufLen,
uint* nameLen,
char* nameBuf)
=> _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetMethodInstance(DacComNullableByRef<IXCLRDataMethodInstance> method)
{
Expand DownExpand Up@@ -384,17 +384,17 @@ int IXCLRDataFrame.Request(
byte* inBuffer,
uint outBufferSize,
byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetNumTypeArguments(uint* numTypeArgs)
=> _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetTypeArgumentByIndex(uint index, DacComNullableByRef<IXCLRDataTypeInstance> typeArg)
=> _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;

// IXCLRDataFrame2 implementation
int IXCLRDataFrame2.GetExactGenericArgsToken(DacComNullableByRef<IXCLRDataValue> genericToken)
=> _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;

// ========== Metadata resolution helpers ==========

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,19 +27,19 @@ public ClrDataMethodDefinition(
_legacyImpl = legacyImpl;
}
int IXCLRDataMethodDefinition.GetTypeDefinition(DacComNullableByRef<IXCLRDataTypeDefinition> typeDefinition)
=> _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumInstances(IXCLRDataAppDomain? appDomain, ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumInstance(ulong* handle, DacComNullableByRef<IXCLRDataMethodInstance> instance)
=> _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumInstances(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetName(uint flags, uint bufLen, uint* nameLen, char* name)
=> _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<IXCLRDataModule> mod)
{
Expand DownExpand Up@@ -93,35 +93,35 @@ int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<
}

int IXCLRDataMethodDefinition.GetFlags(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.IsSameObject(IXCLRDataMethodDefinition? method)
=> _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetLatestEnCVersion(uint* version)
=> _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumExtents(ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumExtent(ulong* handle, ClrDataMethodDefinitionExtent* extent)
=> _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumExtents(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetCodeNotification(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.SetCodeNotification(uint flags)
=> _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetRepresentativeEntryAddress(ClrDataAddress* addr)
=> _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.HasClassOrMethodInstantiation(int* bGeneric)
=> _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
}
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
043157d
cDAC: Add no-fallback mode via CDAC_NO_FALLBACK env var
max-charlamb Apr 14, 2026
ede7a70
cDAC: Always delegate ICLRDataEnumMemoryRegions to legacy DAC
max-charlamb Apr 15, 2026
5b89ccc
Revert crosscomp.h changes
max-charlamb Apr 15, 2026
cd48474
cDAC: Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 15, 2026
bf0cb57
Replace binary no-fallback switch with granular LegacyFallbackHelper
max-charlamb Apr 16, 2026
dc569ce
Fix allowlist to use nameof and correct method name
max-charlamb Apr 16, 2026
352cf06
Simplify CreateDacDbiInterface to match CreateSosInterface pattern
max-charlamb Apr 16, 2026
5172453
Gate IMetaDataImport QI fallback through LegacyFallbackHelper
max-charlamb Apr 16, 2026
b7f57b0
Track blocked fallback calls and log on process exit
max-charlamb Apr 16, 2026
3839a5d
Allowlist GetInterface QI, switch blocked fallback logging to stderr
max-charlamb Apr 16, 2026
8723a34
Log every fallback attempt (allowed and blocked) to stderr
max-charlamb Apr 16, 2026
dd401b3
Allowlist remaining blocked APIs and add file-level DBI allowlist
max-charlamb Apr 17, 2026
bee8db9
Use -noFallback flag in CI and remove unnecessary try/catch
max-charlamb Apr 17, 2026
f29fd2e
Address PR review feedback
max-charlamb Apr 17, 2026
8ec4bef
Remove unused _prevent_release field from DacDbiImpl
max-charlamb Apr 17, 2026
4884646
Revert datadescriptor.inc and restore CanFallback check ordering
max-charlamb Apr 17, 2026
38cf507
Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 17, 2026
17974c6
Remove AggressiveInlining from CanFallback
max-charlamb Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/pipelines/diagnostics/runtime-diag-job.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,7 @@ parameters:
disableComponentGovernance: ''
liveRuntimeDir: ''
useCdac: false
noFallback: false
classFilter: ''

jobs:
Expand DownExpand Up@@ -89,6 +90,7 @@ jobs:
- _TestArgs: '-test'
- _Cross: ''
- _CdacArgs: ''
- _NoFallbackArgs: ''
- _ClassFilterArgs: ''

- _buildScript: $(Build.SourcesDirectory)$(dir)build$(scriptExt)
Expand All@@ -105,6 +107,9 @@ jobs:
- ${{ if eq(parameters.useCdac, 'true') }}:
- _CdacArgs: '-useCdac'

- ${{ if eq(parameters.noFallback, 'true') }}:
- _NoFallbackArgs: '-noFallback'

- ${{ if ne(parameters.classFilter, '') }}:
- _ClassFilterArgs: '-classfilter ${{ parameters.classFilter }}'

Expand DownExpand Up@@ -201,6 +206,7 @@ jobs:
-architecture ${{ parameters.archType }}
-privatebuild
$(_CdacArgs)
$(_NoFallbackArgs)
-liveRuntimeDir ${{ parameters.liveRuntimeDir }}
$(_TestArgs)
$(_Cross)
Expand Down
54 changes: 54 additions & 0 deletions eng/pipelines/runtime-diagnostics.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -144,6 +144,60 @@ extends:
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
buildConfig: release
platforms:
- windows_x64
# Workaround: microsoft/azure-pipelines-tasks#21871
variables:
- name: AllowPtrToDetectTestRunRetryFiles
value: false
jobParameters:
name: cDAC_no_fallback
useCdac: true
noFallback: true
classFilter: SOS
isOfficialBuild: ${{ variables.isOfficialBuild }}
liveRuntimeDir: $(Build.SourcesDirectory)/artifacts/runtime
timeoutInMinutes: 360
Comment thread
max-charlamb marked this conversation as resolved.
dependsOn:
- build_windows_x64_release_AllSubsets_CoreCLR
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
artifactFileName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/runtime
displayName: 'Runtime Build Artifacts'
postBuildSteps:
- task: PublishTestResults@2
inputs:
testResultsFormat: xUnit
testResultsFiles: '**/*.xml'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults'
testRunTitle: 'Tests $(_PhaseName)'
failTaskOnFailedTests: true
publishRunAttachments: true
mergeTestResults: true
buildConfiguration: $(_BuildConfig)
continueOnError: true
condition: always()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/tmp/$(_BuildConfig)/dumps'
artifactName: 'Dumps_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Crash Dumps'
continueOnError: true
condition: failed()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults'
artifactName: 'TestResults_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/datadescriptor/datadescriptor.inc
Original file line numberDiff line numberDiff line change
Expand Up@@ -1274,7 +1274,7 @@ CDAC_TYPE_END(SyncBlockCache)

CDAC_TYPE_BEGIN(AuxiliarySymbolInfo)
CDAC_TYPE_SIZE(sizeof(VMAUXILIARYSYMBOLDEF))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, TYPE(CodePointer), Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Name, offsetof(VMAUXILIARYSYMBOLDEF, name))
CDAC_TYPE_END(AuxiliarySymbolInfo)

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ public ClrDataAppDomain(Target target, TargetPointer appDomain, IXCLRDataAppDoma
}

int IXCLRDataAppDomain.GetProcess(DacComNullableByRef<IXCLRDataProcess> process)
=> _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.GetName(uint bufLen, uint* nameLen, char* name)
{
Expand DownExpand Up@@ -181,8 +181,8 @@ int IXCLRDataAppDomain.IsSameObject(IXCLRDataAppDomain* appDomain)
}

int IXCLRDataAppDomain.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -112,7 +112,7 @@ int IXCLRDataExceptionState.GetPrevious(DacComNullableByRef<IXCLRDataExceptionSt
}

int IXCLRDataExceptionState.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataExceptionState.GetBaseType(/*CLRDataBaseExceptionType*/ uint* type) => HResults.E_NOTIMPL;

Expand DownExpand Up@@ -213,9 +213,9 @@ int IXCLRDataExceptionState.Request(uint reqCode, uint inBufferSize, byte* inBuf
}

int IXCLRDataExceptionState.IsSameState(EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.IsSameState2(uint flags, EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.GetTask(DacComNullableByRef<IXCLRDataTask> task)
{
int hr = HResults.S_OK, hrLocal = HResults.S_OK;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,7 +34,7 @@ public ClrDataFrame(Target target, IStackDataFrameHandle dataFrame, IXCLRDataFra

// IXCLRDataFrame implementation
int IXCLRDataFrame.GetFrameType(uint* simpleType, uint* detailedType)
=> _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetContext(
uint contextFlags,
Expand DownExpand Up@@ -332,7 +332,7 @@ int IXCLRDataFrame.GetCodeName(
uint bufLen,
uint* nameLen,
char* nameBuf)
=> _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetMethodInstance(DacComNullableByRef<IXCLRDataMethodInstance> method)
{
Expand DownExpand Up@@ -384,17 +384,17 @@ int IXCLRDataFrame.Request(
byte* inBuffer,
uint outBufferSize,
byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetNumTypeArguments(uint* numTypeArgs)
=> _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetTypeArgumentByIndex(uint index, DacComNullableByRef<IXCLRDataTypeInstance> typeArg)
=> _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;

// IXCLRDataFrame2 implementation
int IXCLRDataFrame2.GetExactGenericArgsToken(DacComNullableByRef<IXCLRDataValue> genericToken)
=> _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;

// ========== Metadata resolution helpers ==========

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,19 +27,19 @@ public ClrDataMethodDefinition(
_legacyImpl = legacyImpl;
}
int IXCLRDataMethodDefinition.GetTypeDefinition(DacComNullableByRef<IXCLRDataTypeDefinition> typeDefinition)
=> _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumInstances(IXCLRDataAppDomain? appDomain, ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumInstance(ulong* handle, DacComNullableByRef<IXCLRDataMethodInstance> instance)
=> _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumInstances(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetName(uint flags, uint bufLen, uint* nameLen, char* name)
=> _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<IXCLRDataModule> mod)
{
Expand DownExpand Up@@ -93,35 +93,35 @@ int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<
}

int IXCLRDataMethodDefinition.GetFlags(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.IsSameObject(IXCLRDataMethodDefinition? method)
=> _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetLatestEnCVersion(uint* version)
=> _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumExtents(ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumExtent(ulong* handle, ClrDataMethodDefinitionExtent* extent)
=> _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumExtents(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetCodeNotification(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.SetCodeNotification(uint flags)
=> _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetRepresentativeEntryAddress(ClrDataAddress* addr)
=> _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.HasClassOrMethodInstantiation(int* bGeneric)
=> _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
}
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
043157d
cDAC: Add no-fallback mode via CDAC_NO_FALLBACK env var
max-charlamb Apr 14, 2026
ede7a70
cDAC: Always delegate ICLRDataEnumMemoryRegions to legacy DAC
max-charlamb Apr 15, 2026
5b89ccc
Revert crosscomp.h changes
max-charlamb Apr 15, 2026
cd48474
cDAC: Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 15, 2026
bf0cb57
Replace binary no-fallback switch with granular LegacyFallbackHelper
max-charlamb Apr 16, 2026
dc569ce
Fix allowlist to use nameof and correct method name
max-charlamb Apr 16, 2026
352cf06
Simplify CreateDacDbiInterface to match CreateSosInterface pattern
max-charlamb Apr 16, 2026
5172453
Gate IMetaDataImport QI fallback through LegacyFallbackHelper
max-charlamb Apr 16, 2026
b7f57b0
Track blocked fallback calls and log on process exit
max-charlamb Apr 16, 2026
3839a5d
Allowlist GetInterface QI, switch blocked fallback logging to stderr
max-charlamb Apr 16, 2026
8723a34
Log every fallback attempt (allowed and blocked) to stderr
max-charlamb Apr 16, 2026
dd401b3
Allowlist remaining blocked APIs and add file-level DBI allowlist
max-charlamb Apr 17, 2026
bee8db9
Use -noFallback flag in CI and remove unnecessary try/catch
max-charlamb Apr 17, 2026
f29fd2e
Address PR review feedback
max-charlamb Apr 17, 2026
8ec4bef
Remove unused _prevent_release field from DacDbiImpl
max-charlamb Apr 17, 2026
4884646
Revert datadescriptor.inc and restore CanFallback check ordering
max-charlamb Apr 17, 2026
38cf507
Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 17, 2026
17974c6
Remove AggressiveInlining from CanFallback
max-charlamb Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/pipelines/diagnostics/runtime-diag-job.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,7 @@ parameters:
disableComponentGovernance: ''
liveRuntimeDir: ''
useCdac: false
noFallback: false
classFilter: ''

jobs:
Expand DownExpand Up@@ -89,6 +90,7 @@ jobs:
- _TestArgs: '-test'
- _Cross: ''
- _CdacArgs: ''
- _NoFallbackArgs: ''
- _ClassFilterArgs: ''

- _buildScript: $(Build.SourcesDirectory)$(dir)build$(scriptExt)
Expand All@@ -105,6 +107,9 @@ jobs:
- ${{ if eq(parameters.useCdac, 'true') }}:
- _CdacArgs: '-useCdac'

- ${{ if eq(parameters.noFallback, 'true') }}:
- _NoFallbackArgs: '-noFallback'

- ${{ if ne(parameters.classFilter, '') }}:
- _ClassFilterArgs: '-classfilter ${{ parameters.classFilter }}'

Expand DownExpand Up@@ -201,6 +206,7 @@ jobs:
-architecture ${{ parameters.archType }}
-privatebuild
$(_CdacArgs)
$(_NoFallbackArgs)
-liveRuntimeDir ${{ parameters.liveRuntimeDir }}
$(_TestArgs)
$(_Cross)
Expand Down
54 changes: 54 additions & 0 deletions eng/pipelines/runtime-diagnostics.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -144,6 +144,60 @@ extends:
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
buildConfig: release
platforms:
- windows_x64
# Workaround: microsoft/azure-pipelines-tasks#21871
variables:
- name: AllowPtrToDetectTestRunRetryFiles
value: false
jobParameters:
name: cDAC_no_fallback
useCdac: true
noFallback: true
classFilter: SOS
isOfficialBuild: ${{ variables.isOfficialBuild }}
liveRuntimeDir: $(Build.SourcesDirectory)/artifacts/runtime
timeoutInMinutes: 360
Comment thread
max-charlamb marked this conversation as resolved.
dependsOn:
- build_windows_x64_release_AllSubsets_CoreCLR
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
artifactFileName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/runtime
displayName: 'Runtime Build Artifacts'
postBuildSteps:
- task: PublishTestResults@2
inputs:
testResultsFormat: xUnit
testResultsFiles: '**/*.xml'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults'
testRunTitle: 'Tests $(_PhaseName)'
failTaskOnFailedTests: true
publishRunAttachments: true
mergeTestResults: true
buildConfiguration: $(_BuildConfig)
continueOnError: true
condition: always()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/tmp/$(_BuildConfig)/dumps'
artifactName: 'Dumps_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Crash Dumps'
continueOnError: true
condition: failed()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults'
artifactName: 'TestResults_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/datadescriptor/datadescriptor.inc
Original file line numberDiff line numberDiff line change
Expand Up@@ -1274,7 +1274,7 @@ CDAC_TYPE_END(SyncBlockCache)

CDAC_TYPE_BEGIN(AuxiliarySymbolInfo)
CDAC_TYPE_SIZE(sizeof(VMAUXILIARYSYMBOLDEF))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, TYPE(CodePointer), Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Name, offsetof(VMAUXILIARYSYMBOLDEF, name))
CDAC_TYPE_END(AuxiliarySymbolInfo)

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ public ClrDataAppDomain(Target target, TargetPointer appDomain, IXCLRDataAppDoma
}

int IXCLRDataAppDomain.GetProcess(DacComNullableByRef<IXCLRDataProcess> process)
=> _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.GetName(uint bufLen, uint* nameLen, char* name)
{
Expand DownExpand Up@@ -181,8 +181,8 @@ int IXCLRDataAppDomain.IsSameObject(IXCLRDataAppDomain* appDomain)
}

int IXCLRDataAppDomain.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -112,7 +112,7 @@ int IXCLRDataExceptionState.GetPrevious(DacComNullableByRef<IXCLRDataExceptionSt
}

int IXCLRDataExceptionState.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataExceptionState.GetBaseType(/*CLRDataBaseExceptionType*/ uint* type) => HResults.E_NOTIMPL;

Expand DownExpand Up@@ -213,9 +213,9 @@ int IXCLRDataExceptionState.Request(uint reqCode, uint inBufferSize, byte* inBuf
}

int IXCLRDataExceptionState.IsSameState(EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.IsSameState2(uint flags, EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.GetTask(DacComNullableByRef<IXCLRDataTask> task)
{
int hr = HResults.S_OK, hrLocal = HResults.S_OK;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,7 +34,7 @@ public ClrDataFrame(Target target, IStackDataFrameHandle dataFrame, IXCLRDataFra

// IXCLRDataFrame implementation
int IXCLRDataFrame.GetFrameType(uint* simpleType, uint* detailedType)
=> _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetContext(
uint contextFlags,
Expand DownExpand Up@@ -332,7 +332,7 @@ int IXCLRDataFrame.GetCodeName(
uint bufLen,
uint* nameLen,
char* nameBuf)
=> _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetMethodInstance(DacComNullableByRef<IXCLRDataMethodInstance> method)
{
Expand DownExpand Up@@ -384,17 +384,17 @@ int IXCLRDataFrame.Request(
byte* inBuffer,
uint outBufferSize,
byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetNumTypeArguments(uint* numTypeArgs)
=> _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetTypeArgumentByIndex(uint index, DacComNullableByRef<IXCLRDataTypeInstance> typeArg)
=> _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;

// IXCLRDataFrame2 implementation
int IXCLRDataFrame2.GetExactGenericArgsToken(DacComNullableByRef<IXCLRDataValue> genericToken)
=> _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;

// ========== Metadata resolution helpers ==========

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,19 +27,19 @@ public ClrDataMethodDefinition(
_legacyImpl = legacyImpl;
}
int IXCLRDataMethodDefinition.GetTypeDefinition(DacComNullableByRef<IXCLRDataTypeDefinition> typeDefinition)
=> _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumInstances(IXCLRDataAppDomain? appDomain, ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumInstance(ulong* handle, DacComNullableByRef<IXCLRDataMethodInstance> instance)
=> _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumInstances(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetName(uint flags, uint bufLen, uint* nameLen, char* name)
=> _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<IXCLRDataModule> mod)
{
Expand DownExpand Up@@ -93,35 +93,35 @@ int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<
}

int IXCLRDataMethodDefinition.GetFlags(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.IsSameObject(IXCLRDataMethodDefinition? method)
=> _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetLatestEnCVersion(uint* version)
=> _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumExtents(ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumExtent(ulong* handle, ClrDataMethodDefinitionExtent* extent)
=> _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumExtents(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetCodeNotification(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.SetCodeNotification(uint flags)
=> _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetRepresentativeEntryAddress(ClrDataAddress* addr)
=> _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.HasClassOrMethodInstantiation(int* bGeneric)
=> _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
}
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
043157d
cDAC: Add no-fallback mode via CDAC_NO_FALLBACK env var
max-charlamb Apr 14, 2026
ede7a70
cDAC: Always delegate ICLRDataEnumMemoryRegions to legacy DAC
max-charlamb Apr 15, 2026
5b89ccc
Revert crosscomp.h changes
max-charlamb Apr 15, 2026
cd48474
cDAC: Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 15, 2026
bf0cb57
Replace binary no-fallback switch with granular LegacyFallbackHelper
max-charlamb Apr 16, 2026
dc569ce
Fix allowlist to use nameof and correct method name
max-charlamb Apr 16, 2026
352cf06
Simplify CreateDacDbiInterface to match CreateSosInterface pattern
max-charlamb Apr 16, 2026
5172453
Gate IMetaDataImport QI fallback through LegacyFallbackHelper
max-charlamb Apr 16, 2026
b7f57b0
Track blocked fallback calls and log on process exit
max-charlamb Apr 16, 2026
3839a5d
Allowlist GetInterface QI, switch blocked fallback logging to stderr
max-charlamb Apr 16, 2026
8723a34
Log every fallback attempt (allowed and blocked) to stderr
max-charlamb Apr 16, 2026
dd401b3
Allowlist remaining blocked APIs and add file-level DBI allowlist
max-charlamb Apr 17, 2026
bee8db9
Use -noFallback flag in CI and remove unnecessary try/catch
max-charlamb Apr 17, 2026
f29fd2e
Address PR review feedback
max-charlamb Apr 17, 2026
8ec4bef
Remove unused _prevent_release field from DacDbiImpl
max-charlamb Apr 17, 2026
4884646
Revert datadescriptor.inc and restore CanFallback check ordering
max-charlamb Apr 17, 2026
38cf507
Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 17, 2026
17974c6
Remove AggressiveInlining from CanFallback
max-charlamb Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/pipelines/diagnostics/runtime-diag-job.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,7 @@ parameters:
disableComponentGovernance: ''
liveRuntimeDir: ''
useCdac: false
noFallback: false
classFilter: ''

jobs:
Expand DownExpand Up@@ -89,6 +90,7 @@ jobs:
- _TestArgs: '-test'
- _Cross: ''
- _CdacArgs: ''
- _NoFallbackArgs: ''
- _ClassFilterArgs: ''

- _buildScript: $(Build.SourcesDirectory)$(dir)build$(scriptExt)
Expand All@@ -105,6 +107,9 @@ jobs:
- ${{ if eq(parameters.useCdac, 'true') }}:
- _CdacArgs: '-useCdac'

- ${{ if eq(parameters.noFallback, 'true') }}:
- _NoFallbackArgs: '-noFallback'

- ${{ if ne(parameters.classFilter, '') }}:
- _ClassFilterArgs: '-classfilter ${{ parameters.classFilter }}'

Expand DownExpand Up@@ -201,6 +206,7 @@ jobs:
-architecture ${{ parameters.archType }}
-privatebuild
$(_CdacArgs)
$(_NoFallbackArgs)
-liveRuntimeDir ${{ parameters.liveRuntimeDir }}
$(_TestArgs)
$(_Cross)
Expand Down
54 changes: 54 additions & 0 deletions eng/pipelines/runtime-diagnostics.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -144,6 +144,60 @@ extends:
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
buildConfig: release
platforms:
- windows_x64
# Workaround: microsoft/azure-pipelines-tasks#21871
variables:
- name: AllowPtrToDetectTestRunRetryFiles
value: false
jobParameters:
name: cDAC_no_fallback
useCdac: true
noFallback: true
classFilter: SOS
isOfficialBuild: ${{ variables.isOfficialBuild }}
liveRuntimeDir: $(Build.SourcesDirectory)/artifacts/runtime
timeoutInMinutes: 360
Comment thread
max-charlamb marked this conversation as resolved.
dependsOn:
- build_windows_x64_release_AllSubsets_CoreCLR
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
artifactFileName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/runtime
displayName: 'Runtime Build Artifacts'
postBuildSteps:
- task: PublishTestResults@2
inputs:
testResultsFormat: xUnit
testResultsFiles: '**/*.xml'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults'
testRunTitle: 'Tests $(_PhaseName)'
failTaskOnFailedTests: true
publishRunAttachments: true
mergeTestResults: true
buildConfiguration: $(_BuildConfig)
continueOnError: true
condition: always()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/tmp/$(_BuildConfig)/dumps'
artifactName: 'Dumps_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Crash Dumps'
continueOnError: true
condition: failed()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults'
artifactName: 'TestResults_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/datadescriptor/datadescriptor.inc
Original file line numberDiff line numberDiff line change
Expand Up@@ -1274,7 +1274,7 @@ CDAC_TYPE_END(SyncBlockCache)

CDAC_TYPE_BEGIN(AuxiliarySymbolInfo)
CDAC_TYPE_SIZE(sizeof(VMAUXILIARYSYMBOLDEF))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, TYPE(CodePointer), Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Name, offsetof(VMAUXILIARYSYMBOLDEF, name))
CDAC_TYPE_END(AuxiliarySymbolInfo)

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ public ClrDataAppDomain(Target target, TargetPointer appDomain, IXCLRDataAppDoma
}

int IXCLRDataAppDomain.GetProcess(DacComNullableByRef<IXCLRDataProcess> process)
=> _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.GetName(uint bufLen, uint* nameLen, char* name)
{
Expand DownExpand Up@@ -181,8 +181,8 @@ int IXCLRDataAppDomain.IsSameObject(IXCLRDataAppDomain* appDomain)
}

int IXCLRDataAppDomain.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -112,7 +112,7 @@ int IXCLRDataExceptionState.GetPrevious(DacComNullableByRef<IXCLRDataExceptionSt
}

int IXCLRDataExceptionState.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataExceptionState.GetBaseType(/*CLRDataBaseExceptionType*/ uint* type) => HResults.E_NOTIMPL;

Expand DownExpand Up@@ -213,9 +213,9 @@ int IXCLRDataExceptionState.Request(uint reqCode, uint inBufferSize, byte* inBuf
}

int IXCLRDataExceptionState.IsSameState(EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.IsSameState2(uint flags, EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.GetTask(DacComNullableByRef<IXCLRDataTask> task)
{
int hr = HResults.S_OK, hrLocal = HResults.S_OK;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,7 +34,7 @@ public ClrDataFrame(Target target, IStackDataFrameHandle dataFrame, IXCLRDataFra

// IXCLRDataFrame implementation
int IXCLRDataFrame.GetFrameType(uint* simpleType, uint* detailedType)
=> _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetContext(
uint contextFlags,
Expand DownExpand Up@@ -332,7 +332,7 @@ int IXCLRDataFrame.GetCodeName(
uint bufLen,
uint* nameLen,
char* nameBuf)
=> _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetMethodInstance(DacComNullableByRef<IXCLRDataMethodInstance> method)
{
Expand DownExpand Up@@ -384,17 +384,17 @@ int IXCLRDataFrame.Request(
byte* inBuffer,
uint outBufferSize,
byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetNumTypeArguments(uint* numTypeArgs)
=> _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetTypeArgumentByIndex(uint index, DacComNullableByRef<IXCLRDataTypeInstance> typeArg)
=> _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;

// IXCLRDataFrame2 implementation
int IXCLRDataFrame2.GetExactGenericArgsToken(DacComNullableByRef<IXCLRDataValue> genericToken)
=> _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;

// ========== Metadata resolution helpers ==========

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,19 +27,19 @@ public ClrDataMethodDefinition(
_legacyImpl = legacyImpl;
}
int IXCLRDataMethodDefinition.GetTypeDefinition(DacComNullableByRef<IXCLRDataTypeDefinition> typeDefinition)
=> _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumInstances(IXCLRDataAppDomain? appDomain, ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumInstance(ulong* handle, DacComNullableByRef<IXCLRDataMethodInstance> instance)
=> _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumInstances(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetName(uint flags, uint bufLen, uint* nameLen, char* name)
=> _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<IXCLRDataModule> mod)
{
Expand DownExpand Up@@ -93,35 +93,35 @@ int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<
}

int IXCLRDataMethodDefinition.GetFlags(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.IsSameObject(IXCLRDataMethodDefinition? method)
=> _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetLatestEnCVersion(uint* version)
=> _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumExtents(ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumExtent(ulong* handle, ClrDataMethodDefinitionExtent* extent)
=> _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumExtents(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetCodeNotification(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.SetCodeNotification(uint flags)
=> _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetRepresentativeEntryAddress(ClrDataAddress* addr)
=> _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.HasClassOrMethodInstantiation(int* bGeneric)
=> _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
}
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
043157d
cDAC: Add no-fallback mode via CDAC_NO_FALLBACK env var
max-charlamb Apr 14, 2026
ede7a70
cDAC: Always delegate ICLRDataEnumMemoryRegions to legacy DAC
max-charlamb Apr 15, 2026
5b89ccc
Revert crosscomp.h changes
max-charlamb Apr 15, 2026
cd48474
cDAC: Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 15, 2026
bf0cb57
Replace binary no-fallback switch with granular LegacyFallbackHelper
max-charlamb Apr 16, 2026
dc569ce
Fix allowlist to use nameof and correct method name
max-charlamb Apr 16, 2026
352cf06
Simplify CreateDacDbiInterface to match CreateSosInterface pattern
max-charlamb Apr 16, 2026
5172453
Gate IMetaDataImport QI fallback through LegacyFallbackHelper
max-charlamb Apr 16, 2026
b7f57b0
Track blocked fallback calls and log on process exit
max-charlamb Apr 16, 2026
3839a5d
Allowlist GetInterface QI, switch blocked fallback logging to stderr
max-charlamb Apr 16, 2026
8723a34
Log every fallback attempt (allowed and blocked) to stderr
max-charlamb Apr 16, 2026
dd401b3
Allowlist remaining blocked APIs and add file-level DBI allowlist
max-charlamb Apr 17, 2026
bee8db9
Use -noFallback flag in CI and remove unnecessary try/catch
max-charlamb Apr 17, 2026
f29fd2e
Address PR review feedback
max-charlamb Apr 17, 2026
8ec4bef
Remove unused _prevent_release field from DacDbiImpl
max-charlamb Apr 17, 2026
4884646
Revert datadescriptor.inc and restore CanFallback check ordering
max-charlamb Apr 17, 2026
38cf507
Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 17, 2026
17974c6
Remove AggressiveInlining from CanFallback
max-charlamb Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/pipelines/diagnostics/runtime-diag-job.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,7 @@ parameters:
disableComponentGovernance: ''
liveRuntimeDir: ''
useCdac: false
noFallback: false
classFilter: ''

jobs:
Expand DownExpand Up@@ -89,6 +90,7 @@ jobs:
- _TestArgs: '-test'
- _Cross: ''
- _CdacArgs: ''
- _NoFallbackArgs: ''
- _ClassFilterArgs: ''

- _buildScript: $(Build.SourcesDirectory)$(dir)build$(scriptExt)
Expand All@@ -105,6 +107,9 @@ jobs:
- ${{ if eq(parameters.useCdac, 'true') }}:
- _CdacArgs: '-useCdac'

- ${{ if eq(parameters.noFallback, 'true') }}:
- _NoFallbackArgs: '-noFallback'

- ${{ if ne(parameters.classFilter, '') }}:
- _ClassFilterArgs: '-classfilter ${{ parameters.classFilter }}'

Expand DownExpand Up@@ -201,6 +206,7 @@ jobs:
-architecture ${{ parameters.archType }}
-privatebuild
$(_CdacArgs)
$(_NoFallbackArgs)
-liveRuntimeDir ${{ parameters.liveRuntimeDir }}
$(_TestArgs)
$(_Cross)
Expand Down
54 changes: 54 additions & 0 deletions eng/pipelines/runtime-diagnostics.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -144,6 +144,60 @@ extends:
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
buildConfig: release
platforms:
- windows_x64
# Workaround: microsoft/azure-pipelines-tasks#21871
variables:
- name: AllowPtrToDetectTestRunRetryFiles
value: false
jobParameters:
name: cDAC_no_fallback
useCdac: true
noFallback: true
classFilter: SOS
isOfficialBuild: ${{ variables.isOfficialBuild }}
liveRuntimeDir: $(Build.SourcesDirectory)/artifacts/runtime
timeoutInMinutes: 360
Comment thread
max-charlamb marked this conversation as resolved.
dependsOn:
- build_windows_x64_release_AllSubsets_CoreCLR
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
artifactFileName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/runtime
displayName: 'Runtime Build Artifacts'
postBuildSteps:
- task: PublishTestResults@2
inputs:
testResultsFormat: xUnit
testResultsFiles: '**/*.xml'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults'
testRunTitle: 'Tests $(_PhaseName)'
failTaskOnFailedTests: true
publishRunAttachments: true
mergeTestResults: true
buildConfiguration: $(_BuildConfig)
continueOnError: true
condition: always()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/tmp/$(_BuildConfig)/dumps'
artifactName: 'Dumps_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Crash Dumps'
continueOnError: true
condition: failed()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults'
artifactName: 'TestResults_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/datadescriptor/datadescriptor.inc
Original file line numberDiff line numberDiff line change
Expand Up@@ -1274,7 +1274,7 @@ CDAC_TYPE_END(SyncBlockCache)

CDAC_TYPE_BEGIN(AuxiliarySymbolInfo)
CDAC_TYPE_SIZE(sizeof(VMAUXILIARYSYMBOLDEF))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, TYPE(CodePointer), Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Name, offsetof(VMAUXILIARYSYMBOLDEF, name))
CDAC_TYPE_END(AuxiliarySymbolInfo)

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ public ClrDataAppDomain(Target target, TargetPointer appDomain, IXCLRDataAppDoma
}

int IXCLRDataAppDomain.GetProcess(DacComNullableByRef<IXCLRDataProcess> process)
=> _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.GetName(uint bufLen, uint* nameLen, char* name)
{
Expand DownExpand Up@@ -181,8 +181,8 @@ int IXCLRDataAppDomain.IsSameObject(IXCLRDataAppDomain* appDomain)
}

int IXCLRDataAppDomain.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -112,7 +112,7 @@ int IXCLRDataExceptionState.GetPrevious(DacComNullableByRef<IXCLRDataExceptionSt
}

int IXCLRDataExceptionState.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataExceptionState.GetBaseType(/*CLRDataBaseExceptionType*/ uint* type) => HResults.E_NOTIMPL;

Expand DownExpand Up@@ -213,9 +213,9 @@ int IXCLRDataExceptionState.Request(uint reqCode, uint inBufferSize, byte* inBuf
}

int IXCLRDataExceptionState.IsSameState(EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.IsSameState2(uint flags, EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.GetTask(DacComNullableByRef<IXCLRDataTask> task)
{
int hr = HResults.S_OK, hrLocal = HResults.S_OK;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,7 +34,7 @@ public ClrDataFrame(Target target, IStackDataFrameHandle dataFrame, IXCLRDataFra

// IXCLRDataFrame implementation
int IXCLRDataFrame.GetFrameType(uint* simpleType, uint* detailedType)
=> _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetContext(
uint contextFlags,
Expand DownExpand Up@@ -332,7 +332,7 @@ int IXCLRDataFrame.GetCodeName(
uint bufLen,
uint* nameLen,
char* nameBuf)
=> _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetMethodInstance(DacComNullableByRef<IXCLRDataMethodInstance> method)
{
Expand DownExpand Up@@ -384,17 +384,17 @@ int IXCLRDataFrame.Request(
byte* inBuffer,
uint outBufferSize,
byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetNumTypeArguments(uint* numTypeArgs)
=> _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetTypeArgumentByIndex(uint index, DacComNullableByRef<IXCLRDataTypeInstance> typeArg)
=> _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;

// IXCLRDataFrame2 implementation
int IXCLRDataFrame2.GetExactGenericArgsToken(DacComNullableByRef<IXCLRDataValue> genericToken)
=> _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;

// ========== Metadata resolution helpers ==========

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,19 +27,19 @@ public ClrDataMethodDefinition(
_legacyImpl = legacyImpl;
}
int IXCLRDataMethodDefinition.GetTypeDefinition(DacComNullableByRef<IXCLRDataTypeDefinition> typeDefinition)
=> _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumInstances(IXCLRDataAppDomain? appDomain, ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumInstance(ulong* handle, DacComNullableByRef<IXCLRDataMethodInstance> instance)
=> _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumInstances(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetName(uint flags, uint bufLen, uint* nameLen, char* name)
=> _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<IXCLRDataModule> mod)
{
Expand DownExpand Up@@ -93,35 +93,35 @@ int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<
}

int IXCLRDataMethodDefinition.GetFlags(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.IsSameObject(IXCLRDataMethodDefinition? method)
=> _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetLatestEnCVersion(uint* version)
=> _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumExtents(ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumExtent(ulong* handle, ClrDataMethodDefinitionExtent* extent)
=> _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumExtents(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetCodeNotification(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.SetCodeNotification(uint flags)
=> _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetRepresentativeEntryAddress(ClrDataAddress* addr)
=> _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.HasClassOrMethodInstantiation(int* bGeneric)
=> _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
}
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
043157d
cDAC: Add no-fallback mode via CDAC_NO_FALLBACK env var
max-charlamb Apr 14, 2026
ede7a70
cDAC: Always delegate ICLRDataEnumMemoryRegions to legacy DAC
max-charlamb Apr 15, 2026
5b89ccc
Revert crosscomp.h changes
max-charlamb Apr 15, 2026
cd48474
cDAC: Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 15, 2026
bf0cb57
Replace binary no-fallback switch with granular LegacyFallbackHelper
max-charlamb Apr 16, 2026
dc569ce
Fix allowlist to use nameof and correct method name
max-charlamb Apr 16, 2026
352cf06
Simplify CreateDacDbiInterface to match CreateSosInterface pattern
max-charlamb Apr 16, 2026
5172453
Gate IMetaDataImport QI fallback through LegacyFallbackHelper
max-charlamb Apr 16, 2026
b7f57b0
Track blocked fallback calls and log on process exit
max-charlamb Apr 16, 2026
3839a5d
Allowlist GetInterface QI, switch blocked fallback logging to stderr
max-charlamb Apr 16, 2026
8723a34
Log every fallback attempt (allowed and blocked) to stderr
max-charlamb Apr 16, 2026
dd401b3
Allowlist remaining blocked APIs and add file-level DBI allowlist
max-charlamb Apr 17, 2026
bee8db9
Use -noFallback flag in CI and remove unnecessary try/catch
max-charlamb Apr 17, 2026
f29fd2e
Address PR review feedback
max-charlamb Apr 17, 2026
8ec4bef
Remove unused _prevent_release field from DacDbiImpl
max-charlamb Apr 17, 2026
4884646
Revert datadescriptor.inc and restore CanFallback check ordering
max-charlamb Apr 17, 2026
38cf507
Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 17, 2026
17974c6
Remove AggressiveInlining from CanFallback
max-charlamb Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/pipelines/diagnostics/runtime-diag-job.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,7 @@ parameters:
disableComponentGovernance: ''
liveRuntimeDir: ''
useCdac: false
noFallback: false
classFilter: ''

jobs:
Expand DownExpand Up@@ -89,6 +90,7 @@ jobs:
- _TestArgs: '-test'
- _Cross: ''
- _CdacArgs: ''
- _NoFallbackArgs: ''
- _ClassFilterArgs: ''

- _buildScript: $(Build.SourcesDirectory)$(dir)build$(scriptExt)
Expand All@@ -105,6 +107,9 @@ jobs:
- ${{ if eq(parameters.useCdac, 'true') }}:
- _CdacArgs: '-useCdac'

- ${{ if eq(parameters.noFallback, 'true') }}:
- _NoFallbackArgs: '-noFallback'

- ${{ if ne(parameters.classFilter, '') }}:
- _ClassFilterArgs: '-classfilter ${{ parameters.classFilter }}'

Expand DownExpand Up@@ -201,6 +206,7 @@ jobs:
-architecture ${{ parameters.archType }}
-privatebuild
$(_CdacArgs)
$(_NoFallbackArgs)
-liveRuntimeDir ${{ parameters.liveRuntimeDir }}
$(_TestArgs)
$(_Cross)
Expand Down
54 changes: 54 additions & 0 deletions eng/pipelines/runtime-diagnostics.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -144,6 +144,60 @@ extends:
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
buildConfig: release
platforms:
- windows_x64
# Workaround: microsoft/azure-pipelines-tasks#21871
variables:
- name: AllowPtrToDetectTestRunRetryFiles
value: false
jobParameters:
name: cDAC_no_fallback
useCdac: true
noFallback: true
classFilter: SOS
isOfficialBuild: ${{ variables.isOfficialBuild }}
liveRuntimeDir: $(Build.SourcesDirectory)/artifacts/runtime
timeoutInMinutes: 360
Comment thread
max-charlamb marked this conversation as resolved.
dependsOn:
- build_windows_x64_release_AllSubsets_CoreCLR
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
artifactFileName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/runtime
displayName: 'Runtime Build Artifacts'
postBuildSteps:
- task: PublishTestResults@2
inputs:
testResultsFormat: xUnit
testResultsFiles: '**/*.xml'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults'
testRunTitle: 'Tests $(_PhaseName)'
failTaskOnFailedTests: true
publishRunAttachments: true
mergeTestResults: true
buildConfiguration: $(_BuildConfig)
continueOnError: true
condition: always()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/tmp/$(_BuildConfig)/dumps'
artifactName: 'Dumps_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Crash Dumps'
continueOnError: true
condition: failed()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults'
artifactName: 'TestResults_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/datadescriptor/datadescriptor.inc
Original file line numberDiff line numberDiff line change
Expand Up@@ -1274,7 +1274,7 @@ CDAC_TYPE_END(SyncBlockCache)

CDAC_TYPE_BEGIN(AuxiliarySymbolInfo)
CDAC_TYPE_SIZE(sizeof(VMAUXILIARYSYMBOLDEF))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, TYPE(CodePointer), Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Name, offsetof(VMAUXILIARYSYMBOLDEF, name))
CDAC_TYPE_END(AuxiliarySymbolInfo)

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ public ClrDataAppDomain(Target target, TargetPointer appDomain, IXCLRDataAppDoma
}

int IXCLRDataAppDomain.GetProcess(DacComNullableByRef<IXCLRDataProcess> process)
=> _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.GetName(uint bufLen, uint* nameLen, char* name)
{
Expand DownExpand Up@@ -181,8 +181,8 @@ int IXCLRDataAppDomain.IsSameObject(IXCLRDataAppDomain* appDomain)
}

int IXCLRDataAppDomain.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -112,7 +112,7 @@ int IXCLRDataExceptionState.GetPrevious(DacComNullableByRef<IXCLRDataExceptionSt
}

int IXCLRDataExceptionState.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataExceptionState.GetBaseType(/*CLRDataBaseExceptionType*/ uint* type) => HResults.E_NOTIMPL;

Expand DownExpand Up@@ -213,9 +213,9 @@ int IXCLRDataExceptionState.Request(uint reqCode, uint inBufferSize, byte* inBuf
}

int IXCLRDataExceptionState.IsSameState(EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.IsSameState2(uint flags, EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.GetTask(DacComNullableByRef<IXCLRDataTask> task)
{
int hr = HResults.S_OK, hrLocal = HResults.S_OK;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,7 +34,7 @@ public ClrDataFrame(Target target, IStackDataFrameHandle dataFrame, IXCLRDataFra

// IXCLRDataFrame implementation
int IXCLRDataFrame.GetFrameType(uint* simpleType, uint* detailedType)
=> _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetContext(
uint contextFlags,
Expand DownExpand Up@@ -332,7 +332,7 @@ int IXCLRDataFrame.GetCodeName(
uint bufLen,
uint* nameLen,
char* nameBuf)
=> _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetMethodInstance(DacComNullableByRef<IXCLRDataMethodInstance> method)
{
Expand DownExpand Up@@ -384,17 +384,17 @@ int IXCLRDataFrame.Request(
byte* inBuffer,
uint outBufferSize,
byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetNumTypeArguments(uint* numTypeArgs)
=> _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetTypeArgumentByIndex(uint index, DacComNullableByRef<IXCLRDataTypeInstance> typeArg)
=> _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;

// IXCLRDataFrame2 implementation
int IXCLRDataFrame2.GetExactGenericArgsToken(DacComNullableByRef<IXCLRDataValue> genericToken)
=> _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;

// ========== Metadata resolution helpers ==========

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,19 +27,19 @@ public ClrDataMethodDefinition(
_legacyImpl = legacyImpl;
}
int IXCLRDataMethodDefinition.GetTypeDefinition(DacComNullableByRef<IXCLRDataTypeDefinition> typeDefinition)
=> _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumInstances(IXCLRDataAppDomain? appDomain, ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumInstance(ulong* handle, DacComNullableByRef<IXCLRDataMethodInstance> instance)
=> _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumInstances(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetName(uint flags, uint bufLen, uint* nameLen, char* name)
=> _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<IXCLRDataModule> mod)
{
Expand DownExpand Up@@ -93,35 +93,35 @@ int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<
}

int IXCLRDataMethodDefinition.GetFlags(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.IsSameObject(IXCLRDataMethodDefinition? method)
=> _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetLatestEnCVersion(uint* version)
=> _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumExtents(ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumExtent(ulong* handle, ClrDataMethodDefinitionExtent* extent)
=> _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumExtents(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetCodeNotification(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.SetCodeNotification(uint flags)
=> _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetRepresentativeEntryAddress(ClrDataAddress* addr)
=> _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.HasClassOrMethodInstantiation(int* bGeneric)
=> _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
}
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
043157d
cDAC: Add no-fallback mode via CDAC_NO_FALLBACK env var
max-charlamb Apr 14, 2026
ede7a70
cDAC: Always delegate ICLRDataEnumMemoryRegions to legacy DAC
max-charlamb Apr 15, 2026
5b89ccc
Revert crosscomp.h changes
max-charlamb Apr 15, 2026
cd48474
cDAC: Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 15, 2026
bf0cb57
Replace binary no-fallback switch with granular LegacyFallbackHelper
max-charlamb Apr 16, 2026
dc569ce
Fix allowlist to use nameof and correct method name
max-charlamb Apr 16, 2026
352cf06
Simplify CreateDacDbiInterface to match CreateSosInterface pattern
max-charlamb Apr 16, 2026
5172453
Gate IMetaDataImport QI fallback through LegacyFallbackHelper
max-charlamb Apr 16, 2026
b7f57b0
Track blocked fallback calls and log on process exit
max-charlamb Apr 16, 2026
3839a5d
Allowlist GetInterface QI, switch blocked fallback logging to stderr
max-charlamb Apr 16, 2026
8723a34
Log every fallback attempt (allowed and blocked) to stderr
max-charlamb Apr 16, 2026
dd401b3
Allowlist remaining blocked APIs and add file-level DBI allowlist
max-charlamb Apr 17, 2026
bee8db9
Use -noFallback flag in CI and remove unnecessary try/catch
max-charlamb Apr 17, 2026
f29fd2e
Address PR review feedback
max-charlamb Apr 17, 2026
8ec4bef
Remove unused _prevent_release field from DacDbiImpl
max-charlamb Apr 17, 2026
4884646
Revert datadescriptor.inc and restore CanFallback check ordering
max-charlamb Apr 17, 2026
38cf507
Fix AuxiliarySymbolInfo.Address type to CodePointer
max-charlamb Apr 17, 2026
17974c6
Remove AggressiveInlining from CanFallback
max-charlamb Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions eng/pipelines/diagnostics/runtime-diag-job.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -38,6 +38,7 @@ parameters:
disableComponentGovernance: ''
liveRuntimeDir: ''
useCdac: false
noFallback: false
classFilter: ''

jobs:
Expand DownExpand Up@@ -89,6 +90,7 @@ jobs:
- _TestArgs: '-test'
- _Cross: ''
- _CdacArgs: ''
- _NoFallbackArgs: ''
- _ClassFilterArgs: ''

- _buildScript: $(Build.SourcesDirectory)$(dir)build$(scriptExt)
Expand All@@ -105,6 +107,9 @@ jobs:
- ${{ if eq(parameters.useCdac, 'true') }}:
- _CdacArgs: '-useCdac'

- ${{ if eq(parameters.noFallback, 'true') }}:
- _NoFallbackArgs: '-noFallback'

- ${{ if ne(parameters.classFilter, '') }}:
- _ClassFilterArgs: '-classfilter ${{ parameters.classFilter }}'

Expand DownExpand Up@@ -201,6 +206,7 @@ jobs:
-architecture ${{ parameters.archType }}
-privatebuild
$(_CdacArgs)
$(_NoFallbackArgs)
-liveRuntimeDir ${{ parameters.liveRuntimeDir }}
$(_TestArgs)
$(_Cross)
Expand Down
54 changes: 54 additions & 0 deletions eng/pipelines/runtime-diagnostics.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -144,6 +144,60 @@ extends:
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
buildConfig: release
platforms:
- windows_x64
# Workaround: microsoft/azure-pipelines-tasks#21871
variables:
- name: AllowPtrToDetectTestRunRetryFiles
value: false
jobParameters:
name: cDAC_no_fallback
useCdac: true
noFallback: true
classFilter: SOS
isOfficialBuild: ${{ variables.isOfficialBuild }}
liveRuntimeDir: $(Build.SourcesDirectory)/artifacts/runtime
timeoutInMinutes: 360
Comment thread
max-charlamb marked this conversation as resolved.
dependsOn:
- build_windows_x64_release_AllSubsets_CoreCLR
preBuildSteps:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
artifactName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr
artifactFileName: BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_coreclr$(archiveExtension)
unpackFolder: $(Build.SourcesDirectory)/artifacts/runtime
displayName: 'Runtime Build Artifacts'
postBuildSteps:
- task: PublishTestResults@2
inputs:
testResultsFormat: xUnit
testResultsFiles: '**/*.xml'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults'
testRunTitle: 'Tests $(_PhaseName)'
failTaskOnFailedTests: true
publishRunAttachments: true
mergeTestResults: true
buildConfiguration: $(_BuildConfig)
continueOnError: true
condition: always()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/tmp/$(_BuildConfig)/dumps'
artifactName: 'Dumps_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Crash Dumps'
continueOnError: true
condition: failed()
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.SourcesDirectory)/artifacts/TestResults'
artifactName: 'TestResults_cDAC_no_fallback_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)_Attempt$(System.JobAttempt)'
displayName: 'Publish Test Results and SOS Logs'
continueOnError: true
condition: failed()
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/diagnostics/runtime-diag-job.yml
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/vm/datadescriptor/datadescriptor.inc
Original file line numberDiff line numberDiff line change
Expand Up@@ -1274,7 +1274,7 @@ CDAC_TYPE_END(SyncBlockCache)

CDAC_TYPE_BEGIN(AuxiliarySymbolInfo)
CDAC_TYPE_SIZE(sizeof(VMAUXILIARYSYMBOLDEF))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, TYPE(CodePointer), Address, offsetof(VMAUXILIARYSYMBOLDEF, pfnAuxiliarySymbol))
CDAC_TYPE_FIELD(AuxiliarySymbolInfo, T_POINTER, Name, offsetof(VMAUXILIARYSYMBOLDEF, name))
CDAC_TYPE_END(AuxiliarySymbolInfo)

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -26,7 +26,7 @@ public ClrDataAppDomain(Target target, TargetPointer appDomain, IXCLRDataAppDoma
}

int IXCLRDataAppDomain.GetProcess(DacComNullableByRef<IXCLRDataProcess> process)
=> _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetProcess(process) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.GetName(uint bufLen, uint* nameLen, char* name)
{
Expand DownExpand Up@@ -181,8 +181,8 @@ int IXCLRDataAppDomain.IsSameObject(IXCLRDataAppDomain* appDomain)
}

int IXCLRDataAppDomain.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataAppDomain.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -112,7 +112,7 @@ int IXCLRDataExceptionState.GetPrevious(DacComNullableByRef<IXCLRDataExceptionSt
}

int IXCLRDataExceptionState.GetManagedObject(DacComNullableByRef<IXCLRDataValue> value)
=> _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetManagedObject(value) : HResults.E_NOTIMPL;

int IXCLRDataExceptionState.GetBaseType(/*CLRDataBaseExceptionType*/ uint* type) => HResults.E_NOTIMPL;

Expand DownExpand Up@@ -213,9 +213,9 @@ int IXCLRDataExceptionState.Request(uint reqCode, uint inBufferSize, byte* inBuf
}

int IXCLRDataExceptionState.IsSameState(EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState(exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.IsSameState2(uint flags, EXCEPTION_RECORD64* exRecord, uint contextSize, byte* cxRecord)
=> _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameState2(flags, exRecord, contextSize, cxRecord) : HResults.E_NOTIMPL;
int IXCLRDataExceptionState.GetTask(DacComNullableByRef<IXCLRDataTask> task)
{
int hr = HResults.S_OK, hrLocal = HResults.S_OK;
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,7 +34,7 @@ public ClrDataFrame(Target target, IStackDataFrameHandle dataFrame, IXCLRDataFra

// IXCLRDataFrame implementation
int IXCLRDataFrame.GetFrameType(uint* simpleType, uint* detailedType)
=> _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFrameType(simpleType, detailedType) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetContext(
uint contextFlags,
Expand DownExpand Up@@ -332,7 +332,7 @@ int IXCLRDataFrame.GetCodeName(
uint bufLen,
uint* nameLen,
char* nameBuf)
=> _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeName(flags, bufLen, nameLen, nameBuf) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetMethodInstance(DacComNullableByRef<IXCLRDataMethodInstance> method)
{
Expand DownExpand Up@@ -384,17 +384,17 @@ int IXCLRDataFrame.Request(
byte* inBuffer,
uint outBufferSize,
byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetNumTypeArguments(uint* numTypeArgs)
=> _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetNumTypeArguments(numTypeArgs) : HResults.E_NOTIMPL;

int IXCLRDataFrame.GetTypeArgumentByIndex(uint index, DacComNullableByRef<IXCLRDataTypeInstance> typeArg)
=> _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeArgumentByIndex(index, typeArg) : HResults.E_NOTIMPL;

// IXCLRDataFrame2 implementation
int IXCLRDataFrame2.GetExactGenericArgsToken(DacComNullableByRef<IXCLRDataValue> genericToken)
=> _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl2 is not null ? _legacyImpl2.GetExactGenericArgsToken(genericToken) : HResults.E_NOTIMPL;

// ========== Metadata resolution helpers ==========

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -27,19 +27,19 @@ public ClrDataMethodDefinition(
_legacyImpl = legacyImpl;
}
int IXCLRDataMethodDefinition.GetTypeDefinition(DacComNullableByRef<IXCLRDataTypeDefinition> typeDefinition)
=> _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetTypeDefinition(typeDefinition) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumInstances(IXCLRDataAppDomain? appDomain, ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumInstances(appDomain, handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumInstance(ulong* handle, DacComNullableByRef<IXCLRDataMethodInstance> instance)
=> _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumInstance(handle, instance) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumInstances(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumInstances(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetName(uint flags, uint bufLen, uint* nameLen, char* name)
=> _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetName(flags, bufLen, nameLen, name) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<IXCLRDataModule> mod)
{
Expand DownExpand Up@@ -93,35 +93,35 @@ int IXCLRDataMethodDefinition.GetTokenAndScope(uint* token, DacComNullableByRef<
}

int IXCLRDataMethodDefinition.GetFlags(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetFlags(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.IsSameObject(IXCLRDataMethodDefinition? method)
=> _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.IsSameObject(method) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetLatestEnCVersion(uint* version)
=> _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetLatestEnCVersion(version) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.StartEnumExtents(ulong* handle)
=> _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.StartEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EnumExtent(ulong* handle, ClrDataMethodDefinitionExtent* extent)
=> _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EnumExtent(handle, extent) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.EndEnumExtents(ulong handle)
=> _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.EndEnumExtents(handle) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetCodeNotification(uint* flags)
=> _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.SetCodeNotification(uint flags)
=> _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.SetCodeNotification(flags) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.Request(uint reqCode, uint inBufferSize, byte* inBuffer, uint outBufferSize, byte* outBuffer)
=> _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.Request(reqCode, inBufferSize, inBuffer, outBufferSize, outBuffer) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.GetRepresentativeEntryAddress(ClrDataAddress* addr)
=> _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.GetRepresentativeEntryAddress(addr) : HResults.E_NOTIMPL;

int IXCLRDataMethodDefinition.HasClassOrMethodInstantiation(int* bGeneric)
=> _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
=> LegacyFallbackHelper.CanFallback() && _legacyImpl is not null ? _legacyImpl.HasClassOrMethodInstantiation(bGeneric) : HResults.E_NOTIMPL;
}
Loading
Loading