summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Tennie <sven.tennie@wire.com>2023-03-25 15:14:02 +0000
committerSven Tennie <sven.tennie@wire.com>2023-03-25 15:14:02 +0000
commit775ea03078b2bd1039458e7d1d9242d904523103 (patch)
tree316994c185c9ca9a273cbf918168e99b06e2809b
parentc289e31721ac471b78a106c652e6409dcc6d51da (diff)
downloadhaskell-wip/supersven/StgRetBCO-struct.tar.gz
-rw-r--r--rts/sm/Sanity.c14
-rw-r--r--rts/sm/Scav.c2
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);