blob: 636174d2265c4c4655308b25103f04e30387683e [file]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#pragma once
class ServerThreadContext : public ThreadContextInfo
{
#if ENABLE_OOP_NATIVE_CODEGEN
public:
typedef BVSparseNode<JitArenaAllocator> BVSparseNode;
ServerThreadContext(ThreadContextDataIDL * data);
~ServerThreadContext();
virtual HANDLE GetProcessHandle() const override;
virtual bool IsThreadBound() const override;
virtual size_t GetScriptStackLimit() const override;
virtual intptr_t GetThreadStackLimitAddr() const override;
#if defined(ENABLE_SIMDJS) && (defined(_M_IX86) || defined(_M_X64))
virtual intptr_t GetSimdTempAreaAddr(uint8 tempIndex) const override;
#endif
virtual intptr_t GetDisableImplicitFlagsAddr() const override;
virtual intptr_t GetImplicitCallFlagsAddr() const override;
virtual intptr_t GetBailOutRegisterSaveSpaceAddr() const override;
PreReservedSectionAllocWrapper * GetPreReservedSectionAllocator();
virtual bool IsNumericProperty(Js::PropertyId propId) override;
ptrdiff_t GetChakraBaseAddressDifference() const;
ptrdiff_t GetCRTBaseAddressDifference() const;
OOPCodeGenAllocators * GetCodeGenAllocators();
#if defined(_CONTROL_FLOW_GUARD) && (_M_IX86 || _M_X64)
OOPJITThunkEmitter * GetJITThunkEmitter();
#endif
CustomHeap::OOPCodePageAllocators * GetThunkPageAllocators();
CustomHeap::OOPCodePageAllocators * GetCodePageAllocators();
SectionAllocWrapper * GetSectionAllocator();
void UpdateNumericPropertyBV(BVSparseNode * newProps);
void SetWellKnownHostTypeId(Js::TypeId typeId) { this->wellKnownHostTypeIds[WellKnownHostType_HTMLAllCollection] = typeId; }
void AddRef();
void Release();
void Close();
PageAllocator * GetForegroundPageAllocator();
#ifdef STACK_BACK_TRACE
DWORD GetRuntimePid() { return m_pid; }
#endif
intptr_t GetRuntimeChakraBaseAddress() const;
intptr_t GetRuntimeCRTBaseAddress() const;
intptr_t GetJITCRTBaseAddress() const;
private:
class AutoCloseHandle
{
public:
AutoCloseHandle(HANDLE handle) : handle(handle) { Assert(handle != GetCurrentProcess()); }
~AutoCloseHandle() { CloseHandle(this->handle); }
private:
HANDLE handle;
};
AutoCloseHandle m_autoProcessHandle;
BVSparse<HeapAllocator> * m_numericPropertyBV;
PreReservedSectionAllocWrapper m_preReservedSectionAllocator;
SectionAllocWrapper m_sectionAllocator;
CustomHeap::OOPCodePageAllocators m_thunkPageAllocators;
CustomHeap::OOPCodePageAllocators m_codePageAllocators;
#if defined(_CONTROL_FLOW_GUARD) && (_M_IX86 || _M_X64)
OOPJITThunkEmitter m_jitThunkEmitter;
#endif
OOPCodeGenAllocators m_codeGenAlloc;
// only allocate with this from foreground calls (never from CodeGen calls)
PageAllocator m_pageAlloc;
ThreadContextDataIDL m_threadContextData;
DWORD m_pid; //save client process id for easier diagnose
CriticalSection m_cs;
uint m_refCount;
#endif
};