From 081e9e53205935280f1800f113760a8a72498a6f Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Tue, 27 Jun 2006 12:39:51 +0000 Subject: [PATCH] fix up slop-overwriting for THUNK_SELECTORS in DEBUG mode --- includes/mkDerivedConstants.c | 2 ++ rts/Updates.h | 24 ++++++++++++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/includes/mkDerivedConstants.c b/includes/mkDerivedConstants.c index 62d9490..689851e 100644 --- a/includes/mkDerivedConstants.c +++ b/includes/mkDerivedConstants.c @@ -318,6 +318,8 @@ main(int argc, char *argv[]) closure_field(StgAP_STACK, fun); closure_payload(StgAP_STACK, payload); + thunk_size(StgSelector); + closure_field(StgInd, indirectee); closure_size(StgMutVar); diff --git a/rts/Updates.h b/rts/Updates.h index 5872157..f20b088 100644 --- a/rts/Updates.h +++ b/rts/Updates.h @@ -198,17 +198,20 @@ extern void awakenBlockedQueue(StgBlockingQueueElement *q, StgClosure *node); W_ sz; \ W_ i; \ inf = %GET_STD_INFO(p); \ - if (%INFO_TYPE(inf) != HALF_W_(THUNK_SELECTOR) \ - && %INFO_TYPE(inf) != HALF_W_(BLACKHOLE) \ + if (%INFO_TYPE(inf) != HALF_W_(BLACKHOLE) \ && %INFO_TYPE(inf) != HALF_W_(CAF_BLACKHOLE)) { \ - if (%INFO_TYPE(inf) == HALF_W_(AP_STACK)) { \ - sz = StgAP_STACK_size(p) + BYTES_TO_WDS(SIZEOF_StgAP_STACK_NoThunkHdr); \ - } else { \ - if (%INFO_TYPE(inf) == HALF_W_(AP)) { \ - sz = TO_W_(StgAP_n_args(p)) + BYTES_TO_WDS(SIZEOF_StgAP_NoThunkHdr); \ + if (%INFO_TYPE(inf) == HALF_W_(THUNK_SELECTOR)) { \ + sz = BYTES_TO_WDS(SIZEOF_StgSelector_NoThunkHdr); \ + } else { \ + if (%INFO_TYPE(inf) == HALF_W_(AP_STACK)) { \ + sz = StgAP_STACK_size(p) + BYTES_TO_WDS(SIZEOF_StgAP_STACK_NoThunkHdr); \ } else { \ - sz = TO_W_(%INFO_PTRS(inf)) + TO_W_(%INFO_NPTRS(inf)); \ - } \ + if (%INFO_TYPE(inf) == HALF_W_(AP)) { \ + sz = TO_W_(StgAP_n_args(p)) + BYTES_TO_WDS(SIZEOF_StgAP_NoThunkHdr); \ + } else { \ + sz = TO_W_(%INFO_PTRS(inf)) + TO_W_(%INFO_NPTRS(inf)); \ + } \ + } \ } \ i = 0; \ for: \ @@ -231,7 +234,8 @@ FILL_SLOP(StgClosure *p) case BLACKHOLE: case CAF_BLACKHOLE: case THUNK_SELECTOR: - return; + sz = sizeofW(StgSelector) - sizeofW(StgThunkHeader); + break; case AP: sz = ((StgAP *)p)->n_args + sizeofW(StgAP) - sizeofW(StgThunkHeader); break; -- 1.7.10.4