diff options
author | Jan Kotas <jkotas@microsoft.com> | 2018-12-10 07:52:15 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-10 07:52:15 -0800 |
commit | 32d8dfb65f2403c1cb628495ee944a9f35a0eb3a (patch) | |
tree | 5679964c2d10f3702a0a14bf64cce64e391d6da6 /src/zap | |
parent | c1c74f6ff2a12bd33240ea514dca76fc100125b9 (diff) | |
download | coreclr-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.cpp | 19 |
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")); |