[PATCH 2/2] Introduce Python testcases to check DWARF output
Pierre-Marie de Rodat
derodat@adacore.com
Thu Jul 27 10:09:00 GMT 2017
On 07/27/2017 10:36 AM, Richard Biener wrote:
> Given that gdb can decode dwarf and we rely on gdb for guality and
> gdb has python scripting can we somehow walk its dwarf tree from
> within a python script? That is, not need the dwarf decoding or
> objdump requirement?
Iâm quite familiar with GDBâs Python scripting API and unfortunately,
no, it does not provide any access to raw debugging information:
<https://sourceware.org/gdb/onlinedocs/gdb/Python-API.html>. All we have
is access to ~source-level entities such as variables, functions and
types (and âobjfilesâ themselves, but we canât do anything interesting
with them), so there is no way other way than testing dynamic behavior,
i.e. checking that variables are properly read/decoded, etc. which is
what we already do in guality tests.
> On IRC I suggested to use pre-existing python DWARF decoders
> which we might be able to import into the tree. We'd still need them
> to handle non-ELF object formats or somehow extract DWARF from
> other containers to an ELF file (objcopy to the rescue...).
>
> That said, not needing to write a DWARF / object file decoder
> would be nice.
Yes. On IRC, I mentionned pyelftools
(https://github.com/eliben/pyelftools/), which knows about ELF and
DWARF, and that, I think, we could plug on some PE/XCOFF/⦠extractor to
parse embedded DWARF. In any case, I feel it would not be simpler than
what I sent. Of course Iâm still open to suggestions. :-)
> I see your testcases have associated .py files. There are a few
> existing "simple" dwarf testcases that would benefit from being
> able to embed matching into the testcase source file itself? Thus
> have TCL autogenerate a .py file for the testing from, say
>
> /* { dg-final { scan-dwarf { "Matcher('DW_TAG_member', 'i',
> attrs={'DW_AT_type': Capture('s0_i_type')})" } } } */
>
> do you think that's feasible or doesn't it make much sense because
> it would essentially match anywhere? Or we'd end up with a
> gazillion of scan-dwarf variants?
I think this is a good idea! If it is technically possible to have such
multi-line statements in comments, I think this would be easy. Iâll
prepare the engine for the next patchset version and Iâll try to find
existing tests that could be re-written this way. As long as the pattern
isnât too generic, I think it would makes sense: for instance if the
input source has only one structure field called âiâ, then the above
pattern will make it possible to match its type precisely.
> I think a separate .py for checking is required anyway for the more
> complex cases.
I think so as well, for instance for the tests I sent so far.
--
Pierre-Marie de Rodat
More information about the Gcc-patches
mailing list