Rodrigo Mesquita pushed to branch wip/romes/26325 at Glasgow Haskell Compiler / GHC

Commits:

3 changed files:

Changes:

  • compiler/GHC/ByteCode/Asm.hs
    ... ... @@ -843,16 +843,18 @@ assembleI platform i = case i of
    843 843
     
    
    844 844
       BRK_FUN ibi@(InternalBreakpointId info_mod infox) -> do
    
    845 845
         p1 <- ptr $ BCOPtrBreakArray info_mod
    
    846
    -    let -- cast that checks that round-tripping through Word16 doesn't change the value
    
    847
    -        toW16 x = let r = fromIntegral x :: Word16
    
    848
    -                  in if fromIntegral r == x
    
    846
    +    let -- cast that checks that round-tripping through Word32 doesn't change the value
    
    847
    +        infoW32 = let r = fromIntegral infox :: Word32
    
    848
    +                   in if fromIntegral r == infox
    
    849 849
                         then r
    
    850
    -                    else pprPanic "schemeER_wrk: breakpoint tick/info index too large!" (ppr x)
    
    850
    +                    else pprPanic "schemeER_wrk: breakpoint tick/info index too large!" (ppr infox)
    
    851
    +        ix_hi = fromIntegral (infoW32 `shiftR` 16)
    
    852
    +        ix_lo = fromIntegral (infoW32 .&. 0xffff)
    
    851 853
         info_addr        <- lit1 $ BCONPtrFS $ moduleNameFS $ moduleName info_mod
    
    852 854
         info_unitid_addr <- lit1 $ BCONPtrFS $ unitIdFS     $ moduleUnitId info_mod
    
    853 855
         np               <- lit1 $ BCONPtrCostCentre ibi
    
    854 856
         emit_ bci_BRK_FUN [ Op p1, Op info_addr, Op info_unitid_addr
    
    855
    -                      , SmallOp (toW16 infox), Op np ]
    
    857
    +                      , SmallOp ix_hi, SmallOp ix_lo, Op np ]
    
    856 858
     
    
    857 859
       BRK_ALTS active -> emit_ bci_BRK_ALTS [SmallOp (if active then 1 else 0)]
    
    858 860
     
    

  • rts/Disassembler.c
    ... ... @@ -89,7 +89,7 @@ disInstr ( StgBCO *bco, int pc )
    89 89
              p1           = BCO_GET_LARGE_ARG;
    
    90 90
              info_mod     = BCO_GET_LARGE_ARG;
    
    91 91
              info_unit_id = BCO_GET_LARGE_ARG;
    
    92
    -         info_wix     = BCO_NEXT;
    
    92
    +         info_wix     = BCO_READ_NEXT_32;
    
    93 93
              np           = BCO_GET_LARGE_ARG;
    
    94 94
              debugBelch ("BRK_FUN " );  printPtr( ptrs[p1] );
    
    95 95
              debugBelch("%" FMT_Word, literals[info_mod] );
    

  • rts/Interpreter.c
    ... ... @@ -720,7 +720,7 @@ interpretBCO (Capability* cap)
    720 720
                 arg1_brk_array      = BCO_GET_LARGE_ARG;
    
    721 721
                 /* info_mod_name = */ BCO_GET_LARGE_ARG;
    
    722 722
                 /* info_mod_id   = */ BCO_GET_LARGE_ARG;
    
    723
    -            arg4_info_index     = BCO_NEXT;
    
    723
    +            arg4_info_index     = BCO_READ_NEXT_32;
    
    724 724
     
    
    725 725
                 StgPtr* ptrs = (StgPtr*)(&bco->ptrs->payload[0]);
    
    726 726
                 StgArrBytes* breakPoints = (StgArrBytes *) BCO_PTR(arg1_brk_array);
    
    ... ... @@ -1542,7 +1542,7 @@ run_BCO:
    1542 1542
                 arg1_brk_array      = BCO_GET_LARGE_ARG;
    
    1543 1543
                 arg2_info_mod_name  = BCO_GET_LARGE_ARG;
    
    1544 1544
                 arg3_info_mod_id    = BCO_GET_LARGE_ARG;
    
    1545
    -            arg4_info_index     = BCO_NEXT;
    
    1545
    +            arg4_info_index     = BCO_READ_NEXT_32;
    
    1546 1546
     #if defined(PROFILING)
    
    1547 1547
                 arg5_cc             = BCO_GET_LARGE_ARG;
    
    1548 1548
     #else