Contracts\CodeVersions_1.cs (42)
21ILCodeVersionHandle ICodeVersions.GetActiveILCodeVersion(TargetPointer methodDesc)
24GetModuleAndMethodDesc(methodDesc, out TargetPointer module, out uint methodDefToken);
26TargetPointer ilVersionStateAddress = GetILVersionStateAddress(module, methodDefToken);
27if (ilVersionStateAddress == TargetPointer.Null)
49out TargetPointer module,
69IEnumerable<ILCodeVersionHandle> ICodeVersions.GetILCodeVersions(TargetPointer methodDesc)
72GetModuleAndMethodDesc(methodDesc, out TargetPointer module, out uint methodDefToken);
78TargetPointer ilVersionStateAddress = GetILVersionStateAddress(module, methodDefToken);
79if (ilVersionStateAddress != TargetPointer.Null)
82TargetPointer nodePointer = ilState.FirstVersionNode;
83while (nodePointer != TargetPointer.Null)
92IEnumerable<NativeCodeVersionHandle> ICodeVersions.GetNativeCodeVersions(TargetPointer methodDesc, ILCodeVersionHandle ilCodeVersionHandle)
128TargetPointer methodDescAddress = executionManager.GetMethodDesc(info.Value);
129if (methodDescAddress == TargetPointer.Null)
148bool ICodeVersions.CodeVersionManagerSupportsMethod(TargetPointer methodDescAddress)
156TargetPointer mtAddr = rts.GetMethodTable(md);
158TargetPointer modAddr = rts.GetModule(mt);
186NativeCodeVersionHandle ICodeVersions.GetActiveNativeCodeVersionForILCodeVersion(TargetPointer methodDesc, ILCodeVersionHandle ilCodeVersionHandle)
215TargetPointer ICodeVersions.GetGCStressCodeCopy(NativeCodeVersionHandle codeVersionHandle)
230if (codeVersionNode.GCCoverageInfo is TargetPointer gcCoverageInfoAddr && gcCoverageInfoAddr != TargetPointer.Null)
235return TargetPointer.Null;
265TargetPointer versioningStateAddr = rts.GetMethodDescVersioningState(md);
266if (versioningStateAddr == TargetPointer.Null)
272TargetPointer currentAddress = versioningState.NativeCodeVersionNode;
273while (currentAddress != TargetPointer.Null)
322TargetPointer versioningStateAddress = _target.Contracts.RuntimeTypeSystem.GetMethodDescVersioningState(md);
323if (versioningStateAddress == TargetPointer.Null)
340private void GetModuleAndMethodDesc(TargetPointer methodDesc, out TargetPointer module, out uint methodDefToken)
344TargetPointer mtAddr = rts.GetMethodTable(md);
350private TargetPointer GetILVersionStateAddress(TargetPointer module, uint methodDefToken)
354return TargetPointer.Null;
357TargetPointer ilCodeVersionTable = _target.Contracts.Loader.GetLookupTables(moduleHandle).MethodDefToILCodeVersioningState;
358TargetPointer ilVersionStateAddress = _target.Contracts.Loader.GetModuleLookupMapElement(ilCodeVersionTable, methodDefToken, out var _);
364if (handle.ILCodeVersionNode == TargetPointer.Null)
374if (handle.CodeVersionNodeAddress == TargetPointer.Null)
393TargetPointer ICodeVersions.GetIL(ILCodeVersionHandle ilCodeVersionHandle)
396TargetPointer ilAddress = default;
403if (ilAddress == TargetPointer.Null)
416return iLCodeVersionHandle.IsExplicit ? AsNode(iLCodeVersionHandle).ILAddress == TargetPointer.Null : true;
Contracts\ComWrappers_1.cs (48)
26private TargetPointer? _mowTableAddr = null;
27private TargetPointer? _nativeObjectWrapperCWTAddr = null;
37public TargetPointer GetComWrappersIdentity(TargetPointer address)
43private bool GetComWrappersCCWVTableQIAddress(TargetPointer ccw, out TargetPointer vtable, out TargetPointer qiAddress)
45qiAddress = TargetPointer.Null;
54private bool IsComWrappersCCW(TargetPointer ccw)
56if (!GetComWrappersCCWVTableQIAddress(ccw, out _, out TargetPointer qiAddress))
59if (!_target.TryReadGlobalPointer(Constants.Globals.ComWrappersVtablePtrs, out TargetPointer? comWrappersVtablePtrs))
65public TargetPointer GetManagedObjectWrapperFromCCW(TargetPointer ccw)
68return TargetPointer.Null;
69if (!_target.TryReadPointer(ccw & _target.ReadGlobalPointer(Constants.Globals.DispatchThisPtrMask), out TargetPointer MOWWrapper))
70return TargetPointer.Null;
74public TargetPointer GetComWrappersObjectFromMOW(TargetPointer mow)
81public long GetMOWReferenceCount(TargetPointer mow)
87private TargetPointer IndexIntoDispatchSection(int index, TargetPointer dispatches)
93TargetPointer dispatchAddress = dispatches + (ulong)((uint)(index / (int)entriesPerThisPtr) * dispatchSize);
99public TargetPointer GetIdentityForMOW(TargetPointer mow)
113TargetPointer entryAddress = layout.UserDefined + (ulong)((uint)i * entrySize);
121return TargetPointer.Null;
124public List<TargetPointer> GetMOWs(TargetPointer obj, out bool hasMOWTable)
130rts.GetCoreLibFieldDescAndDef(ComWrappersNamespace, ComWrappersName, AllManagedObjectWrapperTableFieldName, out TargetPointer fieldDescAddr, out _);
134List<TargetPointer> mows = new List<TargetPointer>();
136if (_mowTableAddr.Value == TargetPointer.Null)
139if (cwt.TryGetValue(_mowTableAddr.Value, obj, out TargetPointer mowListObj))
145rts.GetCoreLibFieldDescAndDef(ListNamespace, ListName, ListItemsFieldName, out TargetPointer itemsFieldDescAddr, out FieldDefinition itemsFieldDef);
148TargetPointer listItemsPtr = _target.ReadPointer(listObj.Data + _listItemsOffset.Value);
152rts.GetCoreLibFieldDescAndDef(ListNamespace, ListName, ListSizeFieldName, out TargetPointer sizeFieldDescAddr, out FieldDefinition sizeFieldDef);
157if (size > 0 && listItemsPtr != TargetPointer.Null)
162TargetPointer mow = _target.ReadPointer(listItemsArray.DataPointer + (ulong)(i * _target.PointerSize));
171public bool IsComWrappersRCW(TargetPointer rcw)
173TargetPointer mt = _target.Contracts.Object.GetMethodTableAddress(rcw);
177TargetPointer systemAssembly = loader.GetSystemAssembly();
182TargetPointer typeHandlePtr = rts.GetTypeByNameAndModule(NativeObjectWrapperName, NativeObjectWrapperNamespace, moduleHandle).Address;
186public TargetPointer GetComWrappersRCWForObject(TargetPointer obj)
191rts.GetCoreLibFieldDescAndDef(ComWrappersNamespace, ComWrappersName, NativeObjectWrapperCWTFieldName, out TargetPointer fieldDescAddr, out _);
194if (_nativeObjectWrapperCWTAddr.Value == TargetPointer.Null)
195return TargetPointer.Null;
197_ = cwt.TryGetValue(_nativeObjectWrapperCWTAddr.Value, obj, out TargetPointer rcw);
Contracts\ConditionalWeakTable_1.cs (15)
35bool IConditionalWeakTable.TryGetValue(TargetPointer conditionalWeakTable, TargetPointer key, out TargetPointer value)
37value = TargetPointer.Null;
43rts.GetCoreLibFieldDescAndDef(CWTNamespace, CWTTypeName, ContainerFieldName, out TargetPointer containerFieldDescAddr, out FieldDefinition containerFieldDef);
47TargetPointer container = _target.ReadPointer(cwtObj.Data + _containerFieldOffset.Value);
52rts.GetCoreLibFieldDescAndDef(CWTNamespace, ContainerTypeName, BucketsFieldName, out TargetPointer bucketsFieldDescAddr, out FieldDefinition bucketsFieldDef);
57rts.GetCoreLibFieldDescAndDef(CWTNamespace, ContainerTypeName, EntriesFieldName, out TargetPointer entriesFieldDescAddr, out FieldDefinition entriesFieldDef);
62TargetPointer bucketsPtr = _target.ReadPointer(containerObj.Data + _bucketsFieldOffset.Value);
63TargetPointer entriesPtr = _target.ReadPointer(containerObj.Data + _entriesFieldOffset.Value);
81rts.GetCoreLibFieldDescAndDef(CWTNamespace, EntryTypeName, HashCodeFieldName, out TargetPointer hashCodeFieldDescAddr, out FieldDefinition hashCodeFieldDef);
86rts.GetCoreLibFieldDescAndDef(CWTNamespace, EntryTypeName, NextFieldName, out TargetPointer nextFieldDescAddr, out FieldDefinition nextFieldDef);
91rts.GetCoreLibFieldDescAndDef(CWTNamespace, EntryTypeName, DepHndFieldName, out TargetPointer depHndFieldDescAddr, out FieldDefinition depHndFieldDef);
97TargetPointer entriesMT = _target.Contracts.Object.GetMethodTableAddress(entriesPtr);
103TargetPointer entryAddress = entriesArray.DataPointer + (ulong)((uint)entriesIndex * entrySize);
Contracts\ExecutionManager\ExecutionManager_1.cs (12)
15TargetPointer addr = target.ReadGlobalPointer(Constants.Globals.ExecutionManagerCodeRangeMapAddress);
21public TargetPointer GetMethodDesc(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetMethodDesc(codeInfoHandle);
22public TargetPointer GetStartAddress(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetStartAddress(codeInfoHandle);
23public TargetPointer GetFuncletStartAddress(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetFuncletStartAddress(codeInfoHandle);
24public void GetMethodRegionInfo(CodeBlockHandle codeInfoHandle, out uint hotSize, out TargetPointer coldStart, out uint coldSize) => _executionManagerCore.GetMethodRegionInfo(codeInfoHandle, out hotSize, out coldStart, out coldSize);
25public TargetPointer NonVirtualEntry2MethodDesc(TargetCodePointer entrypoint) => _executionManagerCore.NonVirtualEntry2MethodDesc(entrypoint);
28public TargetPointer GetUnwindInfo(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetUnwindInfo(codeInfoHandle);
29public TargetPointer GetUnwindInfoBaseAddress(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetUnwindInfoBaseAddress(codeInfoHandle);
30public TargetPointer GetDebugInfo(CodeBlockHandle codeInfoHandle, out bool hasFlagByte) => _executionManagerCore.GetDebugInfo(codeInfoHandle, out hasFlagByte);
31public void GetGCInfo(CodeBlockHandle codeInfoHandle, out TargetPointer gcInfo, out uint gcVersion) => _executionManagerCore.GetGCInfo(codeInfoHandle, out gcInfo, out gcVersion);
37public TargetPointer FindReadyToRunModule(TargetPointer address) => _executionManagerCore.FindReadyToRunModule(address);
Contracts\ExecutionManager\ExecutionManager_2.cs (12)
15TargetPointer addr = target.ReadGlobalPointer(Constants.Globals.ExecutionManagerCodeRangeMapAddress);
21public TargetPointer GetMethodDesc(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetMethodDesc(codeInfoHandle);
22public TargetPointer GetStartAddress(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetStartAddress(codeInfoHandle);
23public TargetPointer GetFuncletStartAddress(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetFuncletStartAddress(codeInfoHandle);
24public void GetMethodRegionInfo(CodeBlockHandle codeInfoHandle, out uint hotSize, out TargetPointer coldStart, out uint coldSize) => _executionManagerCore.GetMethodRegionInfo(codeInfoHandle, out hotSize, out coldStart, out coldSize);
25public TargetPointer NonVirtualEntry2MethodDesc(TargetCodePointer entrypoint) => _executionManagerCore.NonVirtualEntry2MethodDesc(entrypoint);
28public TargetPointer GetUnwindInfo(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetUnwindInfo(codeInfoHandle);
29public TargetPointer GetUnwindInfoBaseAddress(CodeBlockHandle codeInfoHandle) => _executionManagerCore.GetUnwindInfoBaseAddress(codeInfoHandle);
30public TargetPointer GetDebugInfo(CodeBlockHandle codeInfoHandle, out bool hasFlagByte) => _executionManagerCore.GetDebugInfo(codeInfoHandle, out hasFlagByte);
31public void GetGCInfo(CodeBlockHandle codeInfoHandle, out TargetPointer gcInfo, out uint gcVersion) => _executionManagerCore.GetGCInfo(codeInfoHandle, out gcInfo, out gcVersion);
37public TargetPointer FindReadyToRunModule(TargetPointer address) => _executionManagerCore.FindReadyToRunModule(address);
Contracts\ExecutionManager\ExecutionManagerCore.cs (67)
19private readonly Dictionary<TargetPointer, CodeBlock> _codeInfos = new();
45public TargetPointer StartAddress { get; }
46public TargetPointer MethodDescAddress { get; }
47public TargetPointer JitManagerAddress { get; }
49public CodeBlock(TargetPointer startAddress, TargetPointer methodDesc, TargetNUInt relativeOffset, TargetPointer jitManagerAddress)
57public bool Valid => JitManagerAddress != TargetPointer.Null;
114out TargetPointer coldStart,
116public abstract TargetPointer GetUnwindInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress);
117public abstract TargetPointer GetDebugInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress, out bool hasFlagByte);
118public abstract void GetGCInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress, out TargetPointer gcInfo, out uint gcVersion);
119public abstract void GetExceptionClauses(RangeSection rangeSection, CodeBlockHandle codeInfoHandle, out TargetPointer startAddr, out TargetPointer endAddr);
141internal bool HasR2RModule => Data!.R2RModule != TargetPointer.Null;
143internal static bool IsStubCodeBlock(Target target, TargetPointer codeHeaderIndirect)
151TargetPointer rangeSectionFragmentPtr = rangeSectionLookup.FindFragment(target, topRangeSectionMap, jittedCodeAddress);
154while (rangeSectionFragmentPtr != TargetPointer.Null)
163if (rangeSectionFragmentPtr == TargetPointer.Null)
169if (rangeSection.NextForDelete != TargetPointer.Null)
183else if (rangeSection.Data!.R2RModule != TargetPointer.Null)
216TargetPointer key = ip.AsTargetPointer; // FIXME: thumb bit. It's harmless (we potentialy have 2 cache entries per IP), but we should fix it
230TargetPointer IExecutionManager.GetMethodDesc(CodeBlockHandle codeInfoHandle)
238TargetPointer IExecutionManager.GetStartAddress(CodeBlockHandle codeInfoHandle)
246TargetPointer IExecutionManager.GetFuncletStartAddress(CodeBlockHandle codeInfoHandle)
253TargetPointer runtimeFunctionPtr = jitManager?.GetUnwindInfo(range, codeInfoHandle.Address.Value) ?? TargetPointer.Null;
255if (runtimeFunctionPtr == TargetPointer.Null)
266void IExecutionManager.GetMethodRegionInfo(CodeBlockHandle codeInfoHandle, out uint hotSize, out TargetPointer coldStart, out uint coldSize)
269coldStart = TargetPointer.Null;
281TargetPointer IExecutionManager.NonVirtualEntry2MethodDesc(TargetCodePointer entrypoint)
290return TargetPointer.Null;
305return TargetPointer.Null;
316return TargetPointer.Null;
322TargetPointer startAddress = ((IExecutionManager)this).GetStartAddress(codeInfoHandle);
339TargetPointer funcletStartAddress = eman.GetFuncletStartAddress(codeInfoHandle);
352TargetPointer IExecutionManager.GetUnwindInfo(CodeBlockHandle codeInfoHandle)
356return TargetPointer.Null;
360return jitManager?.GetUnwindInfo(range, codeInfoHandle.Address.Value) ?? TargetPointer.Null;
363TargetPointer IExecutionManager.GetUnwindInfoBaseAddress(CodeBlockHandle codeInfoHandle)
372TargetPointer IExecutionManager.GetDebugInfo(CodeBlockHandle codeInfoHandle, out bool hasFlagByte)
377return TargetPointer.Null;
380return jitManager?.GetDebugInfo(range, codeInfoHandle.Address.Value, out hasFlagByte) ?? TargetPointer.Null;
383void IExecutionManager.GetGCInfo(CodeBlockHandle codeInfoHandle, out TargetPointer gcInfo, out uint gcVersion)
385gcInfo = TargetPointer.Null;
405TargetPointer IExecutionManager.FindReadyToRunModule(TargetPointer address)
413return TargetPointer.Null;
420TargetPointer eeJitManagerPtr = _target.ReadGlobalPointer(Constants.Globals.EEJitManagerAddress);
421TargetPointer eeJitManagerAddr = _target.ReadPointer(eeJitManagerPtr);
433private ICodeHeapInfo GetCodeHeapInfo(TargetPointer codeHeapAddress)
449TargetPointer heapListAddress = ((IExecutionManager)this).GetEEJitManagerInfo().HeapListAddress;
450TargetPointer nodeAddr = heapListAddress;
451while (nodeAddr != TargetPointer.Null)
480private bool IsObjectType(TargetPointer moduleAddr, uint classToken)
486TargetPointer resolvedMethodTable = (EcmaMetadataUtils.TokenType)(classToken & EcmaMetadataUtils.TokenTypeMask) switch
490_ => TargetPointer.Null,
493if (resolvedMethodTable == TargetPointer.Null)
496TargetPointer objectMethodTable = _target.ReadPointer(
511jitManager.GetExceptionClauses(range, codeInfoHandle, out TargetPointer startAddr, out TargetPointer endAddr);
515TargetPointer methodDescPtr = ((IExecutionManager)this).GetMethodDesc(codeInfoHandle);
518TargetPointer mtPtr = rts.GetMethodTable(mdHandle);
520TargetPointer handleModuleAddr = rts.GetModule(th);
523for (TargetPointer addr = startAddr; addr < endAddr; addr += clauseSize)
533TargetPointer? moduleAddr = null;
541TargetPointer objectMethodTable = _target.ReadPointer(
Contracts\ExecutionManager\ExecutionManagerCore.EEJitManager.cs (42)
32TargetPointer codeStart = FindMethodCode(rangeSection, jittedCodeAddress);
33if (codeStart == TargetPointer.Null)
50out TargetPointer coldStart,
54coldStart = TargetPointer.Null;
58GetGCInfo(rangeSection, jittedCodeAddress, out TargetPointer pGcInfo, out uint gcVersion);
64public override TargetPointer GetUnwindInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress)
70TargetPointer codeStart = FindMethodCode(rangeSection, jittedCodeAddress);
71if (codeStart == TargetPointer.Null)
72return TargetPointer.Null;
76return TargetPointer.Null;
80return TargetPointer.Null;
84TargetPointer addr = CodePointerUtils.AddressFromCodePointer(jittedCodeAddress, Target);
85TargetPointer imageBase = rangeSection.Data.RangeBegin;
86TargetPointer relativeAddr = addr - imageBase;
89return TargetPointer.Null;
94public override TargetPointer GetDebugInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress, out bool hasFlagByte)
101TargetPointer codeStart = FindMethodCode(rangeSection, jittedCodeAddress);
102if (codeStart == TargetPointer.Null)
103return TargetPointer.Null;
107return TargetPointer.Null;
119TargetPointer startAddr = FindMethodCode(rangeSection, codeAddress); // validate that the code address is within the method's code range
120if (startAddr == TargetPointer.Null)
125public override void GetGCInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress, out TargetPointer gcInfo, out uint gcVersion)
127gcInfo = TargetPointer.Null;
136TargetPointer codeStart = FindMethodCode(rangeSection, jittedCodeAddress);
137if (codeStart == TargetPointer.Null)
148private TargetPointer FindMethodCode(RangeSection rangeSection, TargetCodePointer codeAddress)
156TargetPointer heapListAddress = rangeSection.Data.HeapList;
161private TargetPointer GetCodeHeaderAddress(RangeSection rangeSection, TargetPointer codeStart)
171TargetPointer codeHeaderIndirect = new TargetPointer(codeStart - (ulong)codeHeaderOffset);
175private bool GetRealCodeHeader(RangeSection rangeSection, TargetPointer codeStart, [NotNullWhen(true)] out Data.RealCodeHeader? realCodeHeader)
178TargetPointer codeHeaderAddress = GetCodeHeaderAddress(rangeSection, codeStart);
187private CodeKind GetCodeHeaderStubKind(RangeSection rangeSection, TargetPointer codeStart)
189TargetPointer codeHeaderAddress = GetCodeHeaderAddress(rangeSection, codeStart);
197public override void GetExceptionClauses(RangeSection rangeSection, CodeBlockHandle codeInfoHandle, out TargetPointer startAddr, out TargetPointer endAddr)
199startAddr = TargetPointer.Null;
200endAddr = TargetPointer.Null;
206TargetPointer codeStart = FindMethodCode(rangeSection, new TargetCodePointer(codeInfoHandle.Address));
207if (codeStart == TargetPointer.Null)
212if (realCodeHeader.EHInfo == TargetPointer.Null)
Contracts\ExecutionManager\ExecutionManagerCore.InterpreterJitManager.cs (28)
31TargetPointer codeStart = FindMethodCode(rangeSection, jittedCodeAddress);
32if (codeStart == TargetPointer.Null)
49out TargetPointer coldStart,
52coldStart = TargetPointer.Null;
56GetGCInfo(rangeSection, jittedCodeAddress, out TargetPointer pGcInfo, out uint gcVersion);
62public override TargetPointer GetUnwindInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress)
65return TargetPointer.Null;
73public override TargetPointer GetDebugInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress, out bool hasFlagByte)
77return TargetPointer.Null;
79TargetPointer codeStart = FindMethodCode(rangeSection, jittedCodeAddress);
80if (codeStart == TargetPointer.Null)
81return TargetPointer.Null;
84return TargetPointer.Null;
89public override void GetGCInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress, out TargetPointer gcInfo, out uint gcVersion)
91gcInfo = TargetPointer.Null;
97TargetPointer codeStart = FindMethodCode(rangeSection, jittedCodeAddress);
98if (codeStart == TargetPointer.Null)
108public override void GetExceptionClauses(RangeSection rangeSection, CodeBlockHandle codeInfoHandle, out TargetPointer startAddr, out TargetPointer endAddr)
110startAddr = TargetPointer.Null;
111endAddr = TargetPointer.Null;
116TargetPointer codeStart = FindMethodCode(rangeSection, new TargetCodePointer(codeInfoHandle.Address));
128private TargetPointer FindMethodCode(RangeSection rangeSection, TargetCodePointer jittedCodeAddress)
135TargetPointer heapListAddress = rangeSection.Data.HeapList;
140private bool GetInterpreterRealCodeHeader(TargetPointer codeStart, [NotNullWhen(true)] out Data.InterpreterRealCodeHeader? realCodeHeader)
143if (codeStart == TargetPointer.Null)
148TargetPointer codeHeaderIndirect = new TargetPointer(codeStart - (ulong)codeHeaderOffset);
152TargetPointer codeHeaderAddress = Target.ReadPointer(codeHeaderIndirect);
Contracts\ExecutionManager\ExecutionManagerCore.ReadyToRunJitManager.cs (50)
38if (!GetRuntimeFunction(rangeSection, r2rInfo, jittedCodeAddress, out TargetPointer imageBase, out uint index))
42index = AdjustRuntimeFunctionToMethodStart(r2rInfo, imageBase, index, out TargetPointer methodDesc);
46TargetPointer addr = CodePointerUtils.AddressFromCodePointer(jittedCodeAddress, Target);
50TargetPointer startAddress = CodePointerUtils.AddressFromCodePointer(
59TargetPointer coldStart = CodePointerUtils.AddressFromCodePointer(
78out TargetPointer coldStart,
82coldStart = TargetPointer.Null;
85GetGCInfo(rangeSection, jittedCodeAddress, out TargetPointer pGcInfo, out uint gcVersion);
90if (!GetRuntimeFunction(rangeSection, r2rInfo, jittedCodeAddress, out TargetPointer imageBase, out uint index))
106public override TargetPointer GetUnwindInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress)
110if (!GetRuntimeFunction(rangeSection, r2rInfo, jittedCodeAddress, out TargetPointer _, out uint index))
111return TargetPointer.Null;
116public override TargetPointer GetDebugInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress, out bool hasFlagByte)
123if (!GetRuntimeFunction(rangeSection, r2rInfo, jittedCodeAddress, out TargetPointer imageBase, out uint index))
124return TargetPointer.Null;
140return TargetPointer.Null;
157public override void GetGCInfo(RangeSection rangeSection, TargetCodePointer jittedCodeAddress, out TargetPointer gcInfo, out uint gcVersion)
159gcInfo = TargetPointer.Null;
164if (!GetRuntimeFunction(rangeSection, r2rInfo, jittedCodeAddress, out TargetPointer imageBase, out uint index))
172TargetPointer unwindInfo = runtimeFunction.UnwindData + imageBase;
201Debug.Assert(rangeSection.Data.R2RModule != TargetPointer.Null);
204Debug.Assert(r2rModule.ReadyToRunInfo != TargetPointer.Null);
212out TargetPointer imageBase,
215imageBase = TargetPointer.Null;
226TargetPointer addr = CodePointerUtils.AddressFromCodePointer(jittedCodeAddress, Target);
228TargetPointer relativeAddr = addr - imageBase;
241private uint AdjustRuntimeFunctionToMethodStart(Data.ReadyToRunInfo r2rInfo, TargetPointer imageBase, uint index, out TargetPointer methodDesc)
244while (methodDesc == TargetPointer.Null)
253Debug.Assert(methodDesc != TargetPointer.Null);
259if (r2rInfo.DelayLoadMethodCallThunks == TargetPointer.Null)
268private TargetPointer GetMethodDescForRuntimeFunction(Data.ReadyToRunInfo r2rInfo, TargetPointer imageBase, uint runtimeFunctionIndex)
274TargetPointer entryPoint = CodePointerUtils.AddressFromCodePointer(startAddress, Target);
276TargetPointer methodDesc = _hashMap.GetValue(r2rInfo.EntryPointToMethodDescMap, entryPoint);
278return TargetPointer.Null;
284private void GetExceptionClauses(TargetPointer exceptionLookupTableAddr, uint count, TargetPointer rangeStart, uint methodRVA, out TargetPointer startExInfoRVA, out TargetPointer endExInfoRVA)
286startExInfoRVA = TargetPointer.Null;
287endExInfoRVA = TargetPointer.Null;
310public override void GetExceptionClauses(RangeSection range, CodeBlockHandle cbh, out TargetPointer startAddr, out TargetPointer endAddr)
316startAddr = TargetPointer.Null;
317endAddr = TargetPointer.Null;
324GetMethodRVAAndRangeStart(cbh, out TargetPointer methodStart, out TargetPointer rangeStart);
341private void GetMethodRVAAndRangeStart(CodeBlockHandle cbh, out TargetPointer methodStart, out TargetPointer rangeStart)
Contracts\GC\GC_1.cs (107)
43private readonly TargetPointer _debugDestroyedHandleValue;
71TargetPointer pNumHeaps = _target.ReadGlobalPointer(Constants.Globals.NumHeaps);
80TargetPointer pInvalidCount = _target.ReadGlobalPointer(Constants.Globals.StructureInvalidCount);
87TargetPointer pMaxGeneration = _target.ReadGlobalPointer(Constants.Globals.MaxGeneration);
91void IGC.GetGCBounds(out TargetPointer minAddr, out TargetPointer maxAddr)
113GCHeapSegmentData IGC.GetHeapSegmentData(TargetPointer segmentAddress)
126Heap = heapSegment.Heap ?? TargetPointer.Null,
132if (!_target.TryReadGlobalPointer(Constants.Globals.GCGlobalMechanisms, out TargetPointer? globalMechanismsArrayStart))
138IEnumerable<TargetPointer> IGC.GetGCHeaps()
144TargetPointer heapTable = _target.ReadPointer(_target.ReadGlobalPointer(Constants.Globals.Heaps));
159GCHeapData IGC.GetHeapData(TargetPointer heapAddress)
174MarkArray = heap.MarkArray ?? TargetPointer.Null,
175NextSweepObject = heap.NextSweepObj ?? TargetPointer.Null,
176BackGroundSavedMinAddress = heap.BackgroundMinSavedAddr ?? TargetPointer.Null,
177BackGroundSavedMaxAddress = heap.BackgroundMaxSavedAddr ?? TargetPointer.Null,
183SavedSweepEphemeralSegment = heap.SavedSweepEphemeralSeg ?? TargetPointer.Null,
184SavedSweepEphemeralStart = heap.SavedSweepEphemeralStart ?? TargetPointer.Null,
209private List<GCGenerationData> GetGenerationData(TargetPointer generationTableArrayStart)
216TargetPointer generationAddress = generationTableArrayStart + i * generationSize;
230private List<TargetPointer> GetFillPointers(Data.CFinalize cFinalize)
233TargetPointer fillPointersArrayStart = cFinalize.FillPointers;
234List<TargetPointer> fillPointers = [];
240private List<TargetNUInt> ReadGCHeapDataArray(TargetPointer arrayStart, uint length)
253TargetPointer oomHistory = _target.ReadGlobalPointer(Constants.Globals.GCHeapOomData);
258GCOomData IGC.GetOomData(TargetPointer heapAddress)
281void IGC.GetGlobalAllocationContext(out TargetPointer allocPtr, out TargetPointer allocLimit)
283TargetPointer globalAllocContextAddress = _target.ReadGlobalPointer(Constants.Globals.GlobalAllocContext);
323TargetPointer handleTableMap = _target.ReadGlobalPointer(Constants.Globals.HandleTableMap);
331while (handleTableMap != TargetPointer.Null)
334foreach (TargetPointer bucketPtr in handleTableData.BucketsPtr)
336if (bucketPtr == TargetPointer.Null)
342TargetPointer handleTablePtr = _target.ReadPointer(bucket.Table + (ulong)(j * _target.PointerSize));
343if (handleTablePtr == TargetPointer.Null)
347if (handleTable.SegmentList == TargetPointer.Null)
351TargetPointer segmentPtr = handleTable.SegmentList;
357} while (segmentPtr != TargetPointer.Null);
375TargetPointer ephemeralSegment = heapData.EphemeralHeapSegment;
376TargetPointer allocAllocated = heapData.AllocAllocated;
382foreach ((Data.HeapSegment seg, TargetPointer _) in WalkSegmentList(gens[2].StartSegment))
389foreach ((Data.HeapSegment seg, TargetPointer _) in WalkSegmentList(gens[1].StartSegment))
393foreach ((Data.HeapSegment seg, TargetPointer segAddr) in WalkSegmentList(gens[0].StartSegment))
396TargetPointer end = segAddr == ephemeralSegment ? allocAllocated : seg.Allocated;
403foreach ((Data.HeapSegment seg, TargetPointer segAddr) in WalkSegmentList(gens[2].StartSegment))
413TargetPointer end = segAddr == ephemeralSegment ? allocAllocated : seg.Allocated;
419foreach ((Data.HeapSegment seg, TargetPointer _) in WalkSegmentList(gens[3].StartSegment))
425foreach ((Data.HeapSegment seg, TargetPointer _) in WalkSegmentList(gens[4].StartSegment))
431private IEnumerable<(Data.HeapSegment Segment, TargetPointer Address)> WalkSegmentList(TargetPointer startSegment)
434TargetPointer current = startSegment;
435while (current != TargetPointer.Null)
533TargetPointer handleAddress = tableSegment.RgValue + offset * (uint)_target.PointerSize;
534TargetPointer handle = _target.ReadPointer(handleAddress);
535if (handle == TargetPointer.Null || handle == _debugDestroyedHandleValue)
545private HandleData CreateHandleData(TargetPointer handleAddress, byte uBlock, uint intraBlockIndex, Data.TableSegment tableSegment, HandleType type)
572TargetPointer handle = _target.ReadPointer(handleAddress);
573obj.GetBuiltInComData(handle, out _, out TargetPointer ccw, out _);
574if (ccw != TargetPointer.Null)
598TargetPointer handleTableMap = _target.ReadGlobalPointer(Constants.Globals.HandleTableMap);
599while (handleTableMap != TargetPointer.Null && maxRegions > 0)
602foreach (TargetPointer bucketPtr in map.BucketsPtr)
604if (bucketPtr == TargetPointer.Null)
610TargetPointer handleTablePtr = _target.ReadPointer(bucket.Table + (ulong)(j * _target.PointerSize));
611if (handleTablePtr == TargetPointer.Null)
615if (handleTable.SegmentList == TargetPointer.Null)
618TargetPointer segmentPtr = handleTable.SegmentList;
619TargetPointer firstSegment = segmentPtr;
631} while (segmentPtr != TargetPointer.Null && segmentPtr != firstSegment && --segmentIterations > 0);
645TargetPointer bookkeepingStartGlobal = _target.ReadGlobalPointer(Constants.Globals.BookkeepingStart);
646if (bookkeepingStartGlobal == TargetPointer.Null)
649TargetPointer bookkeepingStart = _target.ReadPointer(bookkeepingStartGlobal);
650if (bookkeepingStart == TargetPointer.Null)
665TargetPointer next = cardTableInfo.NextCardTable;
666TargetPointer firstNext = next;
672while (next != TargetPointer.Null && next > cardTableInfoSize && maxRegions > 0)
674TargetPointer ctAddr = next - cardTableInfoSize;
712if (_target.TryReadGlobalPointer(Constants.Globals.GlobalFreeHugeRegions, out TargetPointer? globalFreeHugePtr))
718if (_target.TryReadGlobalPointer(Constants.Globals.GlobalRegionsToDecommit, out TargetPointer? globalDecommitPtr))
722TargetPointer listAddr = globalDecommitPtr.Value + (ulong)(i * regionFreeListSize);
730TargetPointer heapTable = _target.ReadPointer(_target.ReadGlobalPointer(Constants.Globals.Heaps));
733TargetPointer heapAddress = _target.ReadPointer(heapTable + (i * (uint)_target.PointerSize));
734if (heapAddress == TargetPointer.Null)
739if (heap.FreeRegions is TargetPointer freeRegionsBase && freeRegionsBase != TargetPointer.Null)
743TargetPointer listAddr = freeRegionsBase + (ulong)(j * regionFreeListSize);
748if (heap.FreeableSohSegment is TargetPointer freeableSoh && freeableSoh != TargetPointer.Null)
751if (heap.FreeableUohSegment is TargetPointer freeableUoh && freeableUoh != TargetPointer.Null)
758if (_target.TryReadGlobalPointer(Constants.Globals.GCHeapFreeRegions, out TargetPointer? freeRegionsPtr))
762TargetPointer listAddr = freeRegionsPtr.Value + (ulong)(i * regionFreeListSize);
767if (_target.TryReadGlobalPointer(Constants.Globals.GCHeapFreeableSohSegment, out TargetPointer? freeableSohPtr))
769TargetPointer segPtr = _target.ReadPointer(freeableSohPtr.Value);
770if (segPtr != TargetPointer.Null)
774if (_target.TryReadGlobalPointer(Constants.Globals.GCHeapFreeableUohSegment, out TargetPointer? freeableUohPtr))
776TargetPointer segPtr = _target.ReadPointer(freeableUohPtr.Value);
777if (segPtr != TargetPointer.Null)
785TargetNUInt IGC.GetHandleExtraInfo(TargetPointer handle)
790TargetPointer segmentBase = handle & segmentMask;
809TargetPointer extraInfoAddress = tableSegment.RgValue + offset * (uint)_target.PointerSize;
814private void AddFreeList(TargetPointer freeListAddr, FreeRegionKind kind, List<GCMemoryRegionData> regions, int heap = 0)
817if (freeList.HeadFreeRegion != TargetPointer.Null)
821private void AddSegmentList(TargetPointer start, FreeRegionKind kind, List<GCMemoryRegionData> regions, int heap = 0)
824TargetPointer curr = start;
825while (curr != TargetPointer.Null)
828if (segment.Mem != TargetPointer.Null)
Contracts\Loader_1.cs (101)
53ModuleHandle ILoader.GetModuleHandleFromModulePtr(TargetPointer modulePointer)
55if (modulePointer == TargetPointer.Null)
60ModuleHandle ILoader.GetModuleHandleFromAssemblyPtr(TargetPointer assemblyPointer)
62if (assemblyPointer == TargetPointer.Null)
66if (assembly.Module == TargetPointer.Null)
72IEnumerable<ModuleHandle> ILoader.GetModuleHandles(TargetPointer appDomain, AssemblyIterationFlags iterationFlags)
74if (appDomain == TargetPointer.Null)
80foreach (TargetPointer pAssembly in arrayList.Elements)
142TargetPointer ILoader.GetRootAssembly()
144TargetPointer appDomainPointer = _target.ReadGlobalPointer(Constants.Globals.AppDomain);
151TargetPointer appDomainPointer = _target.ReadGlobalPointer(Constants.Globals.AppDomain);
153return appDomain.FriendlyName != TargetPointer.Null
158TargetPointer ILoader.GetModule(ModuleHandle handle)
163TargetPointer ILoader.GetAssembly(ModuleHandle handle)
169TargetPointer ILoader.GetPEAssembly(ModuleHandle handle)
180if (module.PEAssembly == TargetPointer.Null)
184if (peAssembly.PEImage == TargetPointer.Null)
191bool ILoader.TryGetLoadedImageContents(ModuleHandle handle, out TargetPointer baseAddress, out uint size, out uint imageFlags)
193baseAddress = TargetPointer.Null;
200if (peImage.LoadedImageLayout == TargetPointer.Null)
225if (peImage.LoadedImageLayout == TargetPointer.Null)
233private TargetPointer FindNTHeaders(Data.PEImageLayout imageLayout)
239private TargetPointer RvaToSection(int rva, Data.PEImageLayout imageLayout)
241TargetPointer ntHeadersPtr = FindNTHeaders(imageLayout);
244TargetPointer section = ntHeadersPtr + (uint)offset + ntHeaders.FileHeader.SizeOfOptionalHeader;
245TargetPointer sectionEnd = section + Data.ImageSectionHeader.Size * ntHeaders.FileHeader.NumberOfSections;
255return TargetPointer.Null;
263TargetPointer section = RvaToSection(rva, imageLayout);
264if (section == TargetPointer.Null)
277TargetPointer headerBase = imageLayout.Base;
286TargetPointer sectionTableBase = headerBase + webcilHeader.Size; // See docs/design/mono/webcil.md
290TargetPointer sectionPtr = sectionTableBase + (uint)(i * (int)16); // See docs/design/mono/webcil.md
307private TargetPointer GetRvaData(TargetPointer peAssemblyPtr, int rva, bool isNullOk)
310return TargetPointer.Null;
312if (assembly.PEImage == TargetPointer.Null)
315if (peImage.LoadedImageLayout == TargetPointer.Null)
326TargetPointer ILoader.GetILAddr(TargetPointer peAssemblyPtr, int rva) => GetRvaData(peAssemblyPtr, rva, false);
328TargetPointer ILoader.GetFieldAddressFromRva(TargetPointer peAssemblyPtr, int rva) => GetRvaData(peAssemblyPtr, rva, true);
330bool ILoader.TryGetSymbolStream(ModuleHandle handle, out TargetPointer buffer, out uint size)
332buffer = TargetPointer.Null;
337if (module.GrowableSymbolStream == TargetPointer.Null)
348IEnumerable<TargetPointer> ILoader.GetAvailableTypeParams(ModuleHandle handle)
352if (module.AvailableTypeParams == TargetPointer.Null)
359IEnumerable<TargetPointer> ILoader.GetInstantiatedMethods(ModuleHandle handle)
363if (module.InstMethodHashTable == TargetPointer.Null)
426TargetPointer configPtr = _target.ReadGlobalPointer(Constants.Globals.EEConfig);
447return module.ReadyToRunInfo != TargetPointer.Null;
453return module.SimpleName != TargetPointer.Null
461return module.Path != TargetPointer.Null
469return module.FileName != TargetPointer.Null
474TargetPointer ILoader.GetLoaderAllocator(ModuleHandle handle)
480TargetPointer ILoader.GetILBase(ModuleHandle handle)
486TargetPointer ILoader.GetAssemblyLoadContext(ModuleHandle handle)
510private IEnumerable<(TargetPointer, uint)> IterateModuleLookupMap(TargetPointer table, uint index, Delegate iterator)
518TargetPointer entryAddress = lookupMap.TableData + (ulong)(index * _target.PointerSize);
519TargetPointer rawValue = _target.ReadPointer(entryAddress);
530} while (table != TargetPointer.Null);
533TargetPointer ILoader.GetModuleLookupMapElement(TargetPointer table, uint token, out TargetNUInt flags)
536if (table == TargetPointer.Null || rid == 0)
539return TargetPointer.Null;
544(TargetPointer rval, uint _) = IterateModuleLookupMap(table, rid, SearchLookupMap).FirstOrDefault();
549IEnumerable<(TargetPointer, uint)> ILoader.EnumerateModuleLookupMap(TargetPointer table)
551if (table == TargetPointer.Null)
557foreach ((TargetPointer targetPointer, uint idx) in IterateModuleLookupMap(table, index, IterateLookupMap))
559TargetPointer rval = targetPointer & ~supportedFlagsMask;
560if (rval != TargetPointer.Null)
586TargetPointer ILoader.GetGlobalLoaderAllocator()
588TargetPointer systemDomainPointer = _target.ReadGlobalPointer(Constants.Globals.SystemDomain);
593TargetPointer ILoader.GetSystemAssembly()
595TargetPointer systemDomainPointer = _target.ReadGlobalPointer(Constants.Globals.SystemDomain);
600TargetPointer ILoader.GetHighFrequencyHeap(TargetPointer loaderAllocatorPointer)
606TargetPointer ILoader.GetLowFrequencyHeap(TargetPointer loaderAllocatorPointer)
612TargetPointer ILoader.GetStubHeap(TargetPointer loaderAllocatorPointer)
618TargetPointer ILoader.GetObjectHandle(TargetPointer loaderAllocatorPointer)
634TargetPointer ILoader.GetILHeader(ModuleHandle handle, uint token)
638TargetPointer headerPtr = loader.GetDynamicIL(handle, token);
639if (headerPtr == TargetPointer.Null)
641TargetPointer peAssembly = loader.GetPEAssembly(handle);
654public DynamicILBlobEntry Null() => new DynamicILBlobEntry(0, TargetPointer.Null);
660static DynamicILBlobTable IData<DynamicILBlobTable>.Create(Target target, TargetPointer address)
663public DynamicILBlobTable(Target target, TargetPointer address)
672TargetPointer ILoader.GetDynamicIL(ModuleHandle handle, uint token)
675if (module.DynamicILBlobTable == TargetPointer.Null)
677return TargetPointer.Null;
684TargetPointer ILoader.GetFirstLoaderHeapBlock(TargetPointer loaderHeap)
689LoaderHeapBlockData ILoader.GetLoaderHeapBlockData(TargetPointer block)
700IReadOnlyDictionary<LoaderAllocatorHeapType, TargetPointer> ILoader.GetLoaderAllocatorHeaps(TargetPointer loaderAllocatorPointer)
705Dictionary<LoaderAllocatorHeapType, TargetPointer> heaps = new()
723if (loaderAllocator.VirtualCallStubManager != TargetPointer.Null)
Contracts\PrecodeStubs_1.cs (15)
12public static TargetPointer StubPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
14TargetPointer stubPrecodeDataAddress = instrPointer + precodeMachineDescriptor.StubCodePageSize;
19public static TargetPointer FixupPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
21TargetPointer fixupPrecodeDataAddress = instrPointer + precodeMachineDescriptor.StubCodePageSize;
26public static TargetPointer ThisPtrRetBufPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
31public static TargetPointer InterpreterPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
41internal static byte ReadPrecodeType(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
59public static KnownPrecodeType? TryGetKnownPrecodeType(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
64public static KnownPrecodeType? TryGetKnownPrecodeType_Impl<TPrecodeStubsImplementation, TStubPrecodeData>(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor) where TPrecodeStubsImplementation : IPrecodeStubsContractCommonApi<TStubPrecodeData> where TStubPrecodeData : IData<TStubPrecodeData>
105static TStubPrecodeData GetStubPrecodeData(TargetPointer stubInstrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
107TargetPointer stubPrecodeDataAddress = stubInstrPointer + precodeMachineDescriptor.StubCodePageSize;
Contracts\PrecodeStubs_2.cs (11)
11public static TargetPointer StubPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
13TargetPointer stubPrecodeDataAddress = instrPointer + precodeMachineDescriptor.StubCodePageSize;
18public static TargetPointer FixupPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
24public static TargetPointer ThisPtrRetBufPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
26TargetPointer stubPrecodeDataAddress = instrPointer + precodeMachineDescriptor.StubCodePageSize;
32public static TargetPointer InterpreterPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
42public static KnownPrecodeType? TryGetKnownPrecodeType(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
Contracts\PrecodeStubs_3.cs (13)
11public static TargetPointer StubPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
17public static TargetPointer FixupPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
23public static TargetPointer ThisPtrRetBufPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
29public static TargetPointer InterpreterPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
31TargetPointer dataAddr = instrPointer + precodeMachineDescriptor.StubCodePageSize;
45private static Data.StubPrecodeData_2 GetStubPrecodeData(TargetPointer stubInstrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
47TargetPointer stubPrecodeDataAddress = stubInstrPointer + precodeMachineDescriptor.StubCodePageSize;
51public static KnownPrecodeType? TryGetKnownPrecodeType(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
92static bool ReadBytesAndCompare(TargetPointer instrAddress, byte[] expectedBytePattern, byte[] bytesToIgnore, Target target)
Contracts\PrecodeStubs_Common.cs (34)
24public static abstract TargetPointer StubPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor);
25public static abstract TargetPointer ThisPtrRetBufPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor);
26public static abstract TargetPointer FixupPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor);
27public static abstract TargetPointer InterpreterPrecode_GetMethodDesc(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor);
29public static abstract KnownPrecodeType? TryGetKnownPrecodeType(TargetPointer instrPointer, Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor);
40public TargetPointer InstrPointer { get; }
43protected ValidPrecode(TargetPointer instrPointer, KnownPrecodeType precodeType)
49internal abstract TargetPointer GetMethodDesc(Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor);
54internal StubPrecode(TargetPointer instrPointer, KnownPrecodeType type = KnownPrecodeType.Stub) : base(instrPointer, type) { }
56internal override TargetPointer GetMethodDesc(Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
64internal InterpreterPrecode(TargetPointer instrPointer) : base(instrPointer, KnownPrecodeType.Interpreter) { }
66internal override TargetPointer GetMethodDesc(Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
74internal PInvokeImportPrecode(TargetPointer instrPointer) : base(instrPointer, KnownPrecodeType.PInvokeImport) { }
79internal FixupPrecode(TargetPointer instrPointer) : base(instrPointer, KnownPrecodeType.Fixup) { }
80internal override TargetPointer GetMethodDesc(Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
88internal ThisPtrRetBufPrecode(TargetPointer instrPointer) : base(instrPointer, KnownPrecodeType.ThisPtrRetBuf) { }
90internal override TargetPointer GetMethodDesc(Target target, Data.PrecodeMachineDescriptor precodeMachineDescriptor)
96private bool IsAlignedInstrPointer(TargetPointer instrPointer) => _target.IsAlignedToPointerSize(instrPointer);
98private TStubPrecodeData GetStubPrecodeData(TargetPointer stubInstrPointer)
100TargetPointer stubPrecodeDataAddress = stubInstrPointer + MachineDescriptor.StubCodePageSize;
104private KnownPrecodeType? TryGetKnownPrecodeType(TargetPointer instrAddress)
109internal TargetPointer CodePointerReadableInstrPointer(TargetCodePointer codePointer)
126TargetPointer instrPointer = CodePointerReadableInstrPointer(entryPoint);
151TargetPointer descAddr = pm.GetPrecodeMachineDescriptor();
156TargetPointer IPrecodeStubs.GetMethodDescFromStubAddress(TargetCodePointer entryPoint)
163TargetPointer IPrecodeStubs.GetPrecodeEntryPointFromInteriorAddress(TargetCodePointer interiorAddress, bool isFixupPrecode)
165TargetPointer instrPointer = CodePointerReadableInstrPointer(interiorAddress);
193TargetPointer instrPointer = CodePointerReadableInstrPointer(entryPoint);
200TargetPointer dataAddr = instrPointer + MachineDescriptor.StubCodePageSize;
202if (precodeData.ByteCodeAddr == TargetPointer.Null)
Contracts\RuntimeTypeSystem_1.cs (202)
20private readonly TargetPointer _freeObjectMethodTablePointer;
21private readonly TargetPointer _continuationMethodTablePointer;
28private readonly Dictionary<TargetPointer, MethodTable> _methodTables = new();
29private readonly Dictionary<TargetPointer, MethodDesc> _methodDescs = new();
46internal TargetPointer ParentMethodTable { get; }
47internal TargetPointer Module { get; }
48internal TargetPointer EEClassOrCanonMT { get; }
49internal TargetPointer PerInstInfo { get; }
50internal TargetPointer AuxiliaryData { get; }
113public TypeKeyByName(string name, string namespaceName, TargetPointer module)
121public TargetPointer Module { get; }
211internal TargetPointer Address { get; init; }
213internal TargetPointer ChunkAddress { get; init; }
215internal MethodDesc(Target target, TargetPointer methodDescPointer, Data.MethodDesc desc, TargetPointer methodDescChunkAddress, Data.MethodDescChunk chunk)
227public TargetPointer MethodTable => _chunk.MethodTable;
306public TargetPointer CodeData => _desc.CodeData;
308public TargetPointer? GCCoverageInfo => _desc.GCCoverageInfo;
320internal TargetPointer GetAddressOfNonVtableSlot() => MethodDescOptionalSlots.GetAddressOfNonVtableSlot(Address, Classification, _desc.Flags, _target);
321internal TargetPointer GetAddressOfNativeCodeSlot() => MethodDescOptionalSlots.GetAddressOfNativeCodeSlot(Address, Classification, _desc.Flags, _target);
322internal TargetPointer GetAddressOfAsyncMethodData() => MethodDescOptionalSlots.GetAddressOfAsyncMethodData(Address, Classification, _desc.Flags, _target);
352public static InstantiatedMethodDesc Create(Target target, TargetPointer address) => new InstantiatedMethodDesc(target, address);
354private readonly TargetPointer _address;
357private InstantiatedMethodDesc(Target target, TargetPointer methodDescPointer)
364TargetPointer perInstInfo = _desc.PerInstInfo;
365if ((perInstInfo == TargetPointer.Null) || (numGenericArgs == 0))
382internal bool HasPerInstInfo => _desc.PerInstInfo != TargetPointer.Null;
389public static DynamicMethodDesc Create(Target target, TargetPointer address) => new DynamicMethodDesc(target, address);
391private readonly TargetPointer _address;
395private DynamicMethodDesc(Target target, TargetPointer methodDescPointer)
400MethodName = _desc.MethodName != TargetPointer.Null
420public static StoredSigMethodDesc Create(Target target, TargetPointer address) => new StoredSigMethodDesc(target, address);
423private StoredSigMethodDesc(Target target, TargetPointer methodDescPointer)
444internal TargetPointer FreeObjectMethodTablePointer => _freeObjectMethodTablePointer;
445internal TargetPointer ContinuationMethodTablePointer => _continuationMethodTablePointer;
449public TypeHandle GetTypeHandle(TargetPointer typeHandlePointer)
471TargetPointer methodTablePointer = typeHandlePointer;
502public TargetPointer GetModule(TypeHandle typeHandle)
514else if (IsGenericVariable(typeHandle, out TargetPointer genericParamModule, out _))
521return TargetPointer.Null;
526return TargetPointer.Null;
529public TargetPointer GetCanonicalMethodTable(TypeHandle typeHandle) => !typeHandle.IsMethodTable() ? TargetPointer.Null : GetClassData(typeHandle).MethodTable;
530public TargetPointer GetParentMethodTable(TypeHandle typeHandle) => !typeHandle.IsMethodTable() ? TargetPointer.Null : _methodTables[typeHandle.Address].ParentMethodTable;
536private TargetPointer GetClassPointer(TypeHandle typeHandle)
544TargetPointer canonMTPtr = MethodTableFlags_1.UntagEEClassOrCanonMT(methodTable.EEClassOrCanonMT);
556TargetPointer clsPtr = GetClassPointer(typeHandle);
573&& _continuationMethodTablePointer != TargetPointer.Null
673public TargetPointer GetFieldDescList(TypeHandle typeHandle) => !typeHandle.IsMethodTable() ? TargetPointer.Null : GetClassData(typeHandle).FieldDescList;
675private TargetPointer GetDynamicStaticsInfo(TypeHandle typeHandle)
683TargetPointer dynamicStaticsInfoSize = _target.GetTypeInfo(DataType.DynamicStaticsInfo).Size!.Value;
684TargetPointer dynamicStaticsInfoAddr = methodTable.AuxiliaryData - dynamicStaticsInfoSize;
691TargetPointer threadStaticsInfoSize = _target.GetTypeInfo(DataType.ThreadStaticsInfo).Size!.Value;
692TargetPointer threadStaticsInfoAddr = methodTable.AuxiliaryData - threadStaticsInfoSize;
697public TargetPointer GetGCThreadStaticsBasePointer(TypeHandle typeHandle, TargetPointer threadPtr)
700return TargetPointer.Null;
701TargetPointer tlsIndexPtr = GetThreadStaticsInfo(typeHandle).GCTlsIndex;
706public TargetPointer GetNonGCThreadStaticsBasePointer(TypeHandle typeHandle, TargetPointer threadPtr)
709return TargetPointer.Null;
710TargetPointer tlsIndexPtr = GetThreadStaticsInfo(typeHandle).NonGCTlsIndex;
715public TargetPointer GetGCStaticsBasePointer(TypeHandle typeHandle)
717TargetPointer dynamicStaticsInfoAddr = GetDynamicStaticsInfo(typeHandle);
718if (dynamicStaticsInfoAddr == TargetPointer.Null)
719return TargetPointer.Null;
724public TargetPointer GetNonGCStaticsBasePointer(TypeHandle typeHandle)
726TargetPointer dynamicStaticsInfoAddr = GetDynamicStaticsInfo(typeHandle);
727if (dynamicStaticsInfoAddr == TargetPointer.Null)
728return TargetPointer.Null;
765public static TypeInstantiation Create(Target target, TargetPointer address) => new TypeInstantiation(target, address);
768private TypeInstantiation(Target target, TargetPointer typePointer)
774TargetPointer perInstInfo = methodTable.PerInstInfo;
775TargetPointer genericsDictInfoAddr = perInstInfo - (ulong)target.PointerSize;
780TargetPointer dictionaryPointer = target.ReadPointer(perInstInfo + (ulong)target.PointerSize * (ulong)(genericsDictInfo.NumDicts - 1));
1013if (typeHandle.Address == TargetPointer.Null)
1028if (typeHandle.Address == TargetPointer.Null)
1029return new TypeHandle(TargetPointer.Null);
1033TargetPointer loaderModule = GetLoaderModule(typeHandle);
1036foreach (TargetPointer ptr in loaderContract.GetAvailableTypeParams(moduleHandle))
1053return new TypeHandle(TargetPointer.Null);
1058TargetPointer coreLib = _target.ReadGlobalPointer(Constants.Globals.CoreLib);
1060TargetPointer typeHandlePtr = _target.ReadPointer(coreLibData.Classes + (ulong)typeCode * (ulong)_target.PointerSize);
1082TargetPointer appDomainPointer = _target.ReadGlobalPointer(Constants.Globals.AppDomain);
1083TargetPointer appDomain = _target.ReadPointer(appDomainPointer);
1101TargetPointer modulePtr = loader.GetModule(moduleHandle);
1146return new TypeHandle(TargetPointer.Null);
1164return new TypeHandle(TargetPointer.Null);
1169TargetPointer typeDefToMethodTable = loader.GetLookupTables(moduleHandle).TypeDefToMethodTable;
1170TargetPointer typeHandlePtr = loader.GetModuleLookupMapElement(typeDefToMethodTable, (uint)token, out _);
1172if (typeHandlePtr == TargetPointer.Null)
1173return new TypeHandle(TargetPointer.Null);
1179public bool IsGenericVariable(TypeHandle typeHandle, out TargetPointer module, out uint token)
1181module = TargetPointer.Null;
1230public TargetPointer GetLoaderModule(TypeHandle typeHandle)
1239else if (IsGenericVariable(typeHandle, out TargetPointer genericParamModule, out _))
1258public static FunctionPointerRetAndArgs Create(Target target, TargetPointer address) => new FunctionPointerRetAndArgs(target, address);
1261private FunctionPointerRetAndArgs(Target target, TargetPointer typePointer)
1266TargetPointer retAndArgs = fnPtrTypeDesc.RetAndArgTypes;
1277public MethodDescHandle GetMethodDescHandle(TargetPointer methodDescPointer)
1280private MethodDescHandle GetMethodDescHandle(TargetPointer methodDescPointer, bool validate)
1288TargetPointer methodDescChunkPointer;
1310public TargetPointer GetMethodTable(MethodDescHandle methodDescHandle) => _methodDescs[methodDescHandle.Address].MethodTable;
1409TargetPointer modulePtr = _methodTables[methodDesc.MethodTable].Module;
1428TargetPointer asyncDataAddr = methodDesc.GetAddressOfAsyncMethodData();
1561public readonly TargetPointer Address;
1562public VtableIndirections(Target target, TargetPointer address)
1568public TargetPointer GetAddressOfSlot(uint slotNum)
1570TargetPointer indirectionPointer = Address + (ulong)(slotNum >> NumPointersPerIndirectionLog2) * (ulong)_target.PointerSize;
1571TargetPointer slotsStart = _target.ReadPointer(indirectionPointer);
1576private VtableIndirections GetVTableIndirections(TargetPointer methodTableAddress)
1582private TargetPointer GetAddressOfSlot(TypeHandle typeHandle, uint slotNum)
1601TargetPointer auxDataPtr = mt.AuxiliaryData;
1603TargetPointer nonVirtualSlotsArray = auxDataPtr + (ulong)auxData.OffsetToNonVirtualSlots;
1628private TargetPointer GetLoaderModule(MethodDesc md)
1635TargetPointer methodDescChunkPointer = md.ChunkAddress;
1636TargetPointer endOfChunk = methodDescChunkPointer + md.SizeOfChunk;
1637TargetPointer ppLoaderModule = endOfChunk - (ulong)_target.PointerSize;
1642TargetPointer mtAddr = GetMethodTable(new MethodDescHandle(md.Address));
1651TargetPointer loaderModuleAddr = GetLoaderModule(md);
1673TargetPointer IRuntimeTypeSystem.GetMethodDescVersioningState(MethodDescHandle methodDesc)
1676TargetPointer codeDataAddress = md.CodeData;
1677if (codeDataAddress == TargetPointer.Null)
1678return TargetPointer.Null;
1708TargetPointer chunkAddr = eeClass.MethodDescChunk;
1709while (chunkAddr != TargetPointer.Null)
1712TargetPointer methodDescPtr = chunk.FirstMethodDesc;
1728IEnumerable<TargetPointer> IRuntimeTypeSystem.GetIntroducedMethodDescs(TypeHandle typeHandle)
1742TargetPointer IRuntimeTypeSystem.GetMethodDescForSlot(TypeHandle typeHandle, ushort slot)
1746return TargetPointer.Null;
1763return TargetPointer.Null;
1767private TargetPointer GetMethodDescForVtableSlot(TypeHandle typeHandle, ushort slot)
1774TargetPointer cannonMTPTr = GetCanonicalMethodTable(typeHandle);
1779TargetPointer slotPtr = GetAddressOfSlot(canonMT, slot);
1784TargetPointer lookupMTPtr = cannonMTPTr;
1785while (lookupMTPtr != TargetPointer.Null)
1798if (lookupMTPtr != TargetPointer.Null)
1801return TargetPointer.Null;
1807private readonly TargetPointer GetMethodDescForEntrypoint(TargetCodePointer pCode)
1813TargetPointer methodDescPtr = executionManager.GetMethodDesc(cbh);
1819TargetPointer methodDescPtr = _target.Contracts.PrecodeStubs.GetMethodDescFromStubAddress(pCode);
1830TargetPointer slotPtr = GetAddressOfSlot(typeHandle, slot);
1837TargetPointer IRuntimeTypeSystem.GetAddressOfNativeCodeSlot(MethodDescHandle methodDesc)
1852TargetPointer ppCode = md.GetAddressOfNativeCodeSlot();
1881TargetPointer pSlot = md.GetAddressOfNonVtableSlot();
1885TargetPointer methodTablePointer = md.MethodTable;
1888TargetPointer addrOfSlot = GetAddressOfSlot(typeHandle, md.Slot);
1892TargetPointer IRuntimeTypeSystem.GetGCStressCodeCopy(MethodDescHandle methodDesc)
1895if (md.GCCoverageInfo is TargetPointer gcCoverageInfoAddr && gcCoverageInfoAddr != TargetPointer.Null)
1900return TargetPointer.Null;
1920TargetPointer codeDataAddress = methodDesc.CodeData;
1921if (codeDataAddress == TargetPointer.Null)
1960public bool SlotIsVtableSlot(TargetPointer methodTablePointer, uint slot)
1965public TargetPointer GetAddressOfMethodTableSlot(TargetPointer methodTablePointer, uint slot)
1972private TargetPointer GetAddressOfMethodTableSlot(TargetPointer methodTablePointer, uint slot)
1976TargetPointer addrOfSlot = GetAddressOfSlot(typeHandle, slot);
1980private bool SlotIsVtableSlot(TargetPointer methodTablePointer, uint slot)
1985TargetPointer IRuntimeTypeSystem.GetMTOfEnclosingClass(TargetPointer fieldDescPointer)
1991uint IRuntimeTypeSystem.GetFieldDescMemberDef(TargetPointer fieldDescPointer)
1997bool IRuntimeTypeSystem.IsFieldDescThreadStatic(TargetPointer fieldDescPointer)
2003private bool IsFieldDescRVA(TargetPointer fieldDescPointer)
2009bool IRuntimeTypeSystem.IsFieldDescStatic(TargetPointer fieldDescPointer)
2015CorElementType IRuntimeTypeSystem.GetFieldDescType(TargetPointer fieldDescPointer)
2022uint IRuntimeTypeSystem.GetFieldDescOffset(TargetPointer fieldDescPointer, FieldDefinition fieldDef)
2032TargetPointer IRuntimeTypeSystem.GetFieldDescByName(TypeHandle typeHandle, string fieldName)
2035return TargetPointer.Null;
2037TargetPointer modulePtr = GetModule(typeHandle);
2038if (modulePtr == TargetPointer.Null)
2039return TargetPointer.Null;
2043return TargetPointer.Null;
2047return TargetPointer.Null;
2055return TargetPointer.Null;
2057TargetPointer fieldDefToDescMap = loader.GetLookupTables(moduleHandle).FieldDefToDesc;
2064TargetPointer fieldDescPtr = loader.GetModuleLookupMapElement(fieldDefToDescMap, fieldDefToken, out _);
2069return TargetPointer.Null;
2072private TargetPointer GetStaticAddressHandle(TargetPointer @base, uint offset, bool isRVA, TargetPointer fieldDescPointer, ModuleHandle moduleHandle)
2081TargetPointer peAssembly = loader.GetPEAssembly(moduleHandle);
2087private TargetPointer GetFieldDescStaticOrThreadStaticAddress(TargetPointer fieldDescPointer, TargetPointer? thread = null, bool unboxValueTypes = true)
2089TargetPointer enclosingMT = ((IRuntimeTypeSystem)this).GetMTOfEnclosingClass(fieldDescPointer);
2091TargetPointer modulePtr = GetModule(ctx);
2095TargetPointer @base;
2119if (@base == TargetPointer.Null)
2120return TargetPointer.Null;
2129TargetPointer handleAddr = GetStaticAddressHandle(@base, offset, isRVA, fieldDescPointer, moduleHandle);
2132TargetPointer objRef = _target.ReadPointer(handleAddr);
2139TargetPointer IRuntimeTypeSystem.GetFieldDescStaticAddress(TargetPointer fieldDescPointer, bool unboxValueTypes) => GetFieldDescStaticOrThreadStaticAddress(fieldDescPointer, null, unboxValueTypes);
2141TargetPointer IRuntimeTypeSystem.GetFieldDescThreadStaticAddress(TargetPointer fieldDescPointer, TargetPointer thread, bool unboxValueTypes) => GetFieldDescStaticOrThreadStaticAddress(fieldDescPointer, thread, unboxValueTypes);
2143void IRuntimeTypeSystem.GetCoreLibFieldDescAndDef(string @namespace, string typeName, string fieldName, out TargetPointer fieldDescAddr, out FieldDefinition fieldDef)
2146TargetPointer systemAssembly = loader.GetSystemAssembly();
Contracts\StackWalk\Context\AMD64\AMD64Unwinder.cs (27)
40TargetPointer establisherFrame;
51TargetPointer controlPC = context.InstructionPointer;
53TargetPointer imageBase = _eman.GetUnwindInfoBaseAddress(cbh);
54TargetPointer unwindInfoAddr = _eman.GetUnwindInfo(cbh);
56if (unwindInfoAddr == TargetPointer.Null)
177TargetPointer nextByte = controlPC;
636TargetPointer controlPC,
637TargetPointer imageBase,
818TargetPointer controlPC,
819TargetPointer imageBase,
820TargetPointer frameBase,
1026TargetPointer returnAddressPtr = context.Rsp;
1027TargetPointer stackAddressPtr = context.Rsp + (3 * 8);
1092private struct UnwindInfoHeader(TargetPointer address, uint header)
1103private TargetPointer _address = address;
1111public TargetPointer GetUnwindCodeAddress(uint index)
1116TargetPointer unwindCodeAddress = _address + sizeof(uint) /* size of header */ + (index * sizeof(ushort) /* size of unwind code */);
1120public TargetPointer GetChainedEntryAddress()
1129TargetPointer chainedEntryAddress = _address + sizeof(uint) /* size of header */ + (index * sizeof(ushort) /* size of unwind code */);
1194private UnwindInfoHeader? GetUnwindInfoHeader(TargetPointer unwindInfoAddress)
1214private Data.RuntimeFunction LookupPrimaryFunctionEntry(Data.RuntimeFunction functionEntry, TargetPointer imageBase)
1241private Data.RuntimeFunction? SameFunction(Data.RuntimeFunction functionEntry, TargetPointer imageBase, TargetPointer controlPC)
1248TargetPointer targetImageBase = _eman.GetUnwindInfoBaseAddress(cbh);
1266private byte ReadByteAt(TargetPointer address) => _target.Read<byte>(address);
1270private static TargetPointer GetRegister(AMD64Context context, byte register)
1273private static void SetRegister(ref AMD64Context context, byte register, TargetPointer value)
Contracts\StackWalk\Context\X86\GCInfoDecoding\GCArgTable.cs (7)
18public GCArgTable(Target target, InfoHdr header, TargetPointer argTablePtr)
23TargetPointer offset = argTablePtr;
95private void GetTransitionsFullyInterruptible(ref TargetPointer offset)
198private void GetTransitionsEbpFrame(ref TargetPointer offset)
206TargetPointer argOffset = offset;
348private void SaveCallTransition(ref TargetPointer offset, uint val, uint curOffs, uint callRegMask, bool callPndTab, uint callPndTabCnt, uint callPndMask, uint lastSkip, ref uint imask)
382private void GetTransitionsNoEbp(ref TargetPointer offset)
Contracts\StackWalk\Context\X86\X86Unwinder.cs (34)
59eman.GetGCInfo(cbh, out TargetPointer gcInfoAddress, out uint gcInfoVersion);
61TargetPointer methodStart = eman.GetStartAddress(cbh);
62TargetPointer funcletStart = eman.GetFuncletStartAddress(cbh);
70TargetPointer epilogBase = methodStart + (gcInfo.RelativeOffset - gcInfo.EpilogOffset);
99private void UnwindEpilog(ref X86Context context, GCInfo gcInfo, TargetPointer epilogBase)
117private void UnwindEbpDoubleAlignFrameEpilog(ref X86Context context, GCInfo gcInfo, TargetPointer epilogBase)
215TargetPointer regValueFromStack = _target.ReadPointer(esp);
244private void UnwindEspFrameEpilog(ref X86Context context, GCInfo gcInfo, TargetPointer epilogBase)
290TargetPointer regValueFromStack = _target.ReadPointer(esp);
310private void UnwindEspFrame(ref X86Context context, GCInfo gcInfo, TargetPointer methodStart)
337TargetPointer regValueFromStack = _target.ReadPointer(esp);
350private void UnwindEspFrameProlog(ref X86Context context, GCInfo gcInfo, TargetPointer methodStart)
368TargetPointer savedRegPtr = esp;
430TargetPointer methodStart,
431TargetPointer funcletStart,
442TargetPointer baseSP;
486TargetPointer pSavedRegs = curEbp;
497TargetPointer regValueFromStack = _target.ReadPointer(pSavedRegs);
513private void UnwindEbpDoubleAlignFrameProlog(ref X86Context context, GCInfo gcInfo, TargetPointer methodStart)
560TargetPointer pSavedRegs = curEBP;
582TargetPointer regValueFromStack = _target.ReadPointer(pSavedRegs);
622private uint SKIP_ARITH_REG(int val, TargetPointer baseAddress, uint offset)
639private uint SKIP_POP_REG(TargetPointer baseAddress, uint offset)
647private uint SKIP_PUSH_REG(TargetPointer baseAddress, uint offset)
654private uint SKIP_LEA_ESP_EBP(int val, TargetPointer baseAddress, uint offset)
673private uint SKIP_MOV_REG_REG(TargetPointer baseAddress, uint offset)
686private uint SKIP_ALLOC_FRAME(int size, TargetPointer baseAddress, uint offset)
821private uint SKIP_LEA_EAX_ESP(int val, TargetPointer baseAddress, uint offset)
840private uint SKIP_HELPER_CALL(TargetPointer baseAddress, uint offset)
862private static void SetRegValue(ref X86Context context, RegMask regMask, TargetPointer value)
928private sbyte ReadSByteAt(TargetPointer address)
933private byte ReadByteAt(TargetPointer address)
938private ushort ReadShortAt(TargetPointer address)
943private int ReadIntAt(TargetPointer address)
Contracts\StackWalk\GC\GcScanner.cs (52)
44_eman.GetGCInfo(cbh, out TargetPointer gcInfoAddr, out uint gcVersion);
49TargetPointer? callerSP = null;
78TargetPointer baseAddr = slot.SpBase switch
88TargetPointer addr = new(baseAddr.Value + (ulong)(long)slot.SpOffset);
99public void GcScanRoots(TargetPointer frameAddress, GcScanContext scanContext)
101if (frameAddress == TargetPointer.Null)
114TargetPointer gcRefMap = sdf.Indirection != TargetPointer.Null
116: TargetPointer.Null;
118if (gcRefMap != TargetPointer.Null)
130TargetPointer gcRefMap = emf.Indirection != TargetPointer.Null
132: TargetPointer.Null;
134if (gcRefMap != TargetPointer.Null)
175TargetPointer transitionBlock,
176TargetPointer gcRefMapBlob,
189TargetPointer slotAddress = AddressFromGCRefMapPos(tb, pos);
215TargetPointer transitionBlock,
223TargetPointer argRegStart = tb.ArgumentRegisters;
232TargetPointer argAddr = new(argRegStart.Value + (uint)_target.PointerSize);
242private TargetPointer FindGCRefMap(TargetPointer indirection)
244if (indirection == TargetPointer.Null)
245return TargetPointer.Null;
247TargetPointer zapModule = _eman.FindReadyToRunModule(indirection);
248if (zapModule == TargetPointer.Null)
249return TargetPointer.Null;
252if (module.ReadyToRunInfo == TargetPointer.Null)
253return TargetPointer.Null;
256if (r2rInfo.ImportSections == TargetPointer.Null || r2rInfo.NumImportSections == 0)
257return TargetPointer.Null;
261return TargetPointer.Null;
264return TargetPointer.Null;
273TargetPointer sectionsBase = r2rInfo.ImportSections;
276TargetPointer sectionAddr = new(sectionsBase.Value + i * ImportSectionSize);
284return TargetPointer.Null;
289return TargetPointer.Null;
291TargetPointer gcRefMapBase = new(imageBase + auxDataRva);
298TargetPointer p = new(gcRefMapBase.Value + lookupOffset);
312return TargetPointer.Null;
320TargetPointer frameAddress,
321TargetPointer transitionBlock,
325TargetPointer methodDescPtr = fmf.MethodDescPtr;
326if (methodDescPtr == TargetPointer.Null)
335TargetPointer methodTablePtr = rts.GetMethodTable(mdh);
337TargetPointer modulePtr = rts.GetModule(typeHandle);
407TargetPointer transitionBlock,
435TargetPointer thisAddr = AddressFromGCRefMapPos(tb, thisPos);
443TargetPointer slotAddress = AddressFromGCRefMapPos(tb, pos);
462private TargetPointer AddressFromGCRefMapPos(Data.TransitionBlock tb, int pos)
472private TargetPointer GetCallerSP(IPlatformAgnosticContext context, ref TargetPointer? cached)
Contracts\StressLog.cs (37)
15StressMsgData GetStressMsgData(Data.StressMsg msg, Func<ulong, TargetPointer> getFormatPointerFromOffset);
38public StressLogData GetStressLogData(TargetPointer stressLogPointer)
52public IEnumerable<ThreadStressLogData> GetThreadStressLogs(TargetPointer Logs)
54TargetPointer currentPointer = Logs;
55while (currentPointer != TargetPointer.Null)
59if (threadStressLog.ChunkListHead == TargetPointer.Null)
66if (threadStressLog.CurrentWriteChunk == TargetPointer.Null)
94private TargetPointer GetFormatPointer(ulong formatOffset)
102TargetPointer? moduleTable;
105if (!target.TryReadGlobalPointer(Constants.Globals.StressLog, out TargetPointer? pStressLog))
126return TargetPointer.Null;
135TargetPointer currentReadChunk = threadLog.CurrentWriteChunk;
136TargetPointer readPointer = threadLog.CurrentPointer;
140TargetPointer currentPointer = threadLog.CurrentPointer;
172TargetPointer p = currentChunkData.Buf;
176while (target.ReadPointer(p) == TargetPointer.Null
182if (target.ReadPointer(p) == TargetPointer.Null)
217public bool IsPointerInStressLog(StressLogData stressLog, TargetPointer pointer)
221foreach (TargetPointer chunk in stressLogMemory.Chunks)
232private sealed class StressLogMemory(IReadOnlyList<TargetPointer> chunks) : Data.IData<StressLogMemory>
234public static StressLogMemory Create(Target target, TargetPointer address)
236List<TargetPointer> chunks = [];
238while (address != TargetPointer.Null)
241TargetPointer chunkPtr = threadLog.ChunkListHead;
243if (chunkPtr == TargetPointer.Null)
255} while (chunkPtr != TargetPointer.Null && chunkPtr != threadLog.ChunkListHead);
263public IReadOnlyList<TargetPointer> Chunks { get; } = chunks;
269public StressMsgData GetStressMsgData(Data.StressMsg msg, Func<ulong, TargetPointer> getFormatPointerFromOffset)
283var args = new TargetPointer[numArgs];
299public StressMsgData GetStressMsgData(Data.StressMsg msg, Func<ulong, TargetPointer> getFormatPointerFromOffset)
319var args = new TargetPointer[numArgs];
340public StressLogData GetStressLogData(TargetPointer stressLog) => traversal.GetStressLogData(stressLog);
341public IEnumerable<ThreadStressLogData> GetThreadStressLogs(TargetPointer Logs) => traversal.GetThreadStressLogs(Logs);
343public bool IsPointerInStressLog(StressLogData stressLog, TargetPointer pointer) => traversal.IsPointerInStressLog(stressLog, pointer);
353public StressLogData GetStressLogData(TargetPointer stressLog) => traversal.GetStressLogData(stressLog);
354public IEnumerable<ThreadStressLogData> GetThreadStressLogs(TargetPointer Logs) => traversal.GetThreadStressLogs(Logs);
356public bool IsPointerInStressLog(StressLogData stressLog, TargetPointer pointer) => traversal.IsPointerInStressLog(stressLog, pointer);
Contracts\SyncBlock_1.cs (34)
17private readonly TargetPointer _syncTableEntries;
25public TargetPointer GetSyncBlock(uint index)
28return ste.SyncBlock?.Address ?? TargetPointer.Null;
31public TargetPointer GetSyncBlockObject(uint index)
34return ste.Object?.Address ?? TargetPointer.Null;
45TargetPointer syncBlockCache = _target.ReadPointer(_target.ReadGlobalPointer(Constants.Globals.SyncBlockCache));
50public bool TryGetLockInfo(TargetPointer syncBlock, out uint owningThreadId, out uint recursion)
59TargetPointer systemAssembly = loader.GetSystemAssembly();
66TargetPointer lockObjPtr = sb.Lock.Object;
68TargetPointer dataAddr = lockObj.Data;
96public uint GetAdditionalThreadCount(TargetPointer syncBlock)
102public TargetPointer GetSyncBlockFromCleanupList()
104TargetPointer syncBlockCache = _target.ReadPointer(_target.ReadGlobalPointer(Constants.Globals.SyncBlockCache));
106TargetPointer cleanupBlockList = cache.CleanupBlockList;
107if (cleanupBlockList == TargetPointer.Null)
108return TargetPointer.Null;
112public TargetPointer GetNextSyncBlock(TargetPointer syncBlock)
115if (sb.LinkNext == TargetPointer.Null)
116return TargetPointer.Null;
120public bool GetBuiltInComData(TargetPointer syncBlock, out TargetPointer rcw, out TargetPointer ccw, out TargetPointer ccf)
122rcw = TargetPointer.Null;
123ccw = TargetPointer.Null;
124ccf = TargetPointer.Null;
132ccw = interopInfo.CCW == 1 ? TargetPointer.Null : interopInfo.CCW;
133ccf = interopInfo.CCF == 1 ? TargetPointer.Null : interopInfo.CCF;
134return rcw != TargetPointer.Null || ccw != TargetPointer.Null || ccf != TargetPointer.Null;
137private uint ReadUintField(TypeHandle enclosingType, string fieldName, IRuntimeTypeSystem rts, MetadataReader mdReader, TargetPointer dataAddr)
139TargetPointer field = rts.GetFieldDescByName(enclosingType, fieldName);
Contracts\Thread_1.cs (58)
12private readonly TargetPointer _threadStoreAddr;
49void IThread.SetDebuggerControlledThreadState(TargetPointer thread, DebuggerControlledThreadState state)
55void IThread.ResetDebuggerControlledThreadState(TargetPointer thread, DebuggerControlledThreadState state)
101ThreadData IThread.GetThreadData(TargetPointer threadPointer)
105TargetPointer address = _target.ReadPointer(thread.ExceptionTracker);
106TargetPointer firstNestedException = TargetPointer.Null;
109if (address != TargetPointer.Null)
114if (exceptionInfo.ThrownObject != TargetPointer.Null)
129TargetPointer lastThrownObjectHandle = GetActiveExceptionPseudoHandle(exceptionInfo, address);
130if (lastThrownObjectHandle == TargetPointer.Null)
141thread.RuntimeThreadLocals?.AllocContext.GCAllocationContext.Pointer ?? TargetPointer.Null,
142thread.RuntimeThreadLocals?.AllocContext.GCAllocationContext.Limit ?? TargetPointer.Null,
153void IThread.GetThreadAllocContext(TargetPointer threadPointer, out long allocBytes, out long allocBytesLoh)
161void IThread.GetStackLimitData(TargetPointer threadPointer, out TargetPointer stackBase, out TargetPointer stackLimit, out TargetPointer frameAddress)
171TargetPointer IThread.IdToThread(uint id)
173TargetPointer idDispenserPtr = _target.ReadGlobalPointer(Constants.Globals.ThinlockThreadIdDispenser);
174TargetPointer idDispenser = _target.ReadPointer(idDispenserPtr);
176TargetPointer threadPtr = TargetPointer.Null;
182TargetPointer IThread.GetThreadLocalStaticBase(TargetPointer threadPointer, TargetPointer tlsIndexPtr)
186TargetPointer threadLocalDataPtr = thread.ThreadLocalDataPtr;
187if (threadLocalDataPtr == TargetPointer.Null)
188return TargetPointer.Null;
192return TargetPointer.Null;
194TargetPointer threadLocalStaticBase = default;
205TargetPointer nonCollectibleArray = threadLocalData.NonCollectibleTlsArrayData;
207TargetPointer arrayStartAddress = nonCollectibleArray + _target.ReadGlobalPointer(Constants.Globals.PtrArrayOffsetToDataArray);
215TargetPointer collectibleArray = threadLocalData.CollectibleTlsArrayData;
223if (threadLocalStaticBase == TargetPointer.Null)
225TargetPointer inFlightData = threadLocalData.InFlightData;
226while (inFlightData != TargetPointer.Null)
240private (Data.Thread thread, Data.ExceptionInfo? exceptionInfo, TargetPointer exceptionTrackerAddr) GetThreadExceptionInfo(TargetPointer threadPointer)
243TargetPointer exceptionTrackerPtr = _target.ReadPointer(thread.ExceptionTracker);
244Data.ExceptionInfo? exceptionInfo = (exceptionTrackerPtr == TargetPointer.Null) ? null : _target.ProcessedData.GetOrAdd<Data.ExceptionInfo>(exceptionTrackerPtr);
254private TargetPointer GetActiveExceptionPseudoHandle(Data.ExceptionInfo? exceptionInfo, TargetPointer exceptionTrackerAddr)
256if (exceptionInfo is null || exceptionInfo.ThrownObject == TargetPointer.Null)
257return TargetPointer.Null;
263TargetPointer IThread.GetCurrentExceptionHandle(TargetPointer threadPointer)
269byte[] IThread.GetWatsonBuckets(TargetPointer threadPointer)
271TargetPointer readFrom;
275TargetPointer thrownObject = exceptionInfo.ThrownObject;
276if (thrownObject != TargetPointer.Null)
279if (exception.WatsonBuckets != TargetPointer.Null)
286if (readFrom == TargetPointer.Null)
301if (readFrom == TargetPointer.Null)
309byte[] IThread.GetContext(TargetPointer threadPointer, ThreadContextSource contextSource, uint contextFlags)
317TargetPointer filterContext = TargetPointer.Null;
322if (filterContext != TargetPointer.Null)
Data\MethodDesc.cs (13)
10static MethodDesc IData<MethodDesc>.Create(Target target, TargetPointer address) => new MethodDesc(target, address);
11public MethodDesc(Target target, TargetPointer address)
33public TargetPointer CodeData { get; init; }
35public TargetPointer? GCCoverageInfo { get; init; }
40static InstantiatedMethodDesc IData<InstantiatedMethodDesc>.Create(Target target, TargetPointer address) => new InstantiatedMethodDesc(target, address);
41public InstantiatedMethodDesc(Target target, TargetPointer address)
50public TargetPointer PerInstInfo { get; init; }
57static DynamicMethodDesc IData<DynamicMethodDesc>.Create(Target target, TargetPointer address) => new DynamicMethodDesc(target, address);
58public DynamicMethodDesc(Target target, TargetPointer address)
65public TargetPointer MethodName { get; init; }
70static StoredSigMethodDesc IData<StoredSigMethodDesc>.Create(Target target, TargetPointer address) => new StoredSigMethodDesc(target, address);
71public StoredSigMethodDesc(Target target, TargetPointer address)
80public TargetPointer Sig { get; init; }
Data\TypeDesc.cs (13)
8static TypeDesc IData<TypeDesc>.Create(Target target, TargetPointer address) => new TypeDesc(target, address);
9public TypeDesc(Target target, TargetPointer address)
20static ParamTypeDesc IData<ParamTypeDesc>.Create(Target target, TargetPointer address) => new ParamTypeDesc(target, address);
21public ParamTypeDesc(Target target, TargetPointer address)
31public TargetPointer TypeArg { get; init; }
36static TypeVarTypeDesc IData<TypeVarTypeDesc>.Create(Target target, TargetPointer address) => new TypeVarTypeDesc(target, address);
37public TypeVarTypeDesc(Target target, TargetPointer address)
49public TargetPointer Module { get; init; }
55static FnPtrTypeDesc IData<FnPtrTypeDesc>.Create(Target target, TargetPointer address) => new FnPtrTypeDesc(target, address);
56public FnPtrTypeDesc(Target target, TargetPointer address)
65RetAndArgTypes = (TargetPointer)(address + (ulong)type.Fields[nameof(RetAndArgTypes)].Offset);
72public TargetPointer RetAndArgTypes { get; init; }
73public TargetPointer LoaderModule { get; init; }
PrintfStressMessageFormatter.cs (17)
19string FormatMethodTable(TargetPointer pointer);
20string FormatMethodDesc(TargetPointer pointer);
21string FormatVTable(TargetPointer pointer);
22string FormatStackTrace(TargetPointer pointer);
29private readonly Dictionary<string, Action<TargetPointer, PaddingFormat, StringBuilder>> _formatActions;
30private readonly Dictionary<string, Action<TargetPointer, PaddingFormat, StringBuilder>> _alternateActions;
77private void FormatPointer(TargetPointer ptr, PaddingFormat paddingFormat, StringBuilder builder)
89private void FormatMethodDesc(TargetPointer ptr, PaddingFormat paddingFormat, StringBuilder builder)
94private void FormatMethodTable(TargetPointer ptr, PaddingFormat paddingFormat, StringBuilder builder)
99private void FormatVTable(TargetPointer ptr, PaddingFormat paddingFormat, StringBuilder builder)
104private void FormatStackTrace(TargetPointer ptr, PaddingFormat paddingFormat, StringBuilder builder)
109private void FormatAsciiString(TargetPointer ptr, PaddingFormat paddingFormat, StringBuilder builder)
121private void FormatUtf16String(TargetPointer ptr, PaddingFormat paddingFormat, StringBuilder builder)
133private static void FormatHexWithPrefix(TargetPointer ptr, PaddingFormat paddingFormat, StringBuilder builder)
152private static string FormatInteger<T>(TargetPointer value, char format, PaddingFormat paddingFormat)
165private static void FormatFloatingPoint(TargetPointer valueAsBits, PaddingFormat paddingFormat, StringBuilder builder)
208Debug.Assert(stressMsg.FormatString != TargetPointer.Null);
RuntimeTypeSystemHelpers\MethodValidation.cs (34)
18TargetPointer GetAddressOfMethodTableSlot(TargetPointer methodTablePointer, uint slot);
19bool SlotIsVtableSlot(TargetPointer methodTablePointer, uint slot);
24public TargetPointer GetAddressOfMethodTableSlot(TargetPointer methodTablePointer, uint slot) => throw new NotImplementedException();
26public bool SlotIsVtableSlot(TargetPointer methodTablePointer, uint slot) => throw new NotImplementedException();
55internal TargetPointer Address { get; init; }
57internal NonValidatedMethodDesc(Target target, TargetPointer methodDescAddr, Data.MethodDesc desc, Data.MethodDescChunk chunk)
72internal TargetPointer MethodTable => _chunk.MethodTable;
79internal TargetPointer CodeData => _desc.CodeData;
84internal TargetPointer GetAddressOfNonVtableSlot() => MethodDescOptionalSlots.GetAddressOfNonVtableSlot(Address, Classification, _desc.Flags, _target);
85internal TargetPointer GetAddressOfNativeCodeSlot() => MethodDescOptionalSlots.GetAddressOfNativeCodeSlot(Address, Classification, _desc.Flags, _target);
91internal TargetPointer GetMethodDescChunkPointerThrowing(TargetPointer methodDescPointer, Data.MethodDesc umd)
105private Data.MethodDescChunk GetMethodDescChunkThrowing(TargetPointer methodDescPointer, Data.MethodDesc md, out TargetPointer methodDescChunkPointer)
111private NonValidatedMethodDesc GetMethodDescThrowing(TargetPointer methodDescPointer, out TargetPointer methodDescChunkPointer)
122if (!umd.TemporaryEntryPointAssigned || umd.CodeData == TargetPointer.Null)
138TargetPointer ppCode = umd.GetAddressOfNativeCodeSlot();
163TargetPointer pSlot = umd.GetAddressOfNonVtableSlot();
168TargetPointer methodTablePointer = umd.MethodTable;
169Debug.Assert(methodTablePointer != TargetPointer.Null);
170TargetPointer addrOfSlot = _methodTableQueries.GetAddressOfMethodTableSlot(methodTablePointer, umd.Slot);
176internal bool ValidateMethodDescPointer(TargetPointer methodDescPointer, [NotNullWhen(true)] out TargetPointer methodDescChunkPointer)
178methodDescChunkPointer = TargetPointer.Null;
182TargetPointer methodTablePointer = umd.MethodTable;
183if (methodTablePointer == TargetPointer.Null
184|| methodTablePointer == TargetPointer.Max64Bit
185|| methodTablePointer == TargetPointer.Max32Bit)
199TargetPointer methodDesc = precode.GetMethodDescFromStubAddress(temporaryEntryPoint);
213TargetPointer methodDesc = executionManager.GetMethodDesc(codeInfo.Value);
224TargetPointer methodDesc = executionManager.NonVirtualEntry2MethodDesc(jitCodeAddr);