What does the DWARF information generated by your GHC branch look like?

Johan Tibell johan.tibell at gmail.com
Fri Feb 28 10:45:18 UTC 2014


On Thu, Feb 27, 2014 at 6:43 PM, Peter Wortmann <scpmw at leeds.ac.uk> wrote:

>
> Johan Tibell wrote:
> > I enjoyed reading your paper [1] and I have some questions.
>
> Thanks! The DWARF patches are currently under review for Trac #3693. Any
> feedback would be very appreciated:
> https://github.com/scpmw/ghc/commits/profiling-import


I haven't had time to look at it all. I added a comment on
https://github.com/scpmw/ghc/commit/bbf6f35d8c341c8aadca1a48657084c007837b21


> >  will you fill in the .debug_line section so that standard tools like
>  > "perf report" and gprof can be used on Haskell code?
>
> Yes, even though from a few quick tests the results of "perf report"
> aren't too useful, as source code links are pretty coarse and jump
> around a lot - especially for optimised Haskell code. There's the option
> to instead annotate with source code links to a generated ".dump-simpl"
> file, which might turn out to be more useful.
>

I think that in general we should be as "standard" (i.e. close to how e.g.
GCC uses DWARF) as possible and put extra information in e.g. .debug_ghc.
That way we maximize the chance that standard tools will do something
sensible.


> > Code pointers would be appreciated.
>
> Is this about how .debug_line information is generated? We take the same
> approach as LLVM (and GCC, I think) and simply annotate the assembly
> with suitable .file & .loc directives. That way we can leave all the
> heavy lifting to the assembler.
>
> Current patch is here:
> https://github.com/scpmw/ghc/commit/c5294576


Makes sense. Thanks.


> >  * Does your GHC allow DWARF information to be generated without
> > actually using any of the RTS (e.g. eventlog) machinery?
>
> The RTS just serves as a DWARF interpreter for its own executable (+
> libraries) in this, so yes, it's fully independent. On the other hand,
> having special code allows us to avoid a few subtleties about Haskell
> code that are hard to communicate to standard debugging tools
> (especially concerning stack tracing).
>

Sounds good. As long as it's possible to use this without the RTS/eventlog
support I be happy. I have profiling needs (e.g. in unordered-containers)
were changes in the <5% are interesting and any extra overhead will skew
the results.


> > Another way to ask the same question, do you have a ghc -g flag that
> > has no implication for the runtime settings?
>
> Right now -g does not affect the RTS at all. We might want to change
> that at some point though so we can get rid of the libdwarf dependency.
>

That sounds good (the don't affect the RTS part). I didn't understand the
libdwarf part.


> >  * Do you generate DW_TAG_subprogram sections in the .debug_info
> > section so that other tools can figure out the name of Haskell
> > functions?
>
> Yes, we are setting the "name" attribute to a suitable Haskell name.
> Sadly, at least GDB seems to ignore it and falls back to the symbol
> name. I investigated this some time ago, and I think the reason was that
> it doesn't recognize the Haskell language ID (which isn't standardized,
> obviously). Simply pretending to be C(++) might fix this, but I would be
> a bit scared of other side-effects.
>

Lets try to get our name standardized and pushed into GDB. It's hopefully
as simple as sending an email to the GDB devs.

Cheers,
Johan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20140228/df226ddd/attachment.html>


More information about the ghc-devs mailing list