Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 0 additions & 23 deletions src/coreclr/debug/daccess/daccess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5528,29 +5528,6 @@ ClrDataAccess::RawGetMethodName(
EX_END_CATCH
}
}
#ifdef FEATURE_DYNAMIC_CODE_COMPILED
else
if (pStubManager == JumpStubStubManager::g_pManager)
{
PCODE pTarget = decodeBackToBackJump(TO_TADDR(address));

HRESULT hr = GetRuntimeNameByAddress(pTarget, flags, bufLen, symbolLen, symbolBuf, NULL);
if (SUCCEEDED(hr))
{
return hr;
}

PCSTR pHelperName = GetJitHelperName(pTarget);
if (pHelperName != NULL)
{
hr = ConvertUtf8(pHelperName, bufLen, symbolLen, symbolBuf);
if (FAILED(hr))
return S_FALSE;

return hr;
}
}
#endif // FEATURE_DYNAMIC_CODE_COMPILED

Comment thread
rcj1 marked this conversation as resolved.
LPCWSTR wszStubManagerName = pStubManager->GetStubManagerName(TO_TADDR(address));
_ASSERTE(wszStubManagerName != NULL);
Expand Down
6 changes: 0 additions & 6 deletions src/coreclr/inc/dacvars.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,8 @@ DEFINE_DACVAR(VMHELPDEF *, dac__hlpDynamicFuncTable, ::hlpDynamicFuncTable)
DEFINE_DACVAR(PTR_StubManager, StubManager__g_pFirstManager, StubManager::g_pFirstManager)
DEFINE_DACVAR(PTR_PrecodeStubManager, PrecodeStubManager__g_pManager, PrecodeStubManager::g_pManager)
DEFINE_DACVAR(PTR_StubLinkStubManager, StubLinkStubManager__g_pManager, StubLinkStubManager::g_pManager)
#ifdef FEATURE_DYNAMIC_CODE_COMPILED
DEFINE_DACVAR(PTR_JumpStubStubManager, JumpStubStubManager__g_pManager, JumpStubStubManager::g_pManager)
#endif // FEATURE_DYNAMIC_CODE_COMPILED
DEFINE_DACVAR(PTR_RangeSectionStubManager, RangeSectionStubManager__g_pManager, RangeSectionStubManager::g_pManager)
DEFINE_DACVAR(PTR_VirtualCallStubManagerManager, VirtualCallStubManagerManager__g_pManager, VirtualCallStubManagerManager::g_pManager)
#ifdef FEATURE_TIERED_COMPILATION
DEFINE_DACVAR(PTR_CallCountingStubManager, CallCountingStubManager__g_pManager, CallCountingStubManager::g_pManager)
#endif // FEATURE_TIERED_COMPILATION

DEFINE_DACVAR(PTR_ThreadStore, ThreadStore__s_pThreadStore, ThreadStore::s_pThreadStore)

Expand Down
6 changes: 0 additions & 6 deletions src/coreclr/inc/vptr_list.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,6 @@ VPTR_CLASS(StubLinkStubManager)
VPTR_CLASS(ThePreStubManager)
VPTR_CLASS(VirtualCallStubManager)
VPTR_CLASS(VirtualCallStubManagerManager)
#ifdef FEATURE_DYNAMIC_CODE_COMPILED
VPTR_CLASS(JumpStubStubManager)
#endif // FEATURE_DYNAMIC_CODE_COMPILED
VPTR_CLASS(RangeSectionStubManager)
VPTR_CLASS(ILStubManager)
VPTR_CLASS(PInvokeStubManager)
Expand All @@ -41,9 +38,6 @@ VPTR_CLASS(InteropDispatchStubManager)
VPTR_CLASS(TailCallStubManager)
#endif
VPTR_CLASS(AsyncThunkStubManager)
#ifdef FEATURE_TIERED_COMPILATION
VPTR_CLASS(CallCountingStubManager)
#endif // FEATURE_TIERED_COMPILATION

VPTR_CLASS(PEImageLayout)
VPTR_CLASS(ConvertedImageLayout)
Expand Down
6 changes: 0 additions & 6 deletions src/coreclr/vm/appdomain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -722,19 +722,13 @@ void SystemDomain::Attach()
#ifndef FEATURE_PORTABLE_ENTRYPOINTS
PrecodeStubManager::Init();
#endif // !FEATURE_PORTABLE_ENTRYPOINTS
#ifdef FEATURE_DYNAMIC_CODE_COMPILED
JumpStubStubManager::Init();
#endif // FEATURE_DYNAMIC_CODE_COMPILED
RangeSectionStubManager::Init();
ILStubManager::Init();
PInvokeStubManager::Init();
InteropDispatchStubManager::Init();
StubLinkStubManager::Init();
TailCallStubManager::Init();
AsyncThunkStubManager::Init();
#ifdef FEATURE_TIERED_COMPILATION
CallCountingStubManager::Init();
#endif

m_SystemDomainCrst.Init(CrstSystemDomain, (CrstFlags)(CRST_REENTRANCY | CRST_TAKEN_DURING_SHUTDOWN));
m_DelayedUnloadCrst.Init(CrstSystemDomainDelayedUnloadList, CRST_UNSAFE_COOPGC);
Expand Down
163 changes: 3 additions & 160 deletions src/coreclr/vm/callcounting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,9 @@ CallCountingManager::CallCountingInfo::CodeVersionHashTraits::Hash(const key_t &
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CallCountingManager::CallCountingStubAllocator

CallCountingManager::CallCountingStubAllocator::CallCountingStubAllocator() : m_heap(nullptr)
CallCountingManager::CallCountingStubAllocator::CallCountingStubAllocator()
: m_heap(nullptr),
m_heapRangeList(STUB_CODE_BLOCK_CALLCOUNTING, true /* collectible */)
{
WRAPPER_NO_CONTRACT;
}
Expand Down Expand Up @@ -355,24 +357,6 @@ NOINLINE InterleavedLoaderHeap *CallCountingManager::CallCountingStubAllocator::

#endif // !DACCESS_COMPILE

bool CallCountingManager::CallCountingStubAllocator::IsStub(TADDR entryPoint)
{
WRAPPER_NO_CONTRACT;
_ASSERTE(entryPoint != (TADDR)NULL);

return !!m_heapRangeList.IsInRange(entryPoint);
}

#ifdef DACCESS_COMPILE

void CallCountingManager::CallCountingStubAllocator::EnumerateHeapRanges(CLRDataEnumMemoryFlags flags)
{
WRAPPER_NO_CONTRACT;
m_heapRangeList.EnumMemoryRegions(flags);
}

#endif // DACCESS_COMPILE

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CallCountingManager::MethodDescForwarderStubHashTraits

Expand Down Expand Up @@ -1161,39 +1145,6 @@ void CallCountingManager::TrimCollections()

#endif // !DACCESS_COMPILE

bool CallCountingManager::IsCallCountingStub(PCODE entryPoint)
{
CONTRACTL
{
NOTHROW;
GC_NOTRIGGER;
MODE_ANY;
SUPPORTS_DAC;
}
CONTRACTL_END;

TADDR entryAddress = PCODEToPINSTR(entryPoint);
_ASSERTE(entryAddress != (PCODE)NULL);

CodeVersionManager::LockHolder codeVersioningLockHolder;

PTR_CallCountingManagerHash callCountingManagers = s_callCountingManagers;
if (callCountingManagers == NULL)
{
return false;
}

for (auto itEnd = callCountingManagers->End(), it = callCountingManagers->Begin(); it != itEnd; ++it)
{
PTR_CallCountingManager callCountingManager = *it;
if (callCountingManager->m_callCountingStubAllocator.IsStub(entryAddress))
{
return true;
}
}
return false;
}

PCODE CallCountingManager::GetTargetForMethod(PCODE callCountingStubEntryPoint)
{
CONTRACTL
Expand All @@ -1205,115 +1156,7 @@ PCODE CallCountingManager::GetTargetForMethod(PCODE callCountingStubEntryPoint)
}
CONTRACTL_END;

_ASSERTE(IsCallCountingStub(callCountingStubEntryPoint));

return PTR_CallCountingStub(PCODEToPINSTR(callCountingStubEntryPoint))->GetTargetForMethod();
}

#ifdef DACCESS_COMPILE

void CallCountingManager::DacEnumerateCallCountingStubHeapRanges(CLRDataEnumMemoryFlags flags)
{
CONTRACTL
{
NOTHROW;
GC_NOTRIGGER;
MODE_ANY;
SUPPORTS_DAC;
}
CONTRACTL_END;

CodeVersionManager::LockHolder codeVersioningLockHolder;

PTR_CallCountingManagerHash callCountingManagers = s_callCountingManagers;
if (callCountingManagers == NULL)
{
return;
}

for (auto itEnd = callCountingManagers->End(), it = callCountingManagers->Begin(); it != itEnd; ++it)
{
PTR_CallCountingManager callCountingManager = *it;
callCountingManager->m_callCountingStubAllocator.EnumerateHeapRanges(flags);
}
}

#endif // DACCESS_COMPILE

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CallCountingManager::CallCountingStubManager

SPTR_IMPL(CallCountingStubManager, CallCountingStubManager, g_pManager);

#ifndef DACCESS_COMPILE

CallCountingStubManager::CallCountingStubManager()
{
WRAPPER_NO_CONTRACT;
}

void CallCountingStubManager::Init()
{
CONTRACTL
{
THROWS;
GC_NOTRIGGER;
MODE_ANY;
}
CONTRACTL_END;

g_pManager = new CallCountingStubManager();
StubManager::AddStubManager(g_pManager);
}

#endif // !DACCESS_COMPILE

#ifdef _DEBUG
const char *CallCountingStubManager::DbgGetName()
{
WRAPPER_NO_CONTRACT;
return "CallCountingStubManager";
}
#endif

#ifdef DACCESS_COMPILE
LPCWSTR CallCountingStubManager::GetStubManagerName(PCODE addr)
{
WRAPPER_NO_CONTRACT;
return W("CallCountingStub");
}
#endif

BOOL CallCountingStubManager::CheckIsStub_Internal(PCODE entryPoint)
{
WRAPPER_NO_CONTRACT;
SUPPORTS_DAC;

return CallCountingManager::IsCallCountingStub(entryPoint);
}

BOOL CallCountingStubManager::DoTraceStub(PCODE callCountingStubEntryPoint, TraceDestination *trace)
{
WRAPPER_NO_CONTRACT;
SUPPORTS_DAC;
_ASSERTE(trace != nullptr);

trace->InitForStub(CallCountingManager::GetTargetForMethod(callCountingStubEntryPoint));
return true;
}

#ifdef DACCESS_COMPILE
void CallCountingStubManager::DoEnumMemoryRegions(CLRDataEnumMemoryFlags flags)
{
WRAPPER_NO_CONTRACT;
SUPPORTS_DAC;

DAC_ENUM_VTHIS();
EMEM_OUT(("MEM: %p CallCountingStubManager\n", dac_cast<TADDR>(this)));
CallCountingManager::DacEnumerateCallCountingStubHeapRanges(flags);
}
#endif

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#endif // FEATURE_TIERED_COMPILATION
58 changes: 2 additions & 56 deletions src/coreclr/vm/callcounting.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#pragma once

#include "codeversion.h"
#include "loaderallocator.hpp"

Comment thread
rcj1 marked this conversation as resolved.
#ifdef FEATURE_TIERED_COMPILATION

Expand Down Expand Up @@ -256,7 +257,7 @@ class CallCountingManager
// LoaderHeap cannot be constructed when DACCESS_COMPILE is defined (at the time, its destructor was private). Working
// around that by controlling creation/destruction using a pointer.
InterleavedLoaderHeap *m_heap;
RangeList m_heapRangeList;
Comment thread
rcj1 marked this conversation as resolved.
CodeRangeMapRangeList m_heapRangeList;

public:
CallCountingStubAllocator();
Expand All @@ -271,12 +272,6 @@ class CallCountingManager
#endif // !DACCESS_COMPILE

public:
bool IsStub(TADDR entryPoint);

#ifdef DACCESS_COMPILE
void EnumerateHeapRanges(CLRDataEnumMemoryFlags flags);
#endif

DISABLE_COPY(CallCountingStubAllocator);
};

Expand Down Expand Up @@ -371,11 +366,7 @@ class CallCountingManager
#endif // !DACCESS_COMPILE

public:
static bool IsCallCountingStub(PCODE entryPoint);
static PCODE GetTargetForMethod(PCODE callCountingStubEntryPoint);
#ifdef DACCESS_COMPILE
static void DacEnumerateCallCountingStubHeapRanges(CLRDataEnumMemoryFlags flags);
#endif

DISABLE_COPY(CallCountingManager);
};
Expand Down Expand Up @@ -409,51 +400,6 @@ inline PCODE CallCountingStub::GetTargetForMethod() const
return GetData()->TargetForMethod;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CallCountingManager::CallCountingStubManager

class CallCountingStubManager;
typedef VPTR(CallCountingStubManager) PTR_CallCountingStubManager;

class CallCountingStubManager : public StubManager
{
VPTR_VTABLE_CLASS(CallCountingStubManager, StubManager);

private:
SPTR_DECL(CallCountingStubManager, g_pManager);

#ifndef DACCESS_COMPILE
public:
CallCountingStubManager();

public:
static void Init();
#endif

#ifdef _DEBUG
public:
virtual const char *DbgGetName(); // override
#endif

#ifdef DACCESS_COMPILE
public:
virtual LPCWSTR GetStubManagerName(PCODE addr);
#endif

protected:
virtual BOOL CheckIsStub_Internal(PCODE entryPoint); // override
virtual BOOL DoTraceStub(PCODE callCountingStubEntryPoint, TraceDestination *trace); // override

#ifdef DACCESS_COMPILE
protected:
virtual void DoEnumMemoryRegions(CLRDataEnumMemoryFlags flags); // override
#endif

DISABLE_COPY(CallCountingStubManager);
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#undef DISABLE_COPY

#endif // FEATURE_TIERED_COMPILATION
9 changes: 8 additions & 1 deletion src/coreclr/vm/codeman.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,16 @@ enum StubCodeBlockKind : int
STUB_CODE_BLOCK_VSD_LOOKUP_STUB = 8,
STUB_CODE_BLOCK_VSD_VTABLE_STUB = 9,
#endif // FEATURE_VIRTUAL_STUB_DISPATCH
#ifdef FEATURE_TIERED_COMPILATION
STUB_CODE_BLOCK_CALLCOUNTING = 0xA,
#endif // FEATURE_TIERED_COMPILATION
// Last valid value. Note that the definition is duplicated in debug\daccess\fntableaccess.cpp
STUB_CODE_BLOCK_LAST = 0xF,
// Placeholders returned by code:GetStubCodeBlockKind
STUB_CODE_BLOCK_NOCODE = 0x10,
STUB_CODE_BLOCK_MANAGED = 0x11,
STUB_CODE_BLOCK_STUBLINK = 0x12,
// Placeholdes used by ReadyToRun images
// Placeholder used by ReadyToRun images
STUB_CODE_BLOCK_METHOD_CALL_THUNK = 0x13,
};

Expand All @@ -129,6 +132,10 @@ inline const char *GetStubCodeBlockKindString(StubCodeBlockKind kind)
return "Managed";
case STUB_CODE_BLOCK_METHOD_CALL_THUNK:
return "MethodCallThunk";
#ifdef FEATURE_TIERED_COMPILATION
case STUB_CODE_BLOCK_CALLCOUNTING:
return "CallCountingStub";
#endif
case STUB_CODE_BLOCK_DYNAMICHELPER:
return "MethodCallThunk";
case STUB_CODE_BLOCK_FIXUPPRECODE:
Expand Down
Loading
Loading