On 05/15/2015 09:17 PM, Simon Peyton Jones wrote:
Good idea.  I think it’d great if Jost (or someone else) felt able to
update those wiki pages with the info in his email.

Sure, will do that.
I am not sure whether either of those pages is the best place for information about the GHC ways. Maybe there is already a page about them in the commentary - I will take a look tomorrow and add the information about ways from the mail. If no page exists I'll add a page, and link to it from the Debugging/RuntimeSystem page.

A few years ago, I wrote one page specifically about the parallel ways,
  http://ghc.haskell.org/trac/ghc/wiki/GpHEden/CompilerWays
but the information is outdated.

/ Jost



thanks!

Simon

*From:*ghc-devs [mailto:[email protected]] *On Behalf Of
*Lennart Kolmodin
*Sent:* 15 May 2015 11:31
*To:* Jost Berthold
*Cc:* [email protected]
*Subject:* Re: Debugging the RTS

Searching for online resources brought me to

https://ghc.haskell.org/trac/ghc/wiki/Debugging and

https://ghc.haskell.org/trac/ghc/wiki/Debugging/RuntimeSystem

This mail seems to be a more detailed description than available on the
wiki. That page refers to GHC 6.12.

Would it make sense to add some info to the RuntimeSystem
<https://ghc.haskell.org/trac/ghc/wiki/Debugging/RuntimeSystem> page?

2015-05-14 16:21 GMT+02:00 Jost Berthold
<[email protected]
<mailto:[email protected]>>:

    Hi Eric,

    definitely not bit-rotted - the #if DEBUG code is what you get when
    you compile with -debug.

    Short roadmap:

    In general, GHC is built in many "ways", the -debug way is one.
    Some ways (like -threaded, -eventlog, -debug) are RTS-only, others
    (like -prof) lead to different library code.

    Ways are defined in compiler/main/DynFlags.hs as a Haskell data
    structure.
    In _dynamic_flags_, the actual flag strings for the ghc invocation
    are defined (like -prof, -threaded), they will activate the
    respective _Way_.
    _wayTag_, in turn, defines short names used as a suffix for *.o and
    *.a files, for instance *.p_o for profiling, *.l_o for eventlog.
    A number of other functions in there customise behaviour depending
    on the ways. Note _wayOptc_ which sets some options for the C
    compiler, like -DTRACING for the -eventlog way. However, it does not
    define DEBUG for the debug way!

    In mk/ways.mk <http://ways.mk> you will find all the short names,
    and some more options are defined (WAY_*_HC_OPTS). These definitions
    are for the driver script, and pass on the right (long-name) options
    to the Haskell compiler to activate what is inside DynFlags (like
    -prof for WAY_p_HC_OPTS).
    Here we find
    WAY_debug_HC_OPTS= -static -optc-DDEBUG -ticky -DTICKY_TICKY
    which is what you were looking for

    To build a GHC with debug-way RTS, you need to add GhcRtsWays +=
    debug to your build.mk <http://build.mk> (also see mk/config.mk
    <http://config.mk>{.in}, which gathers the default ways to build
    depending on platform and build configuration).
    I guess this might produce quite a number of new warnings and errors
    if you do it on a new platform...

    Once you have built this, you can compile with -debug and pass RTS
    options to get debug traces and activate sanity checks, like so:
    ghc -debug -myprogram.hs -o myprogramDebug
    ./myprogramDebug +RTS -Ds -DS
    (-DS = sanity checks on, -Ds = scheduler tracing)
    The usage message (see /rts/RtsFlags.c) tells you more options you
    can use.

    Happy debugging!
    / Jost


    On 05/14/2015 10:00 PM, [email protected]
    <mailto:[email protected]> wrote:

        Date: Thu, 14 May 2015 18:36:04 +1000
        From: Erik de Castro Lopo <[email protected]
        <mailto:mle%[email protected]>>
        To: [email protected] <mailto:[email protected]>
        Subject: Debugging the RTS
        Message-ID:
        <[email protected]
        <mailto:[email protected]>>
        Content-Type: text/plain; charset=US-ASCII

        Hi all,

        I'm trying to debug a AArch64/Linux specific RTS issue and digging
        around in the rts C code, I see a large amount of code wrapped in
        "#if DEBUG" type statements, but no way to enable in either
        mk/build.mk <http://build.mk> or it seems in any of the other
        build related settings
        files in the mk/ directory.

        The only way I have found to enable this debug code that actually
        works is to enable this DEBUG code is to edit mk/ghc.mk
        <http://ghc.mk> as follows:

              -STANDARD_OPTS += -DCOMPILING_RTS
              +STANDARD_OPTS += -DCOMPILING_RTS -DDEBUG

        However, once I do that I get a bunch of C synatx errors.

        I am doing this wrong or has the DEBUG code bit rotted?

        Cheers,
        Erik


    _______________________________________________
    ghc-devs mailing list
    [email protected] <mailto:[email protected]>
    http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs


_______________________________________________
ghc-devs mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to