summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSteve Harter <steveharter@users.noreply.github.com>2015-11-17 12:38:33 -0600
committerSteve Harter <steveharter@users.noreply.github.com>2015-11-17 12:38:33 -0600
commit99118f1978299fad8ecce5308db61ea0362c811b (patch)
tree3bd393a9016dfe52cddd4fbea7dfa58b61168aaa /src
parent7df13b9f32bce0737386da5c26ea3e91989a943c (diff)
parent4e06e4271162ac65a57719398e3b5572de9f5185 (diff)
downloadcoreclr-99118f1978299fad8ecce5308db61ea0362c811b.tar.gz
coreclr-99118f1978299fad8ecce5308db61ea0362c811b.tar.bz2
coreclr-99118f1978299fad8ecce5308db61ea0362c811b.zip
Merge pull request #2016 from steveharter/CMake
Enable Clang sanitizers for debug builds (address sanitizer, undefined behavior sanitizer and leak sanitizer)
Diffstat (limited to 'src')
-rw-r--r--src/pal/src/CMakeLists.txt2
-rw-r--r--src/utilcode/clrhost_nodependencies.cpp37
-rw-r--r--src/vm/arm/stubs.cpp2
-rw-r--r--src/vm/ceeload.cpp2
-rw-r--r--src/vm/ceeload.h20
-rw-r--r--src/vm/codeman.cpp14
-rw-r--r--src/vm/codeman.h54
-rw-r--r--src/vm/frames.h3
-rw-r--r--src/vm/loaderallocator.cpp19
-rw-r--r--src/vm/loaderallocator.hpp4
-rw-r--r--src/vm/stubmgr.h7
-rw-r--r--src/vm/virtualcallstub.h5
12 files changed, 125 insertions, 44 deletions
diff --git a/src/pal/src/CMakeLists.txt b/src/pal/src/CMakeLists.txt
index b1f11bd9e3..ad5425b8df 100644
--- a/src/pal/src/CMakeLists.txt
+++ b/src/pal/src/CMakeLists.txt
@@ -66,6 +66,8 @@ elseif(PAL_CMAKE_PLATFORM_ARCH_ARM64)
add_definitions(-D_WIN64=1)
endif()
+# turn off capability to remove unused functions (which was enabled in debug build with sanitizers)
+set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} -Wl,--no-gc-sections")
add_compile_options(-fno-builtin)
add_compile_options(-fPIC)
diff --git a/src/utilcode/clrhost_nodependencies.cpp b/src/utilcode/clrhost_nodependencies.cpp
index 33f270ecb3..30000dc12d 100644
--- a/src/utilcode/clrhost_nodependencies.cpp
+++ b/src/utilcode/clrhost_nodependencies.cpp
@@ -17,6 +17,12 @@
#include "contract.h"
#include "tls.h"
+#if defined __llvm__
+# if defined(__has_feature) && __has_feature(address_sanitizer)
+# define HAS_ADDRESS_SANITIZER
+# endif
+#endif
+
#ifdef _DEBUG_IMPL
//
@@ -37,6 +43,10 @@ void DisableThrowCheck()
dbg_fDisableThrowCheck = TRUE;
}
+#ifdef HAS_ADDRESS_SANITIZER
+// use the functionality from address santizier (which does not throw exceptions)
+#else
+
#define CLRThrowsExceptionWorker() RealCLRThrowsExceptionWorker(__FUNCTION__, __FILE__, __LINE__)
static void RealCLRThrowsExceptionWorker(__in_z const char *szFunction,
@@ -53,6 +63,7 @@ static void RealCLRThrowsExceptionWorker(__in_z const char *szFunction,
CONTRACT_THROWSEX(szFunction, szFile, lineNum);
}
+#endif // HAS_ADDRESS_SANITIZER
#endif //_DEBUG_IMPL
#if defined(_DEBUG_IMPL) && defined(ENABLE_CONTRACTS_IMPL)
@@ -383,6 +394,10 @@ FastFreeInProcessHeapFunc __ClrFreeInProcessHeap = (FastFreeInProcessHeapFunc) C
const NoThrow nothrow = { 0 };
+#ifdef HAS_ADDRESS_SANITIZER
+// use standard heap functions for address santizier
+#else
+
#ifdef __llvm__
__attribute__((visibility("hidden")))
#endif
@@ -431,11 +446,17 @@ operator new[](size_t n)
return result;
};
+#endif // HAS_ADDRESS_SANITIZER
+
#ifdef __llvm__
__attribute__((visibility("hidden")))
#endif
void * __cdecl operator new(size_t n, const NoThrow&)
{
+#ifdef HAS_ADDRESS_SANITIZER
+ // use standard heap functions for address santizier (which doesn't provide for NoThrow)
+ void * result = operator new(n);
+#else
STATIC_CONTRACT_NOTHROW;
STATIC_CONTRACT_GC_NOTRIGGER;
STATIC_CONTRACT_FAULT;
@@ -445,7 +466,8 @@ void * __cdecl operator new(size_t n, const NoThrow&)
INCONTRACT(_ASSERTE(!ARE_FAULTS_FORBIDDEN()));
void * result = ClrAllocInProcessHeap(0, S_SIZE_T(n));
- TRASH_LASTERROR;
+#endif // HAS_ADDRESS_SANITIZER
+ TRASH_LASTERROR;
return result;
}
@@ -454,6 +476,10 @@ __attribute__((visibility("hidden")))
#endif
void * __cdecl operator new[](size_t n, const NoThrow&)
{
+#ifdef HAS_ADDRESS_SANITIZER
+ // use standard heap functions for address santizier (which doesn't provide for NoThrow)
+ void * result = operator new[](n);
+#else
STATIC_CONTRACT_NOTHROW;
STATIC_CONTRACT_GC_NOTRIGGER;
STATIC_CONTRACT_FAULT;
@@ -463,10 +489,14 @@ void * __cdecl operator new[](size_t n, const NoThrow&)
INCONTRACT(_ASSERTE(!ARE_FAULTS_FORBIDDEN()));
void * result = ClrAllocInProcessHeap(0, S_SIZE_T(n));
- TRASH_LASTERROR;
+#endif // HAS_ADDRESS_SANITIZER
+ TRASH_LASTERROR;
return result;
}
+#ifdef HAS_ADDRESS_SANITIZER
+// use standard heap functions for address santizier
+#else
#ifdef __llvm__
__attribute__((visibility("hidden")))
#endif
@@ -499,6 +529,9 @@ operator delete[](void *p) NOEXCEPT
TRASH_LASTERROR;
}
+#endif // HAS_ADDRESS_SANITIZER
+
+
/* ------------------------------------------------------------------------ *
* New operator overloading for the executable heap
* ------------------------------------------------------------------------ */
diff --git a/src/vm/arm/stubs.cpp b/src/vm/arm/stubs.cpp
index 42f56a6da7..b4e312200e 100644
--- a/src/vm/arm/stubs.cpp
+++ b/src/vm/arm/stubs.cpp
@@ -2270,6 +2270,7 @@ void TransitionFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
LOG((LF_GCROOTS, LL_INFO100000, "STACKWALK TransitionFrame::UpdateRegDisplay(rip:%p, rsp:%p)\n", pRD->ControlPC, pRD->SP));
}
+#endif // !CROSSGEN_COMPILE
void TailCallFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
{
@@ -2311,7 +2312,6 @@ void TailCallFrame::InitFromContext(T_CONTEXT * pContext)
}
#endif // !DACCESS_COMPILE
-#endif // !CROSSGEN_COMPILE
void FaultingExceptionFrame::UpdateRegDisplay(const PREGDISPLAY pRD)
{
diff --git a/src/vm/ceeload.cpp b/src/vm/ceeload.cpp
index 6fa1e44519..12734fd7db 100644
--- a/src/vm/ceeload.cpp
+++ b/src/vm/ceeload.cpp
@@ -14846,7 +14846,7 @@ void ReflectionModule::ReleaseILData()
Module::ReleaseILData();
}
-#endif // CROSSGEN_COMPILE
+#endif // !CROSSGEN_COMPILE
#endif // !DACCESS_COMPILE
diff --git a/src/vm/ceeload.h b/src/vm/ceeload.h
index 4fecdef22e..9fc905cc8a 100644
--- a/src/vm/ceeload.h
+++ b/src/vm/ceeload.h
@@ -3686,6 +3686,7 @@ private:
// If true, then only other transient modules can depend on this module.
bool m_fIsTransient;
+#if !defined DACCESS_COMPILE && !defined CROSSGEN_COMPILE
// Returns true iff metadata capturing is suppressed
bool IsMetadataCaptureSuppressed();
@@ -3705,8 +3706,8 @@ private:
pModule->ResumeMetadataCapture();
}
-
ReflectionModule(Assembly *pAssembly, mdFile token, PEFile *pFile);
+#endif // !DACCESS_COMPILE && !CROSSGEN_COMPILE
public:
@@ -3715,14 +3716,13 @@ public:
PTR_SBuffer GetDynamicMetadataBuffer() const;
#endif
+#if !defined DACCESS_COMPILE && !defined CROSSGEN_COMPILE
static ReflectionModule *Create(Assembly *pAssembly, PEFile *pFile, AllocMemTracker *pamTracker, LPCWSTR szName, BOOL fIsTransient);
-
void Initialize(AllocMemTracker *pamTracker, LPCWSTR szName);
-
void Destruct();
-#ifndef DACCESS_COMPILE
+
void ReleaseILData();
-#endif
+#endif // !DACCESS_COMPILE && !CROSSGEN_COMPILE
// Overides functions to access sections
virtual TADDR GetIL(RVA target);
@@ -3786,17 +3786,14 @@ public:
}
#ifndef DACCESS_COMPILE
+#ifndef CROSSGEN_COMPILE
typedef Wrapper<
ReflectionModule*,
ReflectionModule::SuppressCaptureWrapper,
ReflectionModule::ResumeCaptureWrapper> SuppressMetadataCaptureHolder;
+#endif // !CROSSGEN_COMPILE
-
-
- // Eagerly serialize the metadata to a buffer that the debugger can retrieve.
- void CaptureModuleMetaDataToMemory();
-
HRESULT SetISymUnmanagedWriter(ISymUnmanagedWriter *pWriter)
{
CONTRACTL
@@ -3825,6 +3822,9 @@ public:
return S_OK;
}
#endif // !DACCESS_COMPILE
+
+ // Eagerly serialize the metadata to a buffer that the debugger can retrieve.
+ void CaptureModuleMetaDataToMemory();
};
// Module holders
diff --git a/src/vm/codeman.cpp b/src/vm/codeman.cpp
index 9dcd5eb25e..482553b9cb 100644
--- a/src/vm/codeman.cpp
+++ b/src/vm/codeman.cpp
@@ -1823,7 +1823,7 @@ void CodeFragmentHeap::RealBackoutMem(void *pMem
AddBlock(pMem, dwSize);
}
-#endif // CROSSGEN_COMPILE
+#endif // !CROSSGEN_COMPILE
//**************************************************************************
@@ -4012,7 +4012,17 @@ void EEJitManager::EnumMemoryRegions(CLRDataEnumMemoryFlags flags)
}
#endif // #ifdef DACCESS_COMPILE
-#endif // CROSSGEN_COMPILE
+#else // CROSSGEN_COMPILE
+// stub for compilation
+BOOL EEJitManager::JitCodeToMethodInfo(RangeSection * pRangeSection,
+ PCODE currentPC,
+ MethodDesc ** ppMethodDesc,
+ EECodeInfo * pCodeInfo)
+{
+ _ASSERTE(FALSE);
+ return FALSE;
+}
+#endif // !CROSSGEN_COMPILE
#ifndef DACCESS_COMPILE
diff --git a/src/vm/codeman.h b/src/vm/codeman.h
index 8e2c6293dc..e6ddde08fc 100644
--- a/src/vm/codeman.h
+++ b/src/vm/codeman.h
@@ -923,12 +923,13 @@ public:
return ret;
}
-#ifndef DACCESS_COMPILE
+#if !defined CROSSGEN_COMPILE && !defined DACCESS_COMPILE
EEJitManager();
// No destructor necessary. Only one instance of this class that is destroyed at process shutdown.
// ~EEJitManager();
-#endif // #ifndef DACCESS_COMPILE
+#endif // !CROSSGEN_COMPILE && !DACCESS_COMPILE
+
virtual DWORD GetCodeType()
{
@@ -936,6 +937,7 @@ public:
return (miManaged | miIL);
}
+#ifndef CROSSGEN_COMPILE
// Used to read debug info.
virtual BOOL GetBoundariesAndVars(
const DebugInfoRequest & request,
@@ -945,27 +947,29 @@ public:
OUT ULONG32 * pcVars,
OUT ICorDebugInfo::NativeVarInfo **ppVars);
+ virtual PCODE GetCodeAddressForRelOffset(const METHODTOKEN& MethodToken, DWORD relOffset);
+#endif // !CROSSGEN_COMPILE
+
virtual BOOL JitCodeToMethodInfo(RangeSection * pRangeSection,
PCODE currentPC,
MethodDesc ** ppMethodDesc,
EECodeInfo * pCodeInfo);
- virtual PCODE GetCodeAddressForRelOffset(const METHODTOKEN& MethodToken, DWORD relOffset);
-
virtual TADDR JitTokenToStartAddress(const METHODTOKEN& MethodToken);
virtual void JitTokenToMethodRegionInfo(const METHODTOKEN& MethodToken, MethodRegionInfo *methodRegionInfo);
+#ifndef CROSSGEN_COMPILE
virtual unsigned InitializeEHEnumeration(const METHODTOKEN& MethodToken, EH_CLAUSE_ENUMERATOR* pEnumState);
virtual PTR_EXCEPTION_CLAUSE_TOKEN GetNextEHClause(EH_CLAUSE_ENUMERATOR* pEnumState,
EE_ILEXCEPTION_CLAUSE* pEHclause);
#ifndef DACCESS_COMPILE
virtual TypeHandle ResolveEHClause(EE_ILEXCEPTION_CLAUSE* pEHClause,
CrawlFrame *pCf);
-#endif // #ifndef DACCESS_COMPILE
+#endif // !DACCESS_COMPILE
PTR_VOID GetGCInfo(const METHODTOKEN& MethodToken);
-#ifndef DACCESS_COMPILE
+#endif // !CROSSGEN_COMPILE
+#if !defined DACCESS_COMPILE && !defined CROSSGEN_COMPILE
void RemoveJitData(CodeHeader * pCHdr, size_t GCinfo_len, size_t EHinfo_len);
-
void Unload(LoaderAllocator* pAllocator);
void CleanupCodeHeaps();
@@ -977,7 +981,6 @@ public:
, TADDR * pModuleBase
#endif
);
- void allocEntryChunk(MethodDescChunk *pMDChunk);
BYTE * allocGCInfo(CodeHeader* pCodeHeader, DWORD blockSize, size_t * pAllocationSize);
EE_ILEXCEPTION* allocEHInfo(CodeHeader* pCodeHeader, unsigned numClauses, size_t * pAllocationSize);
JumpStubBlockHeader* allocJumpStubBlock(MethodDesc* pMD, DWORD numJumps,
@@ -985,11 +988,12 @@ public:
LoaderAllocator *pLoaderAllocator);
void * allocCodeFragmentBlock(size_t blockSize, unsigned alignment, LoaderAllocator *pLoaderAllocator, StubCodeBlockKind kind);
-#endif // #ifndef DACCESS_COMPILE
+#endif // !DACCESS_COMPILE && !CROSSGEN_COMPILE
static CodeHeader * GetCodeHeader(const METHODTOKEN& MethodToken);
static CodeHeader * GetCodeHeaderFromStartAddress(TADDR methodStartAddress);
+#ifndef CROSSGEN_COMPILE
#if defined(WIN64EXCEPTIONS)
// Compute function entry lazily. Do not call directly. Use EECodeInfo::GetFunctionEntry instead.
virtual PTR_RUNTIME_FUNCTION LazyGetFunctionEntry(EECodeInfo * pCodeInfo);
@@ -1002,6 +1006,7 @@ public:
#if defined(DACCESS_COMPILE)
virtual void EnumMemoryRegions(CLRDataEnumMemoryFlags flags);
virtual void EnumMemoryRegionsForMethodDebugInfo(CLRDataEnumMemoryFlags flags, MethodDesc * pMD);
+#endif // DACCESS_COMPILE
#if defined(WIN64EXCEPTIONS)
// Enumerate the memory necessary to retrieve the unwind info for a specific method
virtual void EnumMemoryRegionsForMethodUnwindInfo(CLRDataEnumMemoryFlags flags, EECodeInfo * pCodeInfo)
@@ -1013,21 +1018,24 @@ public:
// available at debug time).
}
#endif // WIN64EXCEPTIONS
-#endif // DACCESS_COMPILE
+#endif // !CROSSGEN_COMPILE
- // Heap Management functions
+#ifndef CROSSGEN_COMPILE
+#ifndef DACCESS_COMPILE
+ // Heap Management functions
void NibbleMapSet(HeapList * pHp, TADDR pCode, BOOL bSet);
+#endif // !DACCESS_COMPILE
static TADDR FindMethodCode(RangeSection * pRangeSection, PCODE currentPC);
static TADDR FindMethodCode(PCODE currentPC);
-
-#ifndef DACCESS_COMPILE
+#endif // !CROSSGEN_COMPILE
+
+#if !defined DACCESS_COMPILE && !defined CROSSGEN_COMPILE
void FreeCodeMemory(HostCodeHeap *pCodeHeap, void * codeStart);
void RemoveFromCleanupList(HostCodeHeap *pCodeHeap);
void AddToCleanupList(HostCodeHeap *pCodeHeap);
void DeleteCodeHeap(HeapList *pHeapList);
void RemoveCodeHeapFromDomainList(CodeHeap *pHeap, LoaderAllocator *pAllocator);
-#endif
private :
struct DomainCodeHeapList {
@@ -1036,8 +1044,11 @@ private :
DomainCodeHeapList();
~DomainCodeHeapList();
};
+#endif // !DACCESS_COMPILE && !CROSSGEN_COMPILE
+
#ifndef DACCESS_COMPILE
- HeapList* NewCodeHeap(CodeHeapRequestInfo *pInfo, DomainCodeHeapList *pADHeapList);
+#ifndef CROSSGEN_COMPILE
+ HeapList* NewCodeHeap(CodeHeapRequestInfo *pInfo, DomainCodeHeapList *pADHeapList);
HeapList* GetCodeHeap(CodeHeapRequestInfo *pInfo);
bool CanUseCodeHeap(CodeHeapRequestInfo *pInfo, HeapList *pCodeHeap);
void* allocCodeRaw(CodeHeapRequestInfo *pInfo,
@@ -1047,16 +1058,19 @@ private :
DomainCodeHeapList *GetCodeHeapList(MethodDesc *pMD, LoaderAllocator *pAllocator, BOOL fDynamicOnly = FALSE);
DomainCodeHeapList *CreateCodeHeapList(CodeHeapRequestInfo *pInfo);
LoaderHeap* GetJitMetaHeap(MethodDesc *pMD);
+#endif // !CROSSGEN_COMPILE
HeapList * GetCodeHeapList()
{
return m_pCodeHeap;
}
-protected :
+#ifndef CROSSGEN_COMPILE
+protected:
void * allocEHInfoRaw(CodeHeader* pCodeHeader, DWORD blockSize, size_t * pAllocationSize);
-private :
-#endif // #ifndef DACCESS_COMPILE
+private:
+#endif
+#endif // !DACCESS_COMPILE
PTR_HeapList m_pCodeHeap;
@@ -1096,7 +1110,9 @@ public:
private:
DWORD m_dwCPUCompileFlags;
+#if !defined CROSSGEN_COMPILE && !defined DACCESS_COMPILE
void SetCpuInfo();
+#endif
public:
inline DWORD GetCPUCompileFlags()
@@ -1110,9 +1126,11 @@ private :
//When EH Clauses are resolved we need to atomically update the TypeHandle
Crst m_EHClauseCritSec;
+#if !defined CROSSGEN_COMPILE && !defined DACCESS_COMPILE
// must hold critical section to access this structure.
CUnorderedArray<DomainCodeHeapList *, 5> m_DomainCodeHeaps;
CUnorderedArray<DomainCodeHeapList *, 5> m_DynamicDomainCodeHeaps;
+#endif
#ifdef _TARGET_AMD64_
private:
diff --git a/src/vm/frames.h b/src/vm/frames.h
index 4c4331403b..1030bc2777 100644
--- a/src/vm/frames.h
+++ b/src/vm/frames.h
@@ -3311,6 +3311,7 @@ class TailCallFrame : public Frame
#endif
public:
+#ifndef CROSSGEN_COMPILE
#if !defined(_TARGET_X86_)
#ifndef DACCESS_COMPILE
@@ -3360,7 +3361,7 @@ public:
}
virtual void UpdateRegDisplay(const PREGDISPLAY pRD);
-
+#endif // !CROSSGEN_COMPILE
#ifdef _TARGET_AMD64_
void SetGCLayout(TADDR pGCLayout)
{
diff --git a/src/vm/loaderallocator.cpp b/src/vm/loaderallocator.cpp
index 545d94fa51..6c30c7d80c 100644
--- a/src/vm/loaderallocator.cpp
+++ b/src/vm/loaderallocator.cpp
@@ -52,7 +52,10 @@ LoaderAllocator::LoaderAllocator()
m_pFatTokenSet = NULL;
#endif
+#ifndef CROSSGEN_COMPILE
m_pVirtualCallStubManager = NULL;
+#endif
+
m_fGCPressure = false;
m_fTerminated = false;
m_fUnloaded = false;
@@ -298,7 +301,7 @@ BOOL LoaderAllocator::EnsureInstantiation(Module *pDefiningModule, Instantiation
{
return FALSE;
}
-#endif // CROSSGEN_COMPILE
+#endif // !CROSSGEN_COMPILE
#ifndef CROSSGEN_COMPILE
bool LoaderAllocator::Marked()
@@ -881,7 +884,7 @@ void LoaderAllocator::ActivateManagedTracking()
LOADERALLOCATORREF loaderAllocator = (LOADERALLOCATORREF)ObjectFromHandle(m_hLoaderAllocatorObjectHandle);
loaderAllocator->SetNativeLoaderAllocator(this);
}
-#endif // CROSSGEN_COMPILE
+#endif // !CROSSGEN_COMPILE
// We don't actually allocate a low frequency heap for collectible types
@@ -1217,7 +1220,7 @@ void LoaderAllocator::Terminate()
LOG((LF_CLASSLOADER, LL_INFO100, "End LoaderAllocator::Terminate for loader allocator %p\n", reinterpret_cast<void *>(static_cast<PTR_LoaderAllocator>(this))));
}
-#endif // CROSSGEN_COMPILE
+#endif // !CROSSGEN_COMPILE
#else //DACCESS_COMPILE
@@ -1260,8 +1263,10 @@ SIZE_T LoaderAllocator::EstimateSize()
retval+=m_pStubHeap->GetSize();
if(m_pStringLiteralMap)
retval+=m_pStringLiteralMap->GetSize();
+#ifndef CROSSGEN_COMPILE
if(m_pVirtualCallStubManager)
retval+=m_pVirtualCallStubManager->GetSize();
+#endif
return retval;
}
@@ -1421,9 +1426,9 @@ void LoaderAllocator::UninitVirtualCallStubManager()
m_pVirtualCallStubManager = NULL;
}
}
-#endif // CROSSGEN_COMPILE
+#endif // !CROSSGEN_COMPILE
-#endif // DACCESS_COMPILE
+#endif // !DACCESS_COMPILE
BOOL GlobalLoaderAllocator::CanUnload()
{
@@ -1661,6 +1666,6 @@ void LoaderAllocator::CleanupFailedTypeInit()
pLock->Unlink(pItem->m_pListLockEntry);
}
}
-#endif // CROSSGEN_COMPILE
+#endif // !CROSSGEN_COMPILE
-#endif //!DACCES_COMPILE
+#endif // !DACCESS_COMPILE
diff --git a/src/vm/loaderallocator.hpp b/src/vm/loaderallocator.hpp
index a9166ea9f2..ec537c72b4 100644
--- a/src/vm/loaderallocator.hpp
+++ b/src/vm/loaderallocator.hpp
@@ -144,7 +144,9 @@ protected:
FatTokenSet *m_pFatTokenSet;
#endif
+#ifndef CROSSGEN_COMPILE
VirtualCallStubManager *m_pVirtualCallStubManager;
+#endif
private:
typedef SHash<PtrSetSHashTraits<LoaderAllocator * > > LoaderAllocatorSet;
@@ -432,11 +434,13 @@ public:
void InitVirtualCallStubManager(BaseDomain *pDomain, BOOL fCollectible = FALSE);
void UninitVirtualCallStubManager();
+#ifndef CROSSGEN_COMPILE
inline VirtualCallStubManager *GetVirtualCallStubManager()
{
LIMITED_METHOD_CONTRACT;
return m_pVirtualCallStubManager;
}
+#endif
}; // class LoaderAllocator
typedef VPTR(LoaderAllocator) PTR_LoaderAllocator;
diff --git a/src/vm/stubmgr.h b/src/vm/stubmgr.h
index 8dfb6686ad..d578171985 100644
--- a/src/vm/stubmgr.h
+++ b/src/vm/stubmgr.h
@@ -193,6 +193,7 @@ typedef VPTR(class StubManager) PTR_StubManager;
class StubManager
{
+#ifndef CROSSGEN_COMPILE
friend class StubManagerIterator;
VPTR_BASE_VTABLE_CLASS(StubManager)
@@ -326,6 +327,7 @@ private:
PTR_StubManager m_pNextManager;
static CrstStatic s_StubManagerListCrst;
+#endif // !CROSSGEN_COMPILE
};
// -------------------------------------------------------
@@ -375,6 +377,8 @@ class LockedRangeList : public RangeList
SimpleRWLock m_RangeListRWLock;
};
+#ifndef CROSSGEN_COMPILE
+
//-----------------------------------------------------------
// Stub manager for the prestub. Although there is just one, it has
// unique behavior so it gets its own stub manager.
@@ -991,4 +995,5 @@ public:
};
-#endif
+#endif // !CROSSGEN_COMPILE
+#endif // !__stubmgr_h__
diff --git a/src/vm/virtualcallstub.h b/src/vm/virtualcallstub.h
index 02605f237d..4d09d074a9 100644
--- a/src/vm/virtualcallstub.h
+++ b/src/vm/virtualcallstub.h
@@ -16,6 +16,8 @@
#ifndef _VIRTUAL_CALL_STUB_H
#define _VIRTUAL_CALL_STUB_H
+#ifndef CROSSGEN_COMPILE
+
#define CHAIN_LOOKUP
#if defined(_TARGET_X86_)
@@ -1619,5 +1621,6 @@ private:
static FastTable* dead; //linked list head of to be deleted (abandoned) buckets
};
-#endif // !_VIRTUAL_CALL_STUB_H
+#endif // !CROSSGEN_COMPILE
+#endif // !_VIRTUAL_CALL_STUB_H