X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=includes%2FmkDerivedConstants.c;h=b02b6c86f0aa7b0ebce30a5be4e5f6964570f27a;hp=c797941a9653c7c192335573364164791c8b4759;hb=HEAD;hpb=b067bdc33ce1a0bb01957b0bcfbb1c516dba53a4 diff --git a/includes/mkDerivedConstants.c b/includes/mkDerivedConstants.c index c797941..b02b6c8 100644 --- a/includes/mkDerivedConstants.c +++ b/includes/mkDerivedConstants.c @@ -21,39 +21,47 @@ #define THREADED_RTS #include "Rts.h" -#include "RtsFlags.h" -#include "Storage.h" + #include "Stable.h" -#include "OSThreads.h" #include "Capability.h" #include #define str(a,b) #a "_" #b -#define OFFSET(s_type, field) ((unsigned int)&(((s_type*)0)->field)) +#define OFFSET(s_type, field) ((size_t)&(((s_type*)0)->field)) #if defined(GEN_HASKELL) -#define def_offset(str, offset) \ - printf("oFFSET_" str " = %d::Int\n", offset); +#define def_offset(str, offset) \ + printf("oFFSET_" str " :: Int\n"); \ + printf("oFFSET_" str " = %lu\n", (unsigned long)offset); #else #define def_offset(str, offset) \ - printf("#define OFFSET_" str " %d\n", offset); + printf("#define OFFSET_" str " %lu\n", (unsigned long)offset); #endif #if defined(GEN_HASKELL) #define ctype(type) /* nothing */ #else #define ctype(type) \ - printf("#define SIZEOF_" #type " %d\n", sizeof(type)); + printf("#define SIZEOF_" #type " %lu\n", (unsigned long)sizeof(type)); #endif #if defined(GEN_HASKELL) #define field_type_(str, s_type, field) /* nothing */ +#define field_type_gcptr_(str, s_type, field) /* nothing */ #else +/* Defining REP_x to be b32 etc + These are both the C-- types used in a load + e.g. b32[addr] + and the names of the CmmTypes in the compiler + b32 :: CmmType +*/ #define field_type_(str, s_type, field) \ - printf("#define REP_" str " I"); \ - printf("%d\n", sizeof (__typeof__(((((s_type*)0)->field)))) * 8); + printf("#define REP_" str " b"); \ + printf("%lu\n", (unsigned long)sizeof (__typeof__(((((s_type*)0)->field)))) * 8); +#define field_type_gcptr_(str, s_type, field) \ + printf("#define REP_" str " gcptr\n"); #endif #define field_type(s_type, field) \ @@ -81,18 +89,19 @@ struct_field_macro(str) #if defined(GEN_HASKELL) -#define def_size(str, size) \ - printf("sIZEOF_" str " = %d::Int\n", size); +#define def_size(str, size) \ + printf("sIZEOF_" str " :: Int\n"); \ + printf("sIZEOF_" str " = %lu\n", (unsigned long)size); #else #define def_size(str, size) \ - printf("#define SIZEOF_" str " %d\n", size); + printf("#define SIZEOF_" str " %lu\n", (unsigned long)size); #endif #if defined(GEN_HASKELL) #define def_closure_size(str, size) /* nothing */ #else #define def_closure_size(str, size) \ - printf("#define SIZEOF_" str " (SIZEOF_StgHeader+%d)\n", size); + printf("#define SIZEOF_" str " (SIZEOF_StgHeader+%lu)\n", (unsigned long)size); #endif #define struct_size(s_type) \ @@ -128,24 +137,30 @@ closure_payload_macro(str(s_type,field)); /* Byte offset and MachRep for a closure field, minus the header */ +#define closure_field_(str, s_type, field) \ + closure_field_offset_(str,s_type,field) \ + field_type_(str, s_type, field); \ + closure_field_macro(str) + #define closure_field(s_type, field) \ - closure_field_offset(s_type,field) \ - field_type(s_type, field); \ - closure_field_macro(str(s_type,field)) + closure_field_(str(s_type,field),s_type,field) /* Byte offset and MachRep for a closure field, minus the header */ -#define closure_field_(str, s_type, field) \ +#define closure_field_gcptr_(str, s_type, field) \ closure_field_offset_(str,s_type,field) \ - field_type_(str, s_type, field); \ + field_type_gcptr_(str, s_type, field); \ closure_field_macro(str) +#define closure_field_gcptr(s_type, field) \ + closure_field_gcptr_(str(s_type,field),s_type,field) + /* Byte offset for a TSO field, minus the header and variable prof bit. */ #define tso_payload_offset(s_type, field) \ def_offset(str(s_type,field), OFFSET(s_type,field) - sizeof(StgHeader) - sizeof(StgTSOProfInfo)); /* Full byte offset for a TSO field, for use from Cmm */ #define tso_field_offset_macro(str) \ - printf("#define TSO_OFFSET_" str " (SIZEOF_StgHeader+SIZEOF_OPT_StgTSOProfInfo+SIZEOF_OPT_StgTSOParInfo+SIZEOF_OPT_StgTSOGranInfo+SIZEOF_OPT_StgTSODistInfo+OFFSET_" str ")\n"); + printf("#define TSO_OFFSET_" str " (SIZEOF_StgHeader+SIZEOF_OPT_StgTSOProfInfo+OFFSET_" str ")\n"); #define tso_field_offset(s_type, field) \ tso_payload_offset(s_type, field); \ @@ -174,20 +189,14 @@ main(int argc, char *argv[]) #ifndef GEN_HASKELL printf("/* This file is created automatically. Do not edit by hand.*/\n\n"); - printf("#define STD_HDR_SIZE %d\n", sizeofW(StgHeader) - sizeofW(StgProfHeader)); + printf("#define STD_HDR_SIZE %lu\n", (unsigned long)sizeofW(StgHeader) - sizeofW(StgProfHeader)); /* grrr.. PROFILING is on so we need to subtract sizeofW(StgProfHeader) */ - printf("#define PROF_HDR_SIZE %d\n", sizeofW(StgProfHeader)); - printf("#define GRAN_HDR_SIZE %d\n", sizeofW(StgGranHeader)); + printf("#define PROF_HDR_SIZE %lu\n", (unsigned long)sizeofW(StgProfHeader)); - printf("#define STD_ITBL_SIZE %d\n", sizeofW(StgInfoTable)); - printf("#define RET_ITBL_SIZE %d\n", sizeofW(StgRetInfoTable) - sizeofW(StgInfoTable)); - printf("#define PROF_ITBL_SIZE %d\n", sizeofW(StgProfInfo)); - - printf("#define GRAN_ITBL_SIZE %d\n", 0); - printf("#define TICKY_ITBL_SIZE %d\n", 0); - - printf("#define BLOCK_SIZE %d\n", BLOCK_SIZE); - printf("#define MBLOCK_SIZE %d\n", MBLOCK_SIZE); + printf("#define BLOCK_SIZE %u\n", BLOCK_SIZE); + printf("#define MBLOCK_SIZE %u\n", MBLOCK_SIZE); + printf("#define BLOCKS_PER_MBLOCK %lu\n", (lnat)BLOCKS_PER_MBLOCK); + // could be derived, but better to save doing the calculation twice printf("\n\n"); #endif @@ -217,20 +226,18 @@ main(int argc, char *argv[]) field_offset(StgRegTable, rCurrentNursery); field_offset(StgRegTable, rHpAlloc); struct_field(StgRegTable, rRet); + struct_field(StgRegTable, rNursery); - // Needed for SMP builds - field_offset(StgRegTable, rmp_tmp_w); - field_offset(StgRegTable, rmp_tmp1); - field_offset(StgRegTable, rmp_tmp2); - field_offset(StgRegTable, rmp_result1); - field_offset(StgRegTable, rmp_result2); - + def_offset("stgEagerBlackholeInfo", FUN_OFFSET(stgEagerBlackholeInfo)); def_offset("stgGCEnter1", FUN_OFFSET(stgGCEnter1)); def_offset("stgGCFun", FUN_OFFSET(stgGCFun)); field_offset(Capability, r); field_offset(Capability, lock); + struct_field(Capability, no); struct_field(Capability, mut_lists); + struct_field(Capability, context_switch); + struct_field(Capability, sparks); struct_field(bdescr, start); struct_field(bdescr, free); @@ -239,7 +246,7 @@ main(int argc, char *argv[]) struct_field(bdescr, link); struct_size(generation); - struct_field(generation, mut_list); + struct_field(generation, n_new_large_words); struct_size(CostCentreStack); struct_field(CostCentreStack, ccsID); @@ -269,12 +276,13 @@ main(int argc, char *argv[]) closure_size(StgMutArrPtrs); closure_field(StgMutArrPtrs, ptrs); + closure_field(StgMutArrPtrs, size); closure_size(StgArrWords); - closure_field(StgArrWords, words); + closure_field(StgArrWords, bytes); closure_payload(StgArrWords, payload); - closure_field(StgTSO, link); + closure_field(StgTSO, _link); closure_field(StgTSO, global_link); closure_field(StgTSO, what_next); closure_field(StgTSO, why_blocked); @@ -285,20 +293,19 @@ main(int argc, char *argv[]) closure_field(StgTSO, saved_errno); closure_field(StgTSO, trec); closure_field(StgTSO, flags); + closure_field(StgTSO, dirty); + closure_field(StgTSO, bq); closure_field_("StgTSO_CCCS", StgTSO, prof.CCCS); - tso_field(StgTSO, sp); - tso_field_offset(StgTSO, stack); - tso_field(StgTSO, stack_size); + closure_field(StgTSO, stackobj); + + closure_field(StgStack, sp); + closure_field_offset(StgStack, stack); + closure_field(StgStack, stack_size); + closure_field(StgStack, dirty); struct_size(StgTSOProfInfo); - struct_size(StgTSOParInfo); - struct_size(StgTSOGranInfo); - struct_size(StgTSODistInfo); opt_struct_size(StgTSOProfInfo,PROFILING); - opt_struct_size(StgTSOParInfo,PAR); - opt_struct_size(StgTSOGranInfo,GRAN); - opt_struct_size(StgTSODistInfo,DIST); closure_field(StgUpdateFrame, updatee); @@ -307,23 +314,23 @@ main(int argc, char *argv[]) closure_size(StgPAP); closure_field(StgPAP, n_args); - closure_field(StgPAP, fun); + closure_field_gcptr(StgPAP, fun); closure_field(StgPAP, arity); closure_payload(StgPAP, payload); thunk_size(StgAP); closure_field(StgAP, n_args); - closure_field(StgAP, fun); + closure_field_gcptr(StgAP, fun); closure_payload(StgAP, payload); thunk_size(StgAP_STACK); closure_field(StgAP_STACK, size); - closure_field(StgAP_STACK, fun); + closure_field_gcptr(StgAP_STACK, fun); closure_payload(StgAP_STACK, payload); thunk_size(StgSelector); - closure_field(StgInd, indirectee); + closure_field_gcptr(StgInd, indirectee); closure_size(StgMutVar); closure_field(StgMutVar, var); @@ -331,6 +338,7 @@ main(int argc, char *argv[]) closure_size(StgAtomicallyFrame); closure_field(StgAtomicallyFrame, code); closure_field(StgAtomicallyFrame, next_invariant_to_check); + closure_field(StgAtomicallyFrame, result); closure_field(StgInvariantCheckQueue, invariant); closure_field(StgInvariantCheckQueue, my_execution); @@ -338,6 +346,8 @@ main(int argc, char *argv[]) closure_field(StgAtomicInvariant, code); + closure_field(StgTRecHeader, enclosing_trec); + closure_size(StgCatchSTMFrame); closure_field(StgCatchSTMFrame, handler); closure_field(StgCatchSTMFrame, code); @@ -351,11 +361,14 @@ main(int argc, char *argv[]) closure_field(StgTVarWatchQueue, next_queue_entry); closure_field(StgTVarWatchQueue, prev_queue_entry); + closure_field(StgTVar, current_value); + closure_size(StgWeak); closure_field(StgWeak,link); closure_field(StgWeak,key); closure_field(StgWeak,value); closure_field(StgWeak,finalizer); + closure_field(StgWeak,cfinalizer); closure_size(StgDeadWeak); closure_field(StgDeadWeak,link); @@ -365,6 +378,10 @@ main(int argc, char *argv[]) closure_field(StgMVar,tail); closure_field(StgMVar,value); + closure_size(StgMVarTSOQueue); + closure_field(StgMVarTSOQueue, link); + closure_field(StgMVarTSOQueue, tso); + closure_size(StgBCO); closure_field(StgBCO, instrs); closure_field(StgBCO, literals); @@ -376,6 +393,17 @@ main(int argc, char *argv[]) closure_size(StgStableName); closure_field(StgStableName,sn); + closure_size(StgBlockingQueue); + closure_field(StgBlockingQueue, bh); + closure_field(StgBlockingQueue, owner); + closure_field(StgBlockingQueue, queue); + closure_field(StgBlockingQueue, link); + + closure_size(MessageBlackHole); + closure_field(MessageBlackHole, link); + closure_field(MessageBlackHole, tso); + closure_field(MessageBlackHole, bh); + struct_field_("RtsFlags_ProfFlags_showCCSOnException", RTS_FLAGS, ProfFlags.showCCSOnException); struct_field_("RtsFlags_DebugFlags_apply", @@ -415,11 +443,5 @@ main(int argc, char *argv[]) struct_field(StgAsyncIOResult, errCode); #endif - struct_size(MP_INT); - struct_field(MP_INT,_mp_alloc); - struct_field(MP_INT,_mp_size); - struct_field(MP_INT,_mp_d); - - ctype(mp_limb_t); return 0; }