X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FcodeGen%2FCgProf.hs;fp=ghc%2Fcompiler%2FcodeGen%2FCgProf.hs;h=f43982d4c1ec2a95ee466c48c16372c371ed6de0;hb=6a51f7df593cf73f4093bb1948d62db504fa6631;hp=844f1d75d21eaf0e17809c94b62f2d6d14e10538;hpb=5970d44a22c5ac1b79515d7978db2754adc363c6;p=ghc-hetmet.git diff --git a/ghc/compiler/codeGen/CgProf.hs b/ghc/compiler/codeGen/CgProf.hs index 844f1d7..f43982d 100644 --- a/ghc/compiler/codeGen/CgProf.hs +++ b/ghc/compiler/codeGen/CgProf.hs @@ -24,6 +24,8 @@ module CgProf ( ) where #include "HsVersions.h" +#include "MachDeps.h" + -- For WORD_SIZE_IN_BITS only. #include "../includes/Constants.h" -- For LDV_CREATE_MASK, LDV_STATE_USE -- which are StgWords @@ -312,18 +314,13 @@ emitCostCentreStackDecl emitCostCentreStackDecl ccs | Just cc <- maybeSingletonCCS ccs = do { let - lits = [ zero, - mkCCostCentre cc, - zero, -- struct _CostCentreStack *prevStack; - zero, -- struct _IndexTable *indexTable; - zero64, -- StgWord64 scc_count; - zero, -- StgWord selected; - zero, -- StgWord time_ticks; - zero64, -- StgWord64 mem_alloc; - zero64, -- StgWord64 inherited_alloc; - zero, -- StgWord inherited_ticks; - zero -- CostCentre *root; - ] + -- Note: to avoid making any assumptions about how the + -- C compiler (that compiles the RTS, in particular) does + -- layouts of structs containing long-longs, simply + -- pad out the struct with zero words until we hit the + -- size of the overall struct (which we get via DerivedConstants.h) + -- + lits = zero : mkCCostCentre cc : replicate (sizeof_ccs_words - 2) zero ; emitDataLits (mkCCSLabel ccs) lits } | otherwise = pprPanic "emitCostCentreStackDecl" (ppr ccs) @@ -331,6 +328,13 @@ emitCostCentreStackDecl ccs zero = mkIntCLit 0 zero64 = CmmInt 0 I64 +sizeof_ccs_words :: Int +sizeof_ccs_words + -- round up to the next word. + | ms == 0 = ws + | otherwise = ws + 1 + where + (ws,ms) = SIZEOF_CostCentreStack `divMod` wORD_SIZE -- --------------------------------------------------------------------------- -- Registering CCs and CCSs