summaryrefslogtreecommitdiff
path: root/src/vm/prestub.cpp
diff options
context:
space:
mode:
authorgbalykov <g.balykov@samsung.com>2017-06-03 06:31:28 +0300
committerJan Kotas <jkotas@microsoft.com>2017-06-02 20:31:28 -0700
commitfd3668c7c9b9f5d64b5e6d1edf8c55a307cd3c2d (patch)
tree4dfd969b9979a2e4794e0cff4c46a378343b993e /src/vm/prestub.cpp
parentb47b138d595267315008885e6ac7e2f4322cc5a9 (diff)
downloadcoreclr-fd3668c7c9b9f5d64b5e6d1edf8c55a307cd3c2d.tar.gz
coreclr-fd3668c7c9b9f5d64b5e6d1edf8c55a307cd3c2d.tar.bz2
coreclr-fd3668c7c9b9f5d64b5e6d1edf8c55a307cd3c2d.zip
Remove relocations from SECTION_MethodDesc for ngened images for fields accessed from jit code for Linux ARM (#11963)
Diffstat (limited to 'src/vm/prestub.cpp')
-rw-r--r--src/vm/prestub.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/vm/prestub.cpp b/src/vm/prestub.cpp
index 921d376978..1ebcdc4b4d 100644
--- a/src/vm/prestub.cpp
+++ b/src/vm/prestub.cpp
@@ -2383,6 +2383,9 @@ void ProcessDynamicDictionaryLookup(TransitionBlock * pTransitionBlock
pResult->testForFixup = pResult->testForNull = false;
pResult->signature = NULL;
+
+ pResult->indirectFirstOffset = 0;
+
pResult->indirections = CORINFO_USEHELPER;
DWORD numGenericArgs = 0;
@@ -2433,6 +2436,11 @@ void ProcessDynamicDictionaryLookup(TransitionBlock * pTransitionBlock
pResult->indirections = 2;
pResult->offsets[0] = offsetof(InstantiatedMethodDesc, m_pPerInstInfo);
+ if (decltype(InstantiatedMethodDesc::m_pPerInstInfo)::isRelative)
+ {
+ pResult->indirectFirstOffset = 1;
+ }
+
ULONG data;
IfFailThrow(sigptr.GetData(&data));
pResult->offsets[1] = sizeof(TypeHandle) * data;
@@ -2472,6 +2480,11 @@ void ProcessDynamicDictionaryLookup(TransitionBlock * pTransitionBlock
// Indirect through dictionary table pointer in InstantiatedMethodDesc
pResult->offsets[0] = offsetof(InstantiatedMethodDesc, m_pPerInstInfo);
+ if (decltype(InstantiatedMethodDesc::m_pPerInstInfo)::isRelative)
+ {
+ pResult->indirectFirstOffset = 1;
+ }
+
*pDictionaryIndexAndSlot |= dictionarySlot;
}
}