summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2019-05-22 23:42:31 -0700
committerGitHub <noreply@github.com>2019-05-22 23:42:31 -0700
commit451fd23fa2179fa22c831bcf84edd547bfba5cd9 (patch)
tree8d590cd895cce7d5308cf94e92a5b0e8f36d303e
parent3eae9c02a9a5eac95bf2900aae3c9e62176bf3c9 (diff)
downloadcoreclr-451fd23fa2179fa22c831bcf84edd547bfba5cd9.tar.gz
coreclr-451fd23fa2179fa22c831bcf84edd547bfba5cd9.tar.bz2
coreclr-451fd23fa2179fa22c831bcf84edd547bfba5cd9.zip
Stop compiling fragile NGen support into the runtime (#24625)
-rw-r--r--clrdefinitions.cmake1
-rw-r--r--crossgen.cmake1
-rw-r--r--src/inc/dacvars.h2
-rw-r--r--src/inc/jithelpers.h4
-rw-r--r--src/utilcode/pedecoder.cpp4
-rw-r--r--src/vm/amd64/ExternalMethodFixupThunk.asm5
-rw-r--r--src/vm/amd64/cgenamd64.cpp2
-rw-r--r--src/vm/amd64/externalmethodfixupthunk.S2
-rw-r--r--src/vm/appdomain.cpp7
-rw-r--r--src/vm/appdomain.hpp2
-rw-r--r--src/vm/arm/asmhelpers.S4
-rw-r--r--src/vm/arm/asmhelpers.asm11
-rw-r--r--src/vm/arm/cgencpu.h4
-rw-r--r--src/vm/arm64/asmhelpers.S4
-rw-r--r--src/vm/arm64/asmhelpers.asm7
-rw-r--r--src/vm/ceeload.cpp18
-rw-r--r--src/vm/ceeload.h9
-rw-r--r--src/vm/dataimage.h18
-rw-r--r--src/vm/domainfile.cpp13
-rw-r--r--src/vm/fieldmarshaler.h3
-rw-r--r--src/vm/i386/asmhelpers.S4
-rw-r--r--src/vm/i386/asmhelpers.asm7
-rw-r--r--src/vm/i386/cgencpu.h2
-rw-r--r--src/vm/i386/cgenx86.cpp3
-rw-r--r--src/vm/i386/stublinkerx86.cpp4
-rw-r--r--src/vm/i386/stublinkerx86.h4
-rw-r--r--src/vm/ibclogger.cpp58
-rw-r--r--src/vm/ibclogger.h38
-rw-r--r--src/vm/method.cpp17
-rw-r--r--src/vm/methodtable.cpp11
-rw-r--r--src/vm/peimagelayout.cpp4
-rw-r--r--src/vm/peimagelayout.h2
-rw-r--r--src/vm/perfmap.cpp23
-rw-r--r--src/vm/siginfo.cpp2
-rw-r--r--src/vm/stubmgr.cpp4
-rw-r--r--src/vm/threads.cpp4
-rw-r--r--src/vm/threads.h4
-rw-r--r--src/vm/virtualcallstub.h2
38 files changed, 168 insertions, 146 deletions
diff --git a/clrdefinitions.cmake b/clrdefinitions.cmake
index b4ccfec6f6..56088ddf3f 100644
--- a/clrdefinitions.cmake
+++ b/clrdefinitions.cmake
@@ -175,7 +175,6 @@ endif(CLR_CMAKE_PLATFORM_UNIX)
if(CLR_CMAKE_PLATFORM_LINUX OR CLR_CMAKE_PLATFORM_FREEBSD)
add_definitions(-DFEATURE_PERFMAP)
endif(CLR_CMAKE_PLATFORM_LINUX OR CLR_CMAKE_PLATFORM_FREEBSD)
-add_definitions(-DFEATURE_PREJIT)
if(NOT CLR_CMAKE_PLATFORM_UNIX)
add_definitions(-DFEATURE_PROFAPI_ATTACH_DETACH)
diff --git a/crossgen.cmake b/crossgen.cmake
index 7bc64a2706..1bf84c8a36 100644
--- a/crossgen.cmake
+++ b/crossgen.cmake
@@ -1,6 +1,7 @@
# Contains the crossgen build specific definitions. Included by the leaf crossgen cmake files.
add_definitions(
+ -DFEATURE_PREJIT
-DCROSSGEN_COMPILE
-DCROSS_COMPILE
-DFEATURE_NATIVE_IMAGE_GENERATION
diff --git a/src/inc/dacvars.h b/src/inc/dacvars.h
index 520b501dac..78b1c10a4f 100644
--- a/src/inc/dacvars.h
+++ b/src/inc/dacvars.h
@@ -121,9 +121,11 @@ DEFINE_DACVAR(ULONG, PTR_GcDacVars, dac__g_gcDacGlobals, g_gcDacGlobals)
DEFINE_DACVAR(ULONG, PTR_AppDomain, AppDomain__m_pTheAppDomain, AppDomain::m_pTheAppDomain)
DEFINE_DACVAR(ULONG, PTR_SystemDomain, SystemDomain__m_pSystemDomain, SystemDomain::m_pSystemDomain)
+#ifdef FEATURE_PREJIT
DEFINE_DACVAR(ULONG, BOOL, SystemDomain__s_fForceDebug, SystemDomain::s_fForceDebug)
DEFINE_DACVAR(ULONG, BOOL, SystemDomain__s_fForceProfiling, SystemDomain::s_fForceProfiling)
DEFINE_DACVAR(ULONG, BOOL, SystemDomain__s_fForceInstrument, SystemDomain::s_fForceInstrument)
+#endif
#ifdef FEATURE_INTEROP_DEBUGGING
DEFINE_DACVAR(ULONG, DWORD, dac__g_debuggerWordTLSIndex, g_debuggerWordTLSIndex)
diff --git a/src/inc/jithelpers.h b/src/inc/jithelpers.h
index d7a82286ca..d7d501f382 100644
--- a/src/inc/jithelpers.h
+++ b/src/inc/jithelpers.h
@@ -304,7 +304,11 @@
JITHELPER(CORINFO_HELP_EE_VSD_FIXUP, NULL, CORINFO_HELP_SIG_NO_ALIGN_STUB)
#endif
JITHELPER(CORINFO_HELP_EE_EXTERNAL_FIXUP, ExternalMethodFixupStub, CORINFO_HELP_SIG_NO_ALIGN_STUB)
+#ifdef FEATURE_PREJIT
JITHELPER(CORINFO_HELP_EE_VTABLE_FIXUP, VirtualMethodFixupStub, CORINFO_HELP_SIG_NO_ALIGN_STUB)
+#else
+ JITHELPER(CORINFO_HELP_EE_VTABLE_FIXUP, NULL, CORINFO_HELP_SIG_NO_ALIGN_STUB)
+#endif
JITHELPER(CORINFO_HELP_EE_REMOTING_THUNK, NULL, CORINFO_HELP_SIG_UNDEF)
diff --git a/src/utilcode/pedecoder.cpp b/src/utilcode/pedecoder.cpp
index 242768e8b7..a3e3b7367f 100644
--- a/src/utilcode/pedecoder.cpp
+++ b/src/utilcode/pedecoder.cpp
@@ -34,10 +34,6 @@ CHECK PEDecoder::CheckFormat() const
{
CHECK(CheckCorHeader());
-#if !defined(FEATURE_PREJIT)
- CHECK(IsILOnly());
-#endif
-
if (IsILOnly() && !HasReadyToRunHeader())
CHECK(CheckILOnly());
diff --git a/src/vm/amd64/ExternalMethodFixupThunk.asm b/src/vm/amd64/ExternalMethodFixupThunk.asm
index 6c43762fd9..677f2e45db 100644
--- a/src/vm/amd64/ExternalMethodFixupThunk.asm
+++ b/src/vm/amd64/ExternalMethodFixupThunk.asm
@@ -7,7 +7,10 @@ include AsmConstants.inc
extern ExternalMethodFixupWorker:proc
extern ProcessCLRException:proc
+
+ifdef FEATURE_PREJIT
extern VirtualMethodFixupWorker:proc
+endif
ifdef FEATURE_READYTORUN
extern DynamicHelperWorker:proc
@@ -87,6 +90,7 @@ DYNAMICHELPER <DynamicHelperFrameFlags_ObjectArg OR DynamicHelperFrameFlags_Obje
endif ; FEATURE_READYTORUN
+ifdef FEATURE_PREJIT
;============================================================================================
;; EXTERN_C VOID __stdcall VirtualMethodFixupStub()
@@ -103,5 +107,6 @@ PATCH_LABEL VirtualMethodFixupPatchLabel
TAILJMP_RAX
NESTED_END VirtualMethodFixupStub, _TEXT
+endif ; FEATURE_PREJIT
end
diff --git a/src/vm/amd64/cgenamd64.cpp b/src/vm/amd64/cgenamd64.cpp
index e0e6a47cdd..2a93fa4413 100644
--- a/src/vm/amd64/cgenamd64.cpp
+++ b/src/vm/amd64/cgenamd64.cpp
@@ -820,6 +820,7 @@ DWORD GetOffsetAtEndOfFunction(ULONGLONG uImageBase,
return offsetInFunc;
}
+#ifdef FEATURE_PREJIT
//==========================================================================================
// In NGen image, virtual slots inherited from cross-module dependencies point to jump thunks.
// These jump thunk initially point to VirtualMethodFixupStub which transfers control here.
@@ -913,6 +914,7 @@ EXTERN_C PCODE VirtualMethodFixupWorker(TransitionBlock * pTransitionBlock, CORC
// Ready to return
return pCode;
}
+#endif // FEATURE_PREJIT
#ifdef FEATURE_READYTORUN
diff --git a/src/vm/amd64/externalmethodfixupthunk.S b/src/vm/amd64/externalmethodfixupthunk.S
index b5c3780671..c092182fa1 100644
--- a/src/vm/amd64/externalmethodfixupthunk.S
+++ b/src/vm/amd64/externalmethodfixupthunk.S
@@ -80,6 +80,7 @@ DYNAMICHELPER (DynamicHelperFrameFlags_ObjectArg | DynamicHelperFrameFlags_Objec
#endif // FEATURE_READYTORUN
+#ifdef FEATURE_PREJIT
//============================================================================================
// EXTERN_C VOID __stdcall VirtualMethodFixupStub()
@@ -96,3 +97,4 @@ PATCH_LABEL VirtualMethodFixupPatchLabel
TAILJMP_RAX
NESTED_END VirtualMethodFixupStub, _TEXT
+#endif // FEATURE_PREJIT
diff --git a/src/vm/appdomain.cpp b/src/vm/appdomain.cpp
index f567e7818f..4e98706226 100644
--- a/src/vm/appdomain.cpp
+++ b/src/vm/appdomain.cpp
@@ -98,9 +98,11 @@ static const WCHAR OTHER_DOMAIN_FRIENDLY_NAME_PREFIX[] = W("Domain");
SPTR_IMPL(AppDomain, AppDomain, m_pTheAppDomain);
SPTR_IMPL(SystemDomain, SystemDomain, m_pSystemDomain);
+#ifdef FEATURE_PREJIT
SVAL_IMPL(BOOL, SystemDomain, s_fForceDebug);
SVAL_IMPL(BOOL, SystemDomain, s_fForceProfiling);
SVAL_IMPL(BOOL, SystemDomain, s_fForceInstrument);
+#endif
#ifndef DACCESS_COMPILE
@@ -1587,7 +1589,7 @@ void SystemDomain::operator delete(void *pMem)
// Do nothing - new() was in-place
}
-
+#ifdef FEATURE_PREJIT
void SystemDomain::SetCompilationOverrides(BOOL fForceDebug,
BOOL fForceProfiling,
BOOL fForceInstrument)
@@ -1597,9 +1599,11 @@ void SystemDomain::SetCompilationOverrides(BOOL fForceDebug,
s_fForceProfiling = fForceProfiling;
s_fForceInstrument = fForceInstrument;
}
+#endif
#endif //!DACCESS_COMPILE
+#ifdef FEATURE_PREJIT
void SystemDomain::GetCompilationOverrides(BOOL * fForceDebug,
BOOL * fForceProfiling,
BOOL * fForceInstrument)
@@ -1609,6 +1613,7 @@ void SystemDomain::GetCompilationOverrides(BOOL * fForceDebug,
*fForceProfiling = s_fForceProfiling;
*fForceInstrument = s_fForceInstrument;
}
+#endif
#ifndef DACCESS_COMPILE
diff --git a/src/vm/appdomain.hpp b/src/vm/appdomain.hpp
index 9029454ede..3d4a73271e 100644
--- a/src/vm/appdomain.hpp
+++ b/src/vm/appdomain.hpp
@@ -3218,6 +3218,7 @@ private:
static DWORD m_dwLowestFreeIndex;
#endif // DACCESS_COMPILE
+#ifdef FEATURE_PREJIT
protected:
// These flags let the correct native image of mscorlib to be loaded.
@@ -3226,6 +3227,7 @@ protected:
SVAL_DECL(BOOL, s_fForceDebug);
SVAL_DECL(BOOL, s_fForceProfiling);
SVAL_DECL(BOOL, s_fForceInstrument);
+#endif
public:
static void SetCompilationOverrides(BOOL fForceDebug,
diff --git a/src/vm/arm/asmhelpers.S b/src/vm/arm/asmhelpers.S
index feadaa87ba..034e687a50 100644
--- a/src/vm/arm/asmhelpers.S
+++ b/src/vm/arm/asmhelpers.S
@@ -831,6 +831,7 @@ LOCAL_LABEL(stackProbe_loop):
bx lr
NESTED_END stackProbe, _TEXT
+#ifdef FEATURE_PREJIT
//------------------------------------------------
// VirtualMethodFixupStub
//
@@ -886,6 +887,7 @@ LOCAL_LABEL(stackProbe_loop):
bx r12
NESTED_END VirtualMethodFixupStub, _TEXT
+#endif // FEATURE_PREJIT
//------------------------------------------------
// ExternalMethodFixupStub
@@ -924,6 +926,7 @@ LOCAL_LABEL(stackProbe_loop):
NESTED_END ExternalMethodFixupStub, _TEXT
+#ifdef FEATURE_PREJIT
//------------------------------------------------
// StubDispatchFixupStub
//
@@ -956,6 +959,7 @@ LOCAL_LABEL(stackProbe_loop):
bx r12
NESTED_END StubDispatchFixupStub, _TEXT
+#endif // FEATURE_PREJIT
//------------------------------------------------
// JIT_RareDisableHelper
diff --git a/src/vm/arm/asmhelpers.asm b/src/vm/arm/asmhelpers.asm
index 67de4f4f35..e49910d042 100644
--- a/src/vm/arm/asmhelpers.asm
+++ b/src/vm/arm/asmhelpers.asm
@@ -57,11 +57,14 @@
IMPORT GetCurrentSavedRedirectContext
- ;; Imports to support virtual import fixup for ngen images
- IMPORT VirtualMethodFixupWorker
;; Import to support cross-moodule external method invocation in ngen images
IMPORT ExternalMethodFixupWorker
+
+#ifdef FEATURE_PREJIT
+ ;; Imports to support virtual import fixup for ngen images
+ IMPORT VirtualMethodFixupWorker
IMPORT StubDispatchFixupWorker
+#endif
#ifdef FEATURE_READYTORUN
IMPORT DynamicHelperWorker
@@ -1241,6 +1244,7 @@ stackProbe_loop
EPILOG_RETURN
NESTED_END
+#ifdef FEATURE_PREJIT
;------------------------------------------------
; VirtualMethodFixupStub
;
@@ -1295,6 +1299,7 @@ stackProbe_loop
EPILOG_BRANCH_REG r12
NESTED_END
+#endif // FEATURE_PREJIT
;------------------------------------------------
; ExternalMethodFixupStub
@@ -1333,6 +1338,7 @@ stackProbe_loop
NESTED_END
+#ifdef FEATURE_PREJIT
;------------------------------------------------
; StubDispatchFixupStub
;
@@ -1365,6 +1371,7 @@ stackProbe_loop
EPILOG_BRANCH_REG r12
NESTED_END
+#endif // FEATURE_PREJIT
;------------------------------------------------
; JIT_RareDisableHelper
diff --git a/src/vm/arm/cgencpu.h b/src/vm/arm/cgencpu.h
index 360cbe6b18..c93780a634 100644
--- a/src/vm/arm/cgencpu.h
+++ b/src/vm/arm/cgencpu.h
@@ -1135,7 +1135,7 @@ struct StubPrecode {
CONTRACTL
{
THROWS;
- GC_TRIGGERS;
+ GC_NOTRIGGER;
}
CONTRACTL_END;
@@ -1148,7 +1148,7 @@ struct StubPrecode {
CONTRACTL
{
THROWS;
- GC_TRIGGERS;
+ GC_NOTRIGGER;
}
CONTRACTL_END;
diff --git a/src/vm/arm64/asmhelpers.S b/src/vm/arm64/asmhelpers.S
index 56ed718708..28daf9ac0d 100644
--- a/src/vm/arm64/asmhelpers.S
+++ b/src/vm/arm64/asmhelpers.S
@@ -474,6 +474,7 @@ LOCAL_LABEL(Exit):
ret lr
WRITE_BARRIER_END JIT_WriteBarrier
+#ifdef FEATURE_PREJIT
//------------------------------------------------
// VirtualMethodFixupStub
//
@@ -520,7 +521,8 @@ NESTED_ENTRY VirtualMethodFixupStub, _TEXT, NoHandler
// and tailcall to the actual method
EPILOG_BRANCH_REG x12
-NESTED_END VirtualMEthodFixupStub, _TEXT
+NESTED_END VirtualMethodFixupStub, _TEXT
+#endif // FEATURE_PREJIT
//------------------------------------------------
// ExternalMethodFixupStub
diff --git a/src/vm/arm64/asmhelpers.asm b/src/vm/arm64/asmhelpers.asm
index 400423b90a..01b49dbe29 100644
--- a/src/vm/arm64/asmhelpers.asm
+++ b/src/vm/arm64/asmhelpers.asm
@@ -11,12 +11,14 @@
#include "asmconstants.h"
#include "asmmacros.h"
+#ifdef FEATURE_PREJIT
IMPORT VirtualMethodFixupWorker
+ IMPORT StubDispatchFixupWorker
+#endif
IMPORT ExternalMethodFixupWorker
IMPORT PreStubWorker
IMPORT NDirectImportWorker
IMPORT VSD_ResolveWorker
- IMPORT StubDispatchFixupWorker
IMPORT JIT_InternalThrow
IMPORT ComPreStubWorker
IMPORT COMToCLRWorker
@@ -532,6 +534,7 @@ Exit
ret lr
WRITE_BARRIER_END JIT_WriteBarrier
+#ifdef FEATURE_PREJIT
;------------------------------------------------
; VirtualMethodFixupStub
;
@@ -579,6 +582,8 @@ Exit
EPILOG_BRANCH_REG x12
NESTED_END
+#endif // FEATURE_PREJIT
+
;------------------------------------------------
; ExternalMethodFixupStub
;
diff --git a/src/vm/ceeload.cpp b/src/vm/ceeload.cpp
index 40b73a03ef..3d26a0a647 100644
--- a/src/vm/ceeload.cpp
+++ b/src/vm/ceeload.cpp
@@ -10424,6 +10424,10 @@ ZapHeader.ImportTable | | | non-NULL
#endif // 0
+#endif
+#endif
+
+#ifndef DACCESS_COMPILE
//-----------------------------------------------------------------------------
void Module::RunEagerFixups()
@@ -10507,7 +10511,11 @@ void Module::RunEagerFixups()
}
}
}
+#endif // !DACCESS_COMPILE
+#ifdef FEATURE_PREJIT
+
+#ifndef DACCESS_COMPILE
void Module::LoadTokenTables()
{
CONTRACTL
@@ -10701,7 +10709,6 @@ BOOL Module::FixupNativeEntry(CORCOMPILE_IMPORT_SECTION* pSection, SIZE_T fixupI
return TRUE;
}
-#ifdef FEATURE_PREJIT
//
// Profile data management
//
@@ -11649,7 +11656,6 @@ ExternalMethodBlobEntry::ExternalMethodBlobEntry(mdToken _nestedClass,
return static_cast<const ExternalMethodBlobEntry *>(pEntry);
}
-
static bool GetBasename(LPCWSTR _src, __out_ecount(dstlen) __out_z LPWSTR _dst, int dstlen)
{
LIMITED_METHOD_CONTRACT;
@@ -12387,7 +12393,6 @@ void Module::DeleteProfilingData()
// the metadataProfileData is free'ed in destructor of the corresponding MetaDataTracker
}
-#endif //FEATURE_PREJIT
void Module::SetIsIJWFixedUp()
{
@@ -12395,7 +12400,6 @@ void Module::SetIsIJWFixedUp()
FastInterlockOr(&m_dwTransientFlags, IS_IJW_FIXED_UP);
}
-#ifdef FEATURE_PREJIT
/* static */
Module::TokenProfileData *Module::TokenProfileData::CreateNoThrow(void)
{
@@ -12421,8 +12425,6 @@ Module::TokenProfileData *Module::TokenProfileData::CreateNoThrow(void)
return tpd;
}
-#endif // FEATURE_PREJIT
-
#endif // !DACCESS_COMPILE
#ifndef DACCESS_COMPILE
@@ -12433,7 +12435,6 @@ void Module::SetBeingUnloaded()
}
#endif
-#ifdef FEATURE_PREJIT
void Module::LogTokenAccess(mdToken token, SectionFormat format, ULONG flagnum)
{
CONTRACTL
@@ -12545,10 +12546,8 @@ void Module::LogTokenAccess(mdToken token, ULONG flagNum)
LogTokenAccess(token, format, flagNum);
}
}
-#endif // FEATURE_PREJIT
#ifndef DACCESS_COMPILE
-#ifdef FEATURE_PREJIT
//
// Encoding callbacks
@@ -12808,7 +12807,6 @@ idMethodSpec Module::LogInstantiatedMethod(const MethodDesc * md, ULONG flagNum)
RETURN result;
}
#endif // DACCESS_COMPILE
-#endif //FEATURE_PREJIT
#ifndef DACCESS_COMPILE
diff --git a/src/vm/ceeload.h b/src/vm/ceeload.h
index 3aab11dfeb..e547418adb 100644
--- a/src/vm/ceeload.h
+++ b/src/vm/ceeload.h
@@ -79,12 +79,12 @@ class DynamicMethodTable;
class CodeVersionManager;
class TieredCompilationManager;
class ProfileEmitter;
+class JITInlineTrackingMap;
#ifdef FEATURE_PREJIT
class TypeHandleList;
class TrackingMap;
struct MethodInModule;
class PersistentInlineTrackingMapNGen;
-class JITInlineTrackingMap;
extern VerboseLevel g_CorCompileVerboseLevel;
#endif
@@ -380,8 +380,10 @@ public:
WRAPPER_NO_CONTRACT;
_ASSERTE((flag & supportedFlags) == flag);
+#ifdef FEATURE_PREJIT
_ASSERTE(!MapIsCompressed());
_ASSERTE(dwNumHotItems == 0);
+#endif // FEATURE_PREJIT
PTR_TADDR pElement = GetElementPtr(rid);
_ASSERTE(pElement);
@@ -740,9 +742,6 @@ struct ModuleCtorInfo
};
-
-#ifdef FEATURE_PREJIT
-
// For IBC Profiling we collect signature blobs for instantiated types.
// For such instantiated types and methods we create our own ibc token
//
@@ -1004,7 +1003,7 @@ public:
typedef SHash<ProfilingBlobTraits> ProfilingBlobTable;
typedef DPTR(ProfilingBlobTable) PTR_ProfilingBlobTable;
-
+#ifdef FEATURE_PREJIT
#define METHODTABLE_RESTORE_REASON() \
RESTORE_REASON_FUNC(CanNotPreRestoreHardBindToParentMethodTable) \
RESTORE_REASON_FUNC(CanNotPreRestoreHardBindToCanonicalMethodTable) \
diff --git a/src/vm/dataimage.h b/src/vm/dataimage.h
index 90f3d4cb97..a9375e7a1d 100644
--- a/src/vm/dataimage.h
+++ b/src/vm/dataimage.h
@@ -7,15 +7,6 @@
#ifndef _DATAIMAGE_H_
#define _DATAIMAGE_H_
-#if defined(FEATURE_PREJIT) && !defined(DACCESS_COMPILE)
-
-// All we really need is to pre-declare the PrecodeType enum, but g++ doesn't
-// support enum pre-declaration, so we need to include the declaration itself.
-/*#include "cgensys.h" // needed to include precode.h*/
-#include "precode.h"
-
-typedef BYTE ZapRelocationType; // IMAGE_REL_XXX enum
-
// IMAGE_REL_BASED_PTR is architecture specific reloc of virtual address
#ifdef _TARGET_64BIT_
#define IMAGE_REL_BASED_PTR IMAGE_REL_BASED_DIR64
@@ -26,6 +17,15 @@ typedef BYTE ZapRelocationType; // IMAGE_REL_XXX enum
// Special NGEN-specific relocation type for relative pointer (used to make NGen relocation section smaller)
#define IMAGE_REL_BASED_RELPTR 0x7D
+#if defined(FEATURE_PREJIT) && !defined(DACCESS_COMPILE)
+
+// All we really need is to pre-declare the PrecodeType enum, but g++ doesn't
+// support enum pre-declaration, so we need to include the declaration itself.
+/*#include "cgensys.h" // needed to include precode.h*/
+#include "precode.h"
+
+typedef BYTE ZapRelocationType; // IMAGE_REL_XXX enum
+
class CEEPreloader;
class ZapImage;
diff --git a/src/vm/domainfile.cpp b/src/vm/domainfile.cpp
index a60f8d4ab3..9e3d7068e8 100644
--- a/src/vm/domainfile.cpp
+++ b/src/vm/domainfile.cpp
@@ -1003,14 +1003,6 @@ void DomainFile::PostLoadLibrary()
void DomainFile::AddDependencies()
{
STANDARD_VM_CONTRACT;
-
-#ifdef FEATURE_PREJIT
-
- //
- // CoreCLR hard binds to mscorlib.dll only. No need to track hardbound dependencies.
- //
-
-#endif // FEATURE_PREJIT
}
void DomainFile::EagerFixups()
@@ -1022,8 +1014,9 @@ void DomainFile::EagerFixups()
{
GetCurrentModule()->RunEagerFixups();
}
-#ifdef FEATURE_READYTORUN
else
+#endif // FEATURE_PREJIT
+#ifdef FEATURE_READYTORUN
if (GetCurrentModule()->IsReadyToRun())
{
#ifndef CROSSGEN_COMPILE
@@ -1040,8 +1033,6 @@ void DomainFile::EagerFixups()
GetCurrentModule() /* (void *)pLayout */);
}
#endif // FEATURE_READYTORUN
-
-#endif // FEATURE_PREJIT
}
void DomainFile::VtableFixups()
diff --git a/src/vm/fieldmarshaler.h b/src/vm/fieldmarshaler.h
index 9e393b7755..1718bd3b7b 100644
--- a/src/vm/fieldmarshaler.h
+++ b/src/vm/fieldmarshaler.h
@@ -1117,7 +1117,8 @@ public:
#ifdef FEATURE_PREJIT
return !m_arrayType.IsTagged() && (m_arrayType.IsNull() || m_arrayType.GetValue().IsRestored());
#else // FEATURE_PREJIT
- return m_arrayType.IsNull() || m_arrayType.GetValue().IsFullyLoaded();
+ // putting the IsFullyLoaded check here is tempting but incorrect
+ return TRUE;
#endif // FEATURE_PREJIT
}
#endif
diff --git a/src/vm/i386/asmhelpers.S b/src/vm/i386/asmhelpers.S
index 09fb50266f..0afc5764db 100644
--- a/src/vm/i386/asmhelpers.S
+++ b/src/vm/i386/asmhelpers.S
@@ -725,7 +725,6 @@ LOCAL_LABEL(GoCallCalliWorker):
LEAF_END GenericPInvokeCalliHelper, _TEXT
#ifdef FEATURE_PREJIT
-
// =========================================================================
NESTED_ENTRY StubDispatchFixupStub, _TEXT, NoHandler
STUB_PROLOG
@@ -755,6 +754,7 @@ PATCH_LABEL StubDispatchFixupPatchLabel
// which disassembles the epilog to unwind the stack.
ret
NESTED_END StubDispatchFixupStub, _TEXT
+#endif // FEATURE_PREJIT
// ==========================================================================
NESTED_ENTRY ExternalMethodFixupStub, _TEXT_ NoHandler
@@ -842,6 +842,7 @@ NESTED_END DelayLoad_MethodCall, _TEXT
#endif // FEATURE_READYTORUN
+#ifdef FEATURE_PREJIT
// =======================================================================================
// The call in softbound vtable slots initially points to this function.
// The pupose of this function is to transfer the control to right target and
@@ -891,7 +892,6 @@ PATCH_LABEL VirtualMethodFixupPatchLabel
// which disassembles the epilog to unwind the stack.
ret
NESTED_END VirtualMethodFixupStub, _TEXT
-
#endif // FEATURE_PREJIT
NESTED_ENTRY ThePreStub, _TEXT, NoHandler
diff --git a/src/vm/i386/asmhelpers.asm b/src/vm/i386/asmhelpers.asm
index 19697a42d8..acaf31bab5 100644
--- a/src/vm/i386/asmhelpers.asm
+++ b/src/vm/i386/asmhelpers.asm
@@ -61,8 +61,9 @@ ifdef FEATURE_COMINTEROP
EXTERN _CLRToCOMWorker@8:PROC
endif
-ifdef FEATURE_PREJIT
EXTERN _ExternalMethodFixupWorker@16:PROC
+
+ifdef FEATURE_PREJIT
EXTERN _VirtualMethodFixupWorker@8:PROC
EXTERN _StubDispatchFixupWorker@16:PROC
endif
@@ -1523,7 +1524,6 @@ _DelayLoad_MethodCall@0 endp
endif
ifdef FEATURE_PREJIT
-
;=======================================================================================
; The call in softbound vtable slots initially points to this function.
; The pupose of this function is to transfer the control to right target and
@@ -1564,8 +1564,7 @@ public _VirtualMethodFixupPatchLabel@0
ret
_VirtualMethodFixupStub@0 endp
-
-endif ; FEATURE_PREJIT
+endif
;==========================================================================
; The prestub
diff --git a/src/vm/i386/cgencpu.h b/src/vm/i386/cgencpu.h
index b42e422c97..48b24b3ff1 100644
--- a/src/vm/i386/cgencpu.h
+++ b/src/vm/i386/cgencpu.h
@@ -85,10 +85,8 @@ EXTERN_C void SinglecastDelegateInvokeStub();
// Needed for PInvoke inlining in ngened images
#define HAS_NDIRECT_IMPORT_PRECODE 1
-#ifdef FEATURE_PREJIT
#define HAS_FIXUP_PRECODE 1
#define HAS_FIXUP_PRECODE_CHUNKS 1
-#endif
// ThisPtrRetBufPrecode one is necessary for closed delegates over static methods with return buffer
#define HAS_THISPTR_RETBUF_PRECODE 1
diff --git a/src/vm/i386/cgenx86.cpp b/src/vm/i386/cgenx86.cpp
index df265f2369..a5a85b0481 100644
--- a/src/vm/i386/cgenx86.cpp
+++ b/src/vm/i386/cgenx86.cpp
@@ -1363,6 +1363,7 @@ BOOL DoesSlotCallPrestub(PCODE pCode)
return pCode == GetPreStubEntryPoint();
}
+#ifdef FEATURE_PREJIT
//==========================================================================================
// In NGen image, virtual slots inherited from cross-module dependencies point to jump thunks.
// These jump thunk initially point to VirtualMethodFixupStub which transfers control here.
@@ -1430,7 +1431,7 @@ EXTERN_C PVOID STDCALL VirtualMethodFixupWorker(Object * pThisPtr, CORCOMPILE_V
return PVOID(pCode);
}
-
+#endif // FEATURE_PREJIT
#ifdef FEATURE_READYTORUN
diff --git a/src/vm/i386/stublinkerx86.cpp b/src/vm/i386/stublinkerx86.cpp
index f46f5067b9..7020e40e51 100644
--- a/src/vm/i386/stublinkerx86.cpp
+++ b/src/vm/i386/stublinkerx86.cpp
@@ -6485,7 +6485,7 @@ void rel32SetInterlocked(/*PINT32*/ PVOID pRel32, TADDR target, MethodDesc* pMD)
CONTRACTL
{
THROWS; // Creating a JumpStub could throw OutOfMemory
- GC_TRIGGERS;
+ GC_NOTRIGGER;
}
CONTRACTL_END;
@@ -6500,7 +6500,7 @@ BOOL rel32SetInterlocked(/*PINT32*/ PVOID pRel32, TADDR target, TADDR expected,
CONTRACTL
{
THROWS; // Creating a JumpStub could throw OutOfMemory
- GC_TRIGGERS;
+ GC_NOTRIGGER;
}
CONTRACTL_END;
diff --git a/src/vm/i386/stublinkerx86.h b/src/vm/i386/stublinkerx86.h
index 31bc10460b..3d79b51868 100644
--- a/src/vm/i386/stublinkerx86.h
+++ b/src/vm/i386/stublinkerx86.h
@@ -542,7 +542,7 @@ struct StubPrecode {
CONTRACTL
{
THROWS;
- GC_TRIGGERS;
+ GC_NOTRIGGER;
}
CONTRACTL_END;
@@ -555,7 +555,7 @@ struct StubPrecode {
CONTRACTL
{
THROWS;
- GC_TRIGGERS;
+ GC_NOTRIGGER;
}
CONTRACTL_END;
diff --git a/src/vm/ibclogger.cpp b/src/vm/ibclogger.cpp
index 991f936b09..01ffa3860b 100644
--- a/src/vm/ibclogger.cpp
+++ b/src/vm/ibclogger.cpp
@@ -523,7 +523,9 @@ void IBCLogger::LogMethodAccessHelper(const MethodDesc* pMD, ULONG flagNum)
if (!pMT->IsRestored_NoLogging())
goto DelayCallback;
+#ifdef FEATURE_PREJIT
LogMethodTableAccessHelper(pMT);
+#endif
Module *pModule = pMT->GetModule();
@@ -554,12 +556,14 @@ void IBCLogger::LogMethodAccessHelper(const MethodDesc* pMD, ULONG flagNum)
goto DelayCallback;
}
+#ifdef FEATURE_PREJIT
Module *pPZModule = Module::GetPreferredZapModuleForMethodDesc(pMD);
token = pPZModule->LogInstantiatedMethod(pMD, flagNum);
if (!IsNilToken(token))
{
pPZModule->LogTokenAccess(token, MethodProfilingData, flagNum);
}
+#endif
}
else
{
@@ -579,7 +583,33 @@ void IBCLogger::LogMethodAccessWrapper(IBCLogger* pLogger, const void * pValue1,
WRAPPER_NO_CONTRACT;
pLogger->LogMethodAccessHelper((MethodDesc *)pValue1, (ULONG)(SIZE_T)pValue2);
}
+// Log access to method code or method header
+void IBCLogger::LogMethodCodeAccessHelper(MethodDesc *pMD)
+{
+ CONTRACTL
+ {
+ NOTHROW;
+ GC_NOTRIGGER;
+ MODE_ANY;
+ PRECONDITION(g_IBCLogger.InstrEnabled());
+ }
+ CONTRACTL_END;
+
+ LogMethodAccessHelper(pMD, ReadMethodCode);
+}
+
+// Log access to method gc info
+void IBCLogger::LogMethodGCInfoAccessHelper(MethodDesc* pMD)
+{
+ WRAPPER_NO_CONTRACT;
+
+ _ASSERTE(InstrEnabled());
+
+ LogMethodAccessHelper(pMD, ReadGCInfo);
+ LogMethodAccessHelper(pMD, CommonReadGCInfo);
+}
+#ifdef FEATURE_PREJIT
void IBCLogger::LogMethodDescAccessHelper(const MethodDesc *pMD)
{
WRAPPER_NO_CONTRACT;
@@ -610,21 +640,6 @@ void IBCLogger::LogMethodPrecodeWriteAccessHelper(MethodDesc *pMD)
LogMethodAccessHelper(pMD, WriteMethodPrecode);
}
-// Log access to method code or method header
-void IBCLogger::LogMethodCodeAccessHelper(MethodDesc *pMD)
-{
- CONTRACTL
- {
- NOTHROW;
- GC_NOTRIGGER;
- MODE_ANY;
- PRECONDITION(g_IBCLogger.InstrEnabled());
- }
- CONTRACTL_END;
-
- LogMethodAccessHelper(pMD, ReadMethodCode);
-}
-
// Log access to the method code and method header for NDirect calls
void IBCLogger::LogNDirectCodeAccessHelper(MethodDesc *pMD)
{
@@ -641,18 +656,6 @@ void IBCLogger::LogNDirectCodeAccessHelper(MethodDesc *pMD)
LogMethodAccessHelper(pMD, ReadMethodCode);
}
-
-// Log access to method gc info
-void IBCLogger::LogMethodGCInfoAccessHelper(MethodDesc *pMD)
-{
- WRAPPER_NO_CONTRACT;
-
- _ASSERTE(InstrEnabled());
-
- LogMethodAccessHelper(pMD, ReadGCInfo);
- LogMethodAccessHelper(pMD, CommonReadGCInfo);
-}
-
// Log access to method table
void IBCLogger::LogMethodTableAccessHelper(MethodTable const * pMT)
{
@@ -1096,6 +1099,7 @@ DelayCallback:
DelayedCallbackPtr(LogRVADataAccessWrapper, pFD);
}
+#endif // FEATURE_PREJIT
#define LOADORDER_INSTR 0x00000001
#define RID_ACCESSORDER_INSTR 0x00000002
diff --git a/src/vm/ibclogger.h b/src/vm/ibclogger.h
index 740637bab0..6aba2445e9 100644
--- a/src/vm/ibclogger.h
+++ b/src/vm/ibclogger.h
@@ -40,7 +40,7 @@ typedef PTR_VOID HashDatum;
typedef Pair< Module*, mdToken > RidMapLogData;
-#if defined(FEATURE_PREJIT) && !defined(DACCESS_COMPILE) && !defined(CROSSGEN_COMPILE)
+#if !defined(DACCESS_COMPILE) && !defined(CROSSGEN_COMPILE)
#define IBCLOGGER_ENABLED
#endif
@@ -445,7 +445,7 @@ private:
void DelayedCallbackPtr(pfnIBCAccessCallback callback, const void * pValue1, const void * pValue2 = NULL);
-#else // FEATURE_PREJIT && !DACCESS_COMPILE
+#else // IBCLOGGER_ENABLED
#define LOGACCESS_PTR(name,type) \
public: \
@@ -455,16 +455,36 @@ public: \
public: \
void Log##name##Access(type p) { SUPPORTS_DAC; } \
-#endif // FEATURE_PREJIT && !DACCESS_COMPILE
-
- // Log access to method desc (which adds the method desc to the required list)
- // Implemented by : code:IBCLogger.LogMethodDescAccessHelper
- LOGACCESS_PTR(MethodDesc, const MethodDesc)
+#endif // IBCLOGGER_ENABLED
// Log access to method code or method header
// Implemented by : code:IBCLogger.LogMethodCodeAccessHelper
LOGACCESS_PTR(MethodCode, MethodDesc)
+ // Log access to gc info
+ // Implemented by : code:IBCLogger.LogMethodGCInfoAccessHelper
+ LOGACCESS_PTR(MethodGCInfo, MethodDesc)
+
+// The accesses to individual datastructures matter for fragile NGen only
+#ifndef FEATURE_PREJIT
+
+#undef LOGACCESS_PTR
+#undef LOGACCESS_VALUE
+
+#define LOGACCESS_PTR(name,type) \
+public: \
+ void Log##name##Access(type* p) { SUPPORTS_DAC; } \
+
+#define LOGACCESS_VALUE(name, type) \
+public: \
+ void Log##name##Access(type p) { SUPPORTS_DAC; } \
+
+#endif // FEATURE_PREJIT
+
+ // Log access to method desc (which adds the method desc to the required list)
+ // Implemented by : code:IBCLogger.LogMethodDescAccessHelper
+ LOGACCESS_PTR(MethodDesc, const MethodDesc)
+
// Log access to the NDirect data stored for a MethodDesc
// also implies that the IL_STUB for the NDirect method is executed
// Implemented by : code:IBCLogger.LogNDirectCodeAccessHelper
@@ -482,10 +502,6 @@ public: \
// Implemented by : code:IBCLogger.LogMethodPrecodeWriteAccessHelper
LOGACCESS_PTR(MethodPrecodeWrite,MethodDesc)
- // Log access to gc info
- // Implemented by : code:IBCLogger.LogMethodGCInfoAccessHelper
- LOGACCESS_PTR(MethodGCInfo, MethodDesc)
-
// Log access to method table
// Implemented by : code:IBCLogger.LogMethodTableAccessHelper
LOGACCESS_PTR(MethodTable, MethodTable const)
diff --git a/src/vm/method.cpp b/src/vm/method.cpp
index cdbd4430ab..d8688e14a4 100644
--- a/src/vm/method.cpp
+++ b/src/vm/method.cpp
@@ -3169,6 +3169,10 @@ void DynamicMethodDesc::Restore()
RestoreSignatureContainingInternalTypes(pSig, cSigLen);
}
}
+#else // FEATURE_PREJIT
+void DynamicMethodDesc::Restore()
+{
+}
#endif // FEATURE_PREJIT
#ifdef FEATURE_NATIVE_IMAGE_GENERATION
@@ -3912,7 +3916,6 @@ void ComPlusCallInfo::Fixup(DataImage *image)
#endif // !DACCESS_COMPILE
-#ifdef FEATURE_PREJIT
//*******************************************************************************
void MethodDesc::CheckRestore(ClassLoadLevel level)
{
@@ -3932,11 +3935,11 @@ void MethodDesc::CheckRestore(ClassLoadLevel level)
// First restore method table pointer in singleton chunk;
// it might be out-of-module
+#ifdef FEATURE_PREJIT
GetMethodDescChunk()->RestoreMTPointer(level);
#ifdef _DEBUG
Module::RestoreMethodTablePointer(&m_pDebugMethodTable, NULL, level);
#endif
-
// Now restore wrapped method desc if present; we need this for the dictionary layout too
if (pIMD->IMD_IsWrapperStubWithInstantiations())
Module::RestoreMethodDescPointer(&pIMD->m_pWrappedMethodDesc);
@@ -3946,6 +3949,9 @@ void MethodDesc::CheckRestore(ClassLoadLevel level)
{
GetMethodDictionary()->Restore(GetNumGenericMethodArgs(), level);
}
+#else
+ ClassLoader::EnsureLoaded(TypeHandle(GetMethodTable()), level);
+#endif
g_IBCLogger.LogMethodDescWriteAccess(this);
@@ -3992,13 +3998,6 @@ void MethodDesc::CheckRestore(ClassLoadLevel level)
}
}
}
-#else // FEATURE_PREJIT
-//*******************************************************************************
-void MethodDesc::CheckRestore(ClassLoadLevel level)
-{
- LIMITED_METHOD_CONTRACT;
-}
-#endif // !FEATURE_PREJIT
// static
MethodDesc* MethodDesc::GetMethodDescFromStubAddr(PCODE addr, BOOL fSpeculative /*=FALSE*/)
diff --git a/src/vm/methodtable.cpp b/src/vm/methodtable.cpp
index 2782c9b71a..d0dd136925 100644
--- a/src/vm/methodtable.cpp
+++ b/src/vm/methodtable.cpp
@@ -5262,8 +5262,6 @@ void MethodTableWriteableData::Fixup(DataImage *image, MethodTable *pMT, BOOL ne
#endif // FEATURE_NATIVE_IMAGE_GENERATION
-#ifdef FEATURE_PREJIT
-
//==========================================================================================
void MethodTable::CheckRestore()
{
@@ -5283,15 +5281,6 @@ void MethodTable::CheckRestore()
g_IBCLogger.LogMethodTableAccess(this);
}
-#else // !FEATURE_PREJIT
-//==========================================================================================
-void MethodTable::CheckRestore()
-{
- LIMITED_METHOD_CONTRACT;
-}
-#endif // !FEATURE_PREJIT
-
-
#ifndef DACCESS_COMPILE
BOOL SatisfiesClassConstraints(TypeHandle instanceTypeHnd, TypeHandle typicalTypeHnd,
diff --git a/src/vm/peimagelayout.cpp b/src/vm/peimagelayout.cpp
index e839e8ffb0..c965c61ff5 100644
--- a/src/vm/peimagelayout.cpp
+++ b/src/vm/peimagelayout.cpp
@@ -8,6 +8,7 @@
#include "common.h"
#include "peimagelayout.h"
#include "peimagelayout.inl"
+#include "dataimage.h"
#if defined(PLATFORM_WINDOWS) && !defined(CROSSGEN_COMPILE)
#include "amsi.h"
@@ -88,8 +89,6 @@ PEImageLayout* PEImageLayout::Map(HANDLE hFile, PEImage* pOwner)
RETURN pAlloc.Extract();
}
-#ifdef FEATURE_PREJIT
-
#ifdef FEATURE_PAL
DWORD SectionCharacteristicsToPageProtection(UINT characteristics)
{
@@ -293,7 +292,6 @@ void PEImageLayout::ApplyBaseRelocations()
ClrFlushInstructionCache(pFlushRegion, cbFlushRegion);
}
}
-#endif // FEATURE_PREJIT
RawImageLayout::RawImageLayout(const void *flat, COUNT_T size, PEImage* pOwner)
diff --git a/src/vm/peimagelayout.h b/src/vm/peimagelayout.h
index 8ddb577a85..17254bcb72 100644
--- a/src/vm/peimagelayout.h
+++ b/src/vm/peimagelayout.h
@@ -68,9 +68,7 @@ public:
ULONG Release();
const SString& GetPath();
-#ifdef FEATURE_PREJIT
void ApplyBaseRelocations();
-#endif
public:
#ifdef DACCESS_COMPILE
diff --git a/src/vm/perfmap.cpp b/src/vm/perfmap.cpp
index ba99900588..593ab8d1c4 100644
--- a/src/vm/perfmap.cpp
+++ b/src/vm/perfmap.cpp
@@ -324,28 +324,27 @@ void NativeImagePerfMap::LogDataForModule(Module * pModule)
SIZE_T baseAddr = (SIZE_T)pLoadedLayout->GetBase();
-#ifdef FEATURE_READYTORUN_COMPILER
- if (pLoadedLayout->HasReadyToRunHeader())
+#ifdef FEATURE_PREJIT
+ if (!pLoadedLayout->HasReadyToRunHeader())
{
- ReadyToRunInfo::MethodIterator mi(pModule->GetReadyToRunInfo());
+ MethodIterator mi((PTR_Module)pModule);
while (mi.Next())
{
MethodDesc *hotDesc = mi.GetMethodDesc();
+ hotDesc->CheckRestore();
LogPreCompiledMethod(hotDesc, mi.GetMethodStartAddress(), baseAddr);
}
+ return;
}
- else
-#endif // FEATURE_READYTORUN_COMPILER
+#endif
+
+ ReadyToRunInfo::MethodIterator mi(pModule->GetReadyToRunInfo());
+ while (mi.Next())
{
- MethodIterator mi((PTR_Module)pModule);
- while (mi.Next())
- {
- MethodDesc *hotDesc = mi.GetMethodDesc();
- hotDesc->CheckRestore();
+ MethodDesc* hotDesc = mi.GetMethodDesc();
- LogPreCompiledMethod(hotDesc, mi.GetMethodStartAddress(), baseAddr);
- }
+ LogPreCompiledMethod(hotDesc, mi.GetMethodStartAddress(), baseAddr);
}
}
diff --git a/src/vm/siginfo.cpp b/src/vm/siginfo.cpp
index 8dfb1cdc02..e20f49243d 100644
--- a/src/vm/siginfo.cpp
+++ b/src/vm/siginfo.cpp
@@ -1125,7 +1125,6 @@ TypeHandle SigPointer::GetTypeHandleThrowing(
break;
}
-#ifdef FEATURE_PREJIT
case ELEMENT_TYPE_NATIVE_ARRAY_TEMPLATE_ZAPSIG:
{
#ifndef DACCESS_COMPILE
@@ -1258,7 +1257,6 @@ TypeHandle SigPointer::GetTypeHandleThrowing(
#endif
break;
}
-#endif // FEATURE_PREJIT
case ELEMENT_TYPE_VAR:
{
diff --git a/src/vm/stubmgr.cpp b/src/vm/stubmgr.cpp
index a18792d76e..27ab5cf614 100644
--- a/src/vm/stubmgr.cpp
+++ b/src/vm/stubmgr.cpp
@@ -1511,10 +1511,14 @@ BOOL RangeSectionStubManager::TraceManager(Thread *thread,
}
CONTRACTL_END;
+#ifdef FEATURE_PREJIT
// Both virtual and external import thunks have the same structure. We can use
// common code to handle them.
_ASSERTE(GetIP(pContext) == GetEEFuncEntryPoint(VirtualMethodFixupPatchLabel)
|| GetIP(pContext) == GetEEFuncEntryPoint(ExternalMethodFixupPatchLabel));
+#else
+ _ASSERTE(GetIP(pContext) == GetEEFuncEntryPoint(ExternalMethodFixupPatchLabel));
+#endif
*pRetAddr = (BYTE *)StubManagerHelpers::GetReturnAddress(pContext);
diff --git a/src/vm/threads.cpp b/src/vm/threads.cpp
index 40e846bf40..dcd95f8cdb 100644
--- a/src/vm/threads.cpp
+++ b/src/vm/threads.cpp
@@ -1464,9 +1464,7 @@ Thread::Thread()
m_pPendingTypeLoad = NULL;
-#ifdef FEATURE_PREJIT
m_pIBCInfo = NULL;
-#endif
m_dwAVInRuntimeImplOkayCount = 0;
@@ -2630,11 +2628,9 @@ Thread::~Thread()
g_pThinLockThreadIdDispenser->DisposeId(GetThreadId());
-#ifdef FEATURE_PREJIT
if (m_pIBCInfo) {
delete m_pIBCInfo;
}
-#endif
#ifdef FEATURE_EVENT_TRACE
// Destruct the thread local type cache for allocation sampling
diff --git a/src/vm/threads.h b/src/vm/threads.h
index 2cbf0e0674..3a521c076d 100644
--- a/src/vm/threads.h
+++ b/src/vm/threads.h
@@ -2953,8 +2953,6 @@ public:
}
#endif
-#ifdef FEATURE_PREJIT
-
private:
ThreadLocalIBCInfo* m_pIBCInfo;
@@ -2986,8 +2984,6 @@ public:
#endif // #ifndef DACCESS_COMPILE
-#endif // #ifdef FEATURE_PREJIT
-
// Indicate whether this thread should run in the background. Background threads
// don't interfere with the EE shutting down. Whereas a running non-background
// thread prevents us from shutting down (except through System.Exit(), of course)
diff --git a/src/vm/virtualcallstub.h b/src/vm/virtualcallstub.h
index 66cbc5f222..3cf096a47a 100644
--- a/src/vm/virtualcallstub.h
+++ b/src/vm/virtualcallstub.h
@@ -44,10 +44,12 @@ struct VTableCallHolder;
// Forward function declarations
extern "C" void InContextTPQuickDispatchAsmStub();
+#ifdef FEATURE_PREJIT
extern "C" PCODE STDCALL StubDispatchFixupWorker(TransitionBlock * pTransitionBlock,
TADDR siteAddrForRegisterIndirect,
DWORD sectionIndex,
Module * pModule);
+#endif
extern "C" PCODE STDCALL VSD_ResolveWorker(TransitionBlock * pTransitionBlock,
TADDR siteAddrForRegisterIndirect,