diff options
Diffstat (limited to 'src/vm/codeversion.cpp')
-rw-r--r-- | src/vm/codeversion.cpp | 73 |
1 files changed, 70 insertions, 3 deletions
diff --git a/src/vm/codeversion.cpp b/src/vm/codeversion.cpp index c90189be1e..eb5f15f245 100644 --- a/src/vm/codeversion.cpp +++ b/src/vm/codeversion.cpp @@ -25,17 +25,29 @@ // versioning information // +NativeCodeVersion::NativeCodeVersion() : m_pMethodDesc(PTR_NULL) {}; NativeCodeVersion::NativeCodeVersion(const NativeCodeVersion & rhs) : m_pMethodDesc(rhs.m_pMethodDesc) {} NativeCodeVersion::NativeCodeVersion(PTR_MethodDesc pMethod) : m_pMethodDesc(pMethod) {} BOOL NativeCodeVersion::IsNull() const { return m_pMethodDesc == NULL; } PTR_MethodDesc NativeCodeVersion::GetMethodDesc() const { return m_pMethodDesc; } -PCODE NativeCodeVersion::GetNativeCode() const { return m_pMethodDesc->GetNativeCode(); } NativeCodeVersionId NativeCodeVersion::GetVersionId() const { return 0; } -// ReJITID NativeCodeVersion::GetILCodeVersionId() const; { return 0; } -// ILCodeVersion NativeCodeVersion::GetILCodeVersion() const { return ILCodeVersion(m_pMethodDesc); } +BOOL NativeCodeVersion::IsDefaultVersion() const { return TRUE; } +PCODE NativeCodeVersion::GetNativeCode() const { return m_pMethodDesc->GetNativeCode(); } + #ifndef DACCESS_COMPILE BOOL NativeCodeVersion::SetNativeCodeInterlocked(PCODE pCode, PCODE pExpected) { return m_pMethodDesc->SetNativeCodeInterlocked(pCode, pExpected); } #endif + +#ifdef HAVE_GCCOVER +PTR_GCCoverageInfo NativeCodeVersion::GetGCCoverageInfo() const { return GetMethodDesc()->m_GcCover; } +void NativeCodeVersion::SetGCCoverageInfo(PTR_GCCoverageInfo gcCover) +{ + MethodDesc *pMD = GetMethodDesc(); + _ASSERTE(gcCover == NULL || pMD->m_GcCover == NULL); + *EnsureWritablePages(&pMD->m_GcCover) = gcCover; +} +#endif + bool NativeCodeVersion::operator==(const NativeCodeVersion & rhs) const { return m_pMethodDesc == rhs.m_pMethodDesc; } bool NativeCodeVersion::operator!=(const NativeCodeVersion & rhs) const { return !operator==(rhs); } @@ -64,6 +76,9 @@ NativeCodeVersionNode::NativeCodeVersionNode( #ifdef FEATURE_TIERED_COMPILATION m_optTier(optimizationTier), #endif +#ifdef HAVE_GCCOVER + m_gcCover(PTR_NULL), +#endif m_flags(0) {} #endif @@ -166,6 +181,24 @@ void NativeCodeVersionNode::SetOptimizationTier(NativeCodeVersion::OptimizationT #endif // FEATURE_TIERED_COMPILATION +#ifdef HAVE_GCCOVER + +PTR_GCCoverageInfo NativeCodeVersionNode::GetGCCoverageInfo() const +{ + LIMITED_METHOD_CONTRACT; + return m_gcCover; +} + +void NativeCodeVersionNode::SetGCCoverageInfo(PTR_GCCoverageInfo gcCover) +{ + LIMITED_METHOD_CONTRACT; + _ASSERTE(gcCover == NULL || m_gcCover == NULL); + + m_gcCover = gcCover; +} + +#endif // HAVE_GCCOVER + NativeCodeVersion::NativeCodeVersion() : m_storageKind(StorageKind::Unknown) {} @@ -371,6 +404,40 @@ void NativeCodeVersion::SetOptimizationTier(OptimizationTier tier) #endif +#ifdef HAVE_GCCOVER + +PTR_GCCoverageInfo NativeCodeVersion::GetGCCoverageInfo() const +{ + WRAPPER_NO_CONTRACT; + + if (m_storageKind == StorageKind::Explicit) + { + return AsNode()->GetGCCoverageInfo(); + } + else + { + return GetMethodDesc()->m_GcCover; + } +} + +void NativeCodeVersion::SetGCCoverageInfo(PTR_GCCoverageInfo gcCover) +{ + WRAPPER_NO_CONTRACT; + + if (m_storageKind == StorageKind::Explicit) + { + AsNode()->SetGCCoverageInfo(gcCover); + } + else + { + MethodDesc *pMD = GetMethodDesc(); + _ASSERTE(gcCover == NULL || pMD->m_GcCover == NULL); + *EnsureWritablePages(&pMD->m_GcCover) = gcCover; + } +} + +#endif // HAVE_GCCOVER + PTR_NativeCodeVersionNode NativeCodeVersion::AsNode() const { LIMITED_METHOD_DAC_CONTRACT; |