Skip to content

Commit 0bd4424

Browse files
authored
[cDAC] Remove references to FEATURE_EH_FUNCLETS (#116743)
* remove references to feature eh funclets in cDAC managed code * remove FeatureEHFunclets data descriptor
1 parent 2313209 commit 0bd4424

File tree

13 files changed

+33
-79
lines changed

13 files changed

+33
-79
lines changed

src/coreclr/debug/runtimeinfo/datadescriptor.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -870,11 +870,6 @@ CDAC_GLOBAL_POINTER(GCThread, &::g_pSuspensionThread)
870870
#undef FRAME_TYPE_NAME
871871

872872
CDAC_GLOBAL(MethodDescTokenRemainderBitCount, uint8, METHOD_TOKEN_REMAINDER_BIT_COUNT)
873-
#if FEATURE_EH_FUNCLETS
874-
CDAC_GLOBAL(FeatureEHFunclets, uint8, 1)
875-
#else
876-
CDAC_GLOBAL(FeatureEHFunclets, uint8, 0)
877-
#endif
878873
#if FEATURE_COMINTEROP
879874
CDAC_GLOBAL(FeatureCOMInterop, uint8, 1)
880875
#else

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Constants.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ public static class Globals
1515
public const string GCThread = nameof(GCThread);
1616

1717
public const string FeatureCOMInterop = nameof(FeatureCOMInterop);
18-
public const string FeatureEHFunclets = nameof(FeatureEHFunclets);
1918

2019
public const string ObjectToMethodTableUnmask = nameof(ObjectToMethodTableUnmask);
2120
public const string SOSBreakingChangeVersion = nameof(SOSBreakingChangeVersion);

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/ExecutionManager/ExecutionManagerCore.EEJitManager.cs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ public override bool GetMethodInfo(RangeSection rangeSection, TargetCodePointer
4646

4747
public override TargetPointer GetUnwindInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress)
4848
{
49-
// TODO: This only works with funclets enabled. See runtime definition of RealCodeHeader for more info.
5049
if (rangeSection.IsRangeList)
5150
return TargetPointer.Null;
5251
if (rangeSection.Data == null)
@@ -60,16 +59,7 @@ public override TargetPointer GetUnwindInfo(RangeSection rangeSection, TargetCod
6059
if (!GetRealCodeHeader(rangeSection, codeStart, out Data.RealCodeHeader? realCodeHeader))
6160
return TargetPointer.Null;
6261

63-
if (realCodeHeader.NumUnwindInfos is not uint numUnwindInfos)
64-
{
65-
throw new InvalidOperationException("Unable to get NumUnwindInfos");
66-
}
67-
if (realCodeHeader.UnwindInfos is not TargetPointer unwindInfos)
68-
{
69-
throw new InvalidOperationException("Unable to get NumUnwindInfos");
70-
}
71-
72-
if (numUnwindInfos == 0)
62+
if (realCodeHeader.NumUnwindInfos == 0)
7363
{
7464
return TargetPointer.Null;
7565
}
@@ -79,10 +69,10 @@ public override TargetPointer GetUnwindInfo(RangeSection rangeSection, TargetCod
7969
TargetPointer imageBase = rangeSection.Data.RangeBegin;
8070
TargetPointer relativeAddr = addr - imageBase;
8171

82-
if (!_runtimeFunctions.TryGetRuntimeFunctionIndexForAddress(unwindInfos, numUnwindInfos, relativeAddr, out uint index))
72+
if (!_runtimeFunctions.TryGetRuntimeFunctionIndexForAddress(realCodeHeader.UnwindInfos, realCodeHeader.NumUnwindInfos, relativeAddr, out uint index))
8373
return TargetPointer.Null;
8474

85-
return _runtimeFunctions.GetRuntimeFunctionAddress(unwindInfos, index);
75+
return _runtimeFunctions.GetRuntimeFunctionAddress(realCodeHeader.UnwindInfos, index);
8676
}
8777

8878
public override void GetGCInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress, out TargetPointer gcInfo, out uint gcVersion)

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/StackWalk/FrameHandling/AMD64FrameHandler.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ internal class AMD64FrameHandler(Target target, ContextHolder<AMD64Context> cont
1313

1414
void IPlatformFrameHandler.HandleFaultingExceptionFrame(FaultingExceptionFrame frame)
1515
{
16-
if (frame.TargetContext is not TargetPointer targetContext)
17-
{
18-
throw new InvalidOperationException("Unexpected null context pointer on FaultingExceptionFrame");
19-
}
20-
_holder.ReadFromAddress(_target, targetContext);
16+
_holder.ReadFromAddress(_target, frame.TargetContext);
2117

2218
// Clear the CONTEXT_XSTATE, since the AMD64Context contains just plain CONTEXT structure
2319
// that does not support holding any extended state.

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/StackWalk/FrameHandling/ARM64FrameHandler.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@ internal class ARM64FrameHandler(Target target, ContextHolder<ARM64Context> cont
1515

1616
void IPlatformFrameHandler.HandleFaultingExceptionFrame(FaultingExceptionFrame frame)
1717
{
18-
if (frame.TargetContext is not TargetPointer targetContext)
19-
{
20-
throw new InvalidOperationException("Unexpected null context pointer on FaultingExceptionFrame");
21-
}
22-
_holder.ReadFromAddress(_target, targetContext);
18+
_holder.ReadFromAddress(_target, frame.TargetContext);
2319

2420
// Clear the CONTEXT_XSTATE, since the ARM64Context contains just plain CONTEXT structure
2521
// that does not support holding any extended state.

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/StackWalk/FrameHandling/X86FrameHandler.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,7 @@ internal class X86FrameHandler(Target target, ContextHolder<X86Context> contextH
1414

1515
public void HandleFaultingExceptionFrame(FaultingExceptionFrame frame)
1616
{
17-
if (frame.TargetContext is not TargetPointer targetContext)
18-
{
19-
throw new InvalidOperationException("Unexpected null context pointer on FaultingExceptionFrame");
20-
}
21-
_context.ReadFromAddress(_target, targetContext);
17+
_context.ReadFromAddress(_target, frame.TargetContext);
2218

2319
// Clear the CONTEXT_XSTATE, since the X86Context contains just plain CONTEXT structure
2420
// that does not support holding any extended state.

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/Thread_1.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,7 @@ ThreadData IThread.GetThreadData(TargetPointer threadPointer)
4646
{
4747
Data.Thread thread = _target.ProcessedData.GetOrAdd<Data.Thread>(threadPointer);
4848

49-
// Exception tracker is a pointer when EH funclets are enabled
50-
TargetPointer address = _target.ReadGlobal<byte>(Constants.Globals.FeatureEHFunclets) != 0
51-
? _target.ReadPointer(thread.ExceptionTracker)
52-
: thread.ExceptionTracker;
49+
TargetPointer address = _target.ReadPointer(thread.ExceptionTracker);
5350
TargetPointer firstNestedException = TargetPointer.Null;
5451
if (address != TargetPointer.Null)
5552
{

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Data/Frames/FaultingExceptionFrame.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,10 @@ static FaultingExceptionFrame IData<FaultingExceptionFrame>.Create(Target target
1111
public FaultingExceptionFrame(Target target, TargetPointer address)
1212
{
1313
Target.TypeInfo type = target.GetTypeInfo(DataType.FaultingExceptionFrame);
14-
15-
// TargetContextPtr only exists when FEATURE_EH_FUNCLETS is defined
16-
if (type.Fields.ContainsKey(nameof(TargetContext)))
17-
{
18-
TargetContext = address + (ulong)type.Fields[nameof(TargetContext)].Offset;
19-
}
14+
TargetContext = address + (ulong)type.Fields[nameof(TargetContext)].Offset;
2015
Address = address;
2116
}
2217

2318
public TargetPointer Address { get; }
24-
public TargetPointer? TargetContext { get; }
19+
public TargetPointer TargetContext { get; }
2520
}

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Data/Frames/SoftwareExceptionFrame.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ static SoftwareExceptionFrame IData<SoftwareExceptionFrame>.Create(Target target
1010

1111
public SoftwareExceptionFrame(Target target, TargetPointer address)
1212
{
13-
// TypeInfo will only exist if FEATURE_EH_FUNCLETS is enabled.
14-
// If it doesn't exist, then this type of frame is not present in target.
1513
Target.TypeInfo type = target.GetTypeInfo(DataType.SoftwareExceptionFrame);
1614
Address = address;
1715
TargetContext = address + (ulong)type.Fields[nameof(TargetContext)].Offset;

src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Data/RealCodeHeader.cs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,12 @@ public RealCodeHeader(Target target, TargetPointer address)
1313
Target.TypeInfo type = target.GetTypeInfo(DataType.RealCodeHeader);
1414
MethodDesc = target.ReadPointer(address + (ulong)type.Fields[nameof(MethodDesc)].Offset);
1515
GCInfo = target.ReadPointer(address + (ulong)type.Fields[nameof(GCInfo)].Offset);
16-
17-
// Only available if FEATURE_EH_FUNCLETS is enabled.
18-
if (type.Fields.ContainsKey(nameof(NumUnwindInfos)))
19-
NumUnwindInfos = target.Read<uint>(address + (ulong)type.Fields[nameof(NumUnwindInfos)].Offset);
20-
21-
// Only available if FEATURE_EH_FUNCLETS is enabled.
22-
if (type.Fields.ContainsKey(nameof(UnwindInfos)))
23-
UnwindInfos = address + (ulong)type.Fields[nameof(UnwindInfos)].Offset;
16+
NumUnwindInfos = target.Read<uint>(address + (ulong)type.Fields[nameof(NumUnwindInfos)].Offset);
17+
UnwindInfos = address + (ulong)type.Fields[nameof(UnwindInfos)].Offset;
2418
}
2519

2620
public TargetPointer MethodDesc { get; init; }
2721
public TargetPointer GCInfo { get; init; }
28-
public uint? NumUnwindInfos { get; init; }
29-
public TargetPointer? UnwindInfos { get; init; }
22+
public uint NumUnwindInfos { get; init; }
23+
public TargetPointer UnwindInfos { get; init; }
3024
}

0 commit comments

Comments
 (0)