diff options
author | Sven Tennie <sven.tennie@wire.com> | 2023-03-25 15:14:02 +0000 |
---|---|---|
committer | Sven Tennie <sven.tennie@wire.com> | 2023-03-25 15:14:02 +0000 |
commit | 775ea03078b2bd1039458e7d1d9242d904523103 (patch) | |
tree | 316994c185c9ca9a273cbf918168e99b06e2809b | |
parent | c289e31721ac471b78a106c652e6409dcc6d51da (diff) | |
download | haskell-775ea03078b2bd1039458e7d1d9242d904523103.tar.gz |
Sanity.cwip/supersven/StgRetBCO-struct
-rw-r--r-- | rts/sm/Sanity.c | 14 | ||||
-rw-r--r-- | 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); |