File: Contracts\GCInfo\IGCInfoDecoder.cs
Web Access
Project: src\runtime\src\native\managed\cdac\Microsoft.Diagnostics.DataContractReader.Contracts\Microsoft.Diagnostics.DataContractReader.Contracts.csproj (Microsoft.Diagnostics.DataContractReader.Contracts)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Collections.Generic;
using Microsoft.Diagnostics.DataContractReader.Contracts;

namespace Microsoft.Diagnostics.DataContractReader.Contracts.GCInfoHelpers;

internal interface IGCInfoDecoder : IGCInfoHandle
{
    GCInfoHeader GetHeader();

    uint GetCodeLength();

    // Default 0; mirrors native EECodeManager::GetStackParameterSize, which only
    // returns non-zero on x86 (where managed code uses __stdcall, callee-popped args).
    uint GetCalleePoppedArgumentsSize() => 0;

    IReadOnlyList<InterruptibleRange> GetInterruptibleRanges();
    IReadOnlyList<uint> GetSafePoints();
    IReadOnlyList<GCSlotLifetime> GetSlotLifetimes();

    IReadOnlyList<LiveSlot> EnumerateLiveSlots(uint instructionOffset, GcSlotEnumerationOptions options);
    bool IsGcSafe(uint instructionOffset);
    bool TryGetGenericContextStorage(GenericContextLoc contextKind, uint instructionOffset, out GenericContextStorage storage);
    TargetPointer GetAmbientSP(uint codeOffset, TargetPointer fp, TargetPointer sp);
}