trying to get a registerised alpha build
Simon Marlow
simonmarhaskell at gmail.com
Tue Apr 4 05:59:27 EDT 2006
Duncan Coutts wrote:
> On Fri, 2006-03-31 at 11:43 +0100, Simon Marlow wrote:
>
>>Duncan Coutts wrote:
>>
>>
>>>What would you recommend is the bat way for us to verify that each bit
>>>of the registerised build is working? If we turn everything on including
>>>the mangler and it breaks where do we start debugging?
>>
>>I usually do this in one big step.
>
>
> Right 'o. :-)
>
>
>>Regarding debugging, I just wrote this wiki page:
>>
>> http://hackage.haskell.org/trac/ghc/wiki/DebuggingGhcCrashes
>>
>>That should tell you everything you need to know, please feel free to
>>expand it as you discover things.
>
>
> That's fantastic, thanks.
>
>
>>>Is it possible to build without tailcalls (ie using the
>>>mini-interpreter) but using the stg->machine register mappings?
>>
>>Certainly. I think if you use -optc-DUSE_MINIINTERPRETER and
>>-fno-asm-mangling everywhere, that should get you registers but no
>>mangling or tail calls.
>
>
> Unfortunately this doesn't quite work because the TABLES_NEXT_TO_CODE
> ends up inconsistent. I'm not quite sure why that happens to be honest.
>
> Our clue is that the sanity check in initStorage barfs:
> ASSERT(LOOKS_LIKE_CLOSURE_PTR(&stg_dummy_ret_closure));
>
> By looking at this in gdb (thanks again for the ghc gdb guide!) we found
> that this is because this closure was generated assuming
> TABLES_NEXT_TO_CODE to be true but of course since we're using
> -optc-DUSE_MINIINTERPRETER then the rts .c code is getting compiled
> with !TABLES_NEXT_TO_CODE which changes the definition of
> LOOKS_LIKE_CLOSURE_PTR.
I think the culprit is this bit of code in ghc/codeGen/SMRep.lhs:
tablesNextToCode :: Bool
#if defined(ia64_TARGET_ARCH) || defined(powerpc64_TARGET_ARCH)
tablesNextToCode = False
#else
tablesNextToCode = not opt_Unregisterised
#endif
This is the compiler's idea of TABLES_NEXT_TO_CODE, which doesn't match
the RTS's idea from RtsConfig.h. I suggest you just tweak this directly
- the right way is probably to have another build system variable eg.
$(GhcTablesNextToCode), but that's tricky to get right, and not
generally useful (but by all means go ahead if you want).
Also, I'm worried about the generation of
ghc/includes/DerivedConstants.h, because this code in
ghc/includes/Makefile says this:
ifeq "$(GhcUnregisterised)" "YES"
SRC_CC_OPTS += -DNO_REGS -DUSE_MINIINTERPRETER
endif
So if you want USE_MINIINTERPRETER without GhcUnregisterised, it better
be in SRC_CC_OPTS here.
Cheers,
Simon
More information about the Glasgow-haskell-bugs
mailing list