summaryrefslogtreecommitdiff
path: root/src/zap
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2018-12-10 07:52:15 -0800
committerGitHub <noreply@github.com>2018-12-10 07:52:15 -0800
commit32d8dfb65f2403c1cb628495ee944a9f35a0eb3a (patch)
tree5679964c2d10f3702a0a14bf64cce64e391d6da6 /src/zap
parentc1c74f6ff2a12bd33240ea514dca76fc100125b9 (diff)
downloadcoreclr-32d8dfb65f2403c1cb628495ee944a9f35a0eb3a.tar.gz
coreclr-32d8dfb65f2403c1cb628495ee944a9f35a0eb3a.tar.bz2
coreclr-32d8dfb65f2403c1cb628495ee944a9f35a0eb3a.zip
Add support for RVA fields to crossgen/R2R (#21463)
* Add support for RVA fields to crossgen/R2R RVA fields are became more common with pre-inititialized ReadOnlySpan<byte>. Fix crossgen to deal with them for R2R. * Fix tests, map new JIT helper for R2R
Diffstat (limited to 'src/zap')
-rw-r--r--src/zap/zapinfo.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/zap/zapinfo.cpp b/src/zap/zapinfo.cpp
index 7c0200b9c1..a37531c735 100644
--- a/src/zap/zapinfo.cpp
+++ b/src/zap/zapinfo.cpp
@@ -1715,6 +1715,9 @@ ReadyToRunHelper MapReadyToRunHelper(CorInfoHelpFunc func, bool * pfOptimizeForS
case corInfoHelpFunc: flags return readyToRunHelper;
#include "readytorunhelpers.h"
+ case CORINFO_HELP_TYPEHANDLE_TO_RUNTIMETYPEHANDLE:
+ return READYTORUN_HELPER_GetRuntimeTypeHandle;
+
case CORINFO_HELP_STRCNS_CURRENT_MODULE:
*pfOptimizeForSize = true;
return READYTORUN_HELPER_GetString;
@@ -2319,6 +2322,13 @@ unsigned ZapInfo::getClassDomainID (CORINFO_CLASS_HANDLE cls, void **ppIndirecti
void * ZapInfo::getFieldAddress(CORINFO_FIELD_HANDLE field, void **ppIndirection)
{
+ if (IsReadyToRunCompilation())
+ {
+ void * pAddress = m_pEEJitInfo->getFieldAddress(field, ppIndirection);
+
+ return m_pImage->m_pILMetaData->GetRVAField(pAddress);
+ }
+
_ASSERTE(ppIndirection != NULL);
CORINFO_CLASS_HANDLE hClass = m_pEEJitInfo->getFieldClass(field);
@@ -3005,8 +3015,15 @@ void ZapInfo::getFieldInfo (CORINFO_RESOLVED_TOKEN * pResolvedToken,
}
break;
- case CORINFO_FIELD_STATIC_ADDRESS: // field at given address
case CORINFO_FIELD_STATIC_RVA_ADDRESS: // RVA field at given address
+ if (m_pEEJitInfo->getClassModule(pResolvedToken->hClass) != m_pImage->m_hModule)
+ {
+ m_zapper->Warning(W("ReadyToRun: Cross-module RVA static fields not supported\n"));
+ ThrowHR(E_NOTIMPL);
+ }
+ break;
+
+ case CORINFO_FIELD_STATIC_ADDRESS: // field at given address
case CORINFO_FIELD_STATIC_ADDR_HELPER: // static field accessed using address-of helper (argument is FieldDesc *)
case CORINFO_FIELD_STATIC_TLS:
m_zapper->Warning(W("ReadyToRun: Rare kinds of static fields not supported\n"));