Skip to content

Commit c2b9b66

Browse files
committed
some fixes for writebarrier verification
only build the verification related code when GLOBAL_ENABLE_WRITE_BARRIER is on
1 parent 420ca0b commit c2b9b66

File tree

11 files changed

+26
-23
lines changed

11 files changed

+26
-23
lines changed

lib/Backend/JnHelperMethodList.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ HELPERCALL(OP_CmGe_A, Js::JavascriptOperators::OP_CmGe_A, AttrCanThrow)
334334
HELPERCALL(Conv_ToUInt32_Full, Js::JavascriptConversion::ToUInt32_Full, AttrCanThrow)
335335
HELPERCALL(Conv_ToUInt32, (uint32 (*)(Js::Var, Js::ScriptContext *))Js::JavascriptConversion::ToUInt32, AttrCanThrow)
336336

337-
#if DBG
337+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
338338
HELPERCALL(WriteBarrierSetVerifyBit, Memory::Recycler::WBSetBitJIT, 0)
339339
#endif
340340
#ifdef _M_IX86

lib/Backend/Lower.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ Lowerer::Lower()
101101

102102
this->LowerRange(m_func->m_headInstr, m_func->m_tailInstr, defaultDoFastPath, loopFastPath);
103103

104-
#if DBG
104+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
105105
// TODO: (leish)(swb) implement for arm
106106
#if defined(_M_IX86) || defined(_M_AMD64)
107107
if (CONFIG_FLAG(ForceSoftwareWriteBarrier) && CONFIG_FLAG(RecyclerVerifyMark))

lib/Backend/LowerMDShared.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4784,7 +4784,7 @@ LowererMD::GenerateWriteBarrierAssign(IR::MemRefOpnd * opndDst, IR::Opnd * opndS
47844784

47854785
IR::Instr * movInstr = IR::Instr::New(Js::OpCode::MOV, cardTableEntry, IR::IntConstOpnd::New(1, TyInt8, insertBeforeInstr->m_func), insertBeforeInstr->m_func);
47864786
insertBeforeInstr->InsertBefore(movInstr);
4787-
#if DBG
4787+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
47884788
if (CONFIG_FLAG(ForceSoftwareWriteBarrier) && CONFIG_FLAG(RecyclerVerifyMark))
47894789
{
47904790
this->LoadHelperArgument(insertBeforeInstr, opndDst);

lib/Common/Memory/HeapBlock.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -785,7 +785,7 @@ SmallHeapBlockT<TBlockAttributes>::ClearExplicitFreeBitForObject(void* objectAdd
785785

786786
#ifdef RECYCLER_VERIFY_MARK
787787

788-
#if DBG
788+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
789789
void HeapBlock::WBPrintMissingBarrier(Recycler* recycler, char* objectAddress, char* target)
790790
{
791791
#ifdef TRACK_ALLOC
@@ -968,7 +968,7 @@ SmallHeapBlockT<TBlockAttributes>::VerifyMark()
968968
void* target = *(void**) objectAddress;
969969
if (recycler->VerifyMark(target))
970970
{
971-
#if DBG
971+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
972972
if (CONFIG_FLAG(ForceSoftwareWriteBarrier))
973973
{
974974
uint verifyBitIndex = (BVIndex)(objectAddress - this->address) / sizeof(void*);
@@ -1418,7 +1418,7 @@ SmallHeapBlockT<TBlockAttributes>::EnqueueProcessedObject(FreeObject ** list, vo
14181418
freeObject->SetNext(*list);
14191419
*list = freeObject;
14201420

1421-
#if DBG
1421+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
14221422
if (CONFIG_FLAG(ForceSoftwareWriteBarrier) && CONFIG_FLAG(RecyclerVerifyMark))
14231423
{
14241424
this->WBClearBits((char*)objectAddress);

lib/Common/Memory/HeapBlock.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,13 +315,14 @@ class HeapBlock
315315

316316
return false;
317317
}
318-
#if DBG
318+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
319319
virtual void WBSetBit(char* addr) = 0;
320320
virtual void WBSetBits(char* addr, uint length) = 0;
321321
virtual void WBClearBits(char* addr) = 0;
322-
323322
void WBPrintMissingBarrier(Recycler* recycler, char* objectAddress, char* target);
323+
#endif
324324

325+
#if DBG
325326
virtual BOOL IsFreeObject(void* objectAddress) = 0;
326327
#endif
327328
virtual BOOL IsValidObject(void* objectAddress) = 0;
@@ -462,7 +463,7 @@ class SmallHeapBlockT : public HeapBlock
462463
void ProtectUnusablePages() {}
463464
void RestoreUnusablePages() {}
464465

465-
#if DBG
466+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
466467
virtual void WBSetBit(char* addr) override
467468
{
468469
uint index = (uint)(addr - this->address) / sizeof(void*);

lib/Common/Memory/LargeHeapBlock.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ LargeHeapBlock::LargeHeapBlock(__in char * address, size_t pageCount, Segment *
175175
#if defined(RECYCLER_PAGE_HEAP) && defined(STACK_BACK_TRACE)
176176
, pageHeapAllocStack(nullptr), pageHeapFreeStack(nullptr)
177177
#endif
178-
#if DBG
178+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
179179
,wbVerifyBits(&HeapAllocator::Instance)
180180
#endif
181181
{
@@ -851,7 +851,7 @@ LargeHeapBlock::VerifyMark()
851851

852852
if (recycler->VerifyMark(target))
853853
{
854-
#if DBG
854+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
855855
if (CONFIG_FLAG(ForceSoftwareWriteBarrier))
856856
{
857857
if (!this->wbVerifyBits.Test((BVIndex)(objectAddress - this->address) / sizeof(void*)))
@@ -2103,7 +2103,7 @@ LargeHeapBlock::CapturePageHeapFreeStack()
21032103
}
21042104
#endif
21052105

2106-
#if DBG
2106+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
21072107
void LargeHeapBlock::WBSetBit(char* addr)
21082108
{
21092109
uint index = (uint)(addr - this->address) / sizeof(void*);

lib/Common/Memory/LargeHeapBlock.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ class LargeHeapBlock sealed : public HeapBlock
303303
void ** GetTrackerDataArray();
304304
#endif
305305

306-
#if DBG
306+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
307307
private:
308308
BVSparse<HeapAllocator> wbVerifyBits;
309309
public:

lib/Common/Memory/Recycler.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -463,12 +463,12 @@ Recycler::~Recycler()
463463
#if ENABLE_CONCURRENT_GC
464464
Assert(!this->isAborting);
465465
#endif
466-
#if DBG
466+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
467467
if (recyclerList == this)
468468
{
469469
recyclerList = this->next;
470470
}
471-
else
471+
else if(recyclerList)
472472
{
473473
Recycler* list = recyclerList;
474474
while (list->next != this)
@@ -734,7 +734,7 @@ Recycler::RootRelease(void* obj, uint *count)
734734
// another GC if there is an exhaustive GC going on.
735735
this->CollectNow<CollectExhaustiveCandidate>();
736736
}
737-
#if DBG
737+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
738738
Recycler* Recycler::recyclerList = nullptr;
739739
#endif
740740

@@ -921,7 +921,7 @@ Recycler::Initialize(const bool forceInThread, JsUtil::ThreadService *threadServ
921921
#else
922922
Assert(!needWriteWatch);
923923
#endif
924-
#if DBG
924+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
925925
this->next = recyclerList;
926926
recyclerList = this;
927927
#endif
@@ -8555,7 +8555,7 @@ Recycler::UnRegisterPendingWriteBarrierBlock(void* address)
85558555
}
85568556
#endif
85578557

8558-
#if DBG
8558+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
85598559
void
85608560
Recycler::WBSetBit(char* addr)
85618561
{

lib/Common/Memory/Recycler.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1938,7 +1938,7 @@ class Recycler
19381938
void UnRegisterPendingWriteBarrierBlock(void* address);
19391939
#endif
19401940

1941-
#if DBG
1941+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
19421942
private:
19431943
static Recycler* recyclerList;
19441944
Recycler* next;
@@ -2121,11 +2121,13 @@ class RecyclerHeapObjectInfo
21212121
class CollectedRecyclerWeakRefHeapBlock : public HeapBlock
21222122
{
21232123
public:
2124-
#if DBG
2124+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
21252125
virtual void WBSetBit(char* addr) override { Assert(false); }
21262126
virtual void WBSetBits(char* addr, uint length) override { Assert(false); }
21272127
virtual void WBClearBits(char* addr) override { Assert(false); }
2128+
#endif
21282129

2130+
#if DBG
21292131
virtual BOOL IsFreeObject(void* objectAddress) override { Assert(false); return false; }
21302132
#endif
21312133
virtual BOOL IsValidObject(void* objectAddress) override { Assert(false); return false; }

lib/Common/Memory/Recycler.inl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ Recycler::AllocZeroWithAttributesInlined(DECLSPEC_GUARD_OVERFLOW size_t size)
275275
VerifyPageHeapFillAfterAlloc<attributes>(obj, size);
276276
#endif
277277

278-
#if DBG
278+
#if DBG && GLOBAL_ENABLE_WRITE_BARRIER
279279
if (CONFIG_FLAG(ForceSoftwareWriteBarrier) && CONFIG_FLAG(RecyclerVerifyMark))
280280
{
281281
this->FindHeapBlock(obj)->WBClearBits(obj);

0 commit comments

Comments
 (0)