From 775ea03078b2bd1039458e7d1d9242d904523103 Mon Sep 17 00:00:00 2001 From: Sven Tennie Date: Sat, 25 Mar 2023 15:14:02 +0000 Subject: Sanity.c --- rts/sm/Sanity.c | 14 ++++++-------- rts/sm/Scav.c | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/rts/sm/Sanity.c b/rts/sm/Sanity.c index ac5a35f658..471f0278f2 100644 --- a/rts/sm/Sanity.c +++ b/rts/sm/Sanity.c @@ -125,7 +125,7 @@ checkStackFrame( StgPtr c ) case CATCH_RETRY_FRAME: case CATCH_STM_FRAME: case CATCH_FRAME: - // small bitmap cases (<= 32 entries) + // small bitmap cases (<= 27 entries (32bit arch) or <= 58 entries (64bit arch)) case UNDERFLOW_FRAME: case STOP_FRAME: case RET_SMALL: @@ -135,16 +135,14 @@ checkStackFrame( StgPtr c ) return 1 + size; case RET_BCO: { - // TODO: Adjust - StgBCO *bco; - uint32_t size; - bco = (StgBCO *)*(c+1); - size = BCO_BITMAP_SIZE(bco); - checkLargeBitmap((StgPtr)c + 2, BCO_BITMAP(bco), size); + StgRetBCO* retBCO = (StgRetBCO*) c; + StgWord size; + size = BCO_BITMAP_SIZE(retBCO->bco); + checkLargeBitmap((StgPtr) &retBCO->args, BCO_BITMAP(retBCO->bco), size); return 2 + size; } - case RET_BIG: // large bitmap (> 32 entries) + case RET_BIG: // large bitmap (> 27 entries (32bit arch) or > 58 entries (64bit arch)) size = GET_LARGE_BITMAP(&info->i)->size; checkLargeBitmap((StgPtr)c + 1, GET_LARGE_BITMAP(&info->i), size); return 1 + size; diff --git a/rts/sm/Scav.c b/rts/sm/Scav.c index 7bc0872f53..9999f9cef9 100644 --- a/rts/sm/Scav.c +++ b/rts/sm/Scav.c @@ -1984,7 +1984,7 @@ scavenge_stack(StgPtr p, StgPtr stack_end) case RET_BCO: { StgRetBCO* retBCO; - StgWord size; + StgHalfWord size; retBCO = (StgRetBCO *) p; evacuate((StgClosure **) &retBCO->bco); -- cgit v1.2.1