public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
* Various eu-readelf --debug-dump improvements
@ 2017-11-29 16:06 Mark Wielaard
  2017-11-29 16:06 ` [PATCH 3/5] readelf: Print actual file for decl_file and call_file attributes Mark Wielaard
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Mark Wielaard @ 2017-11-29 16:06 UTC (permalink / raw)
  To: elfutils-devel

While working on the DWARF5 support I found various cases where the
eu-readelf --debug-dump could be improved to provide a bit more information
that helped debug issues. The following changes are not DWARF5 specific,
but improve the --debug-dump output to make a more useful (IMHO).

[PATCH 1/5] readelf: Adjust print_ops formatting.

This simply makes the DWARF expressions a little more compact and the
indenting a bit more consistent. In particular it only uses two space
for the operand index (the max I found in the wild was 64, so reserving
4 spaces for possibly 9999 indexes seemed excessive.

[PATCH 2/5] readelf: Print abbrev code for DIE with --debug-dump=info.

This was really convenient when there seemed something wrong with
the DIE information. It is also helpful to see how many DIEs share
a particular abbrev. The output is now:

 [    29]    base_type            abbrev: 74
             byte_size            (data1) 8
             encoding             (data1) unsigned (7)
             name                 (strp) "long unsigned int"

So you can easily lookup the corresponding abbrev with --debug-dump=abbrev

 [   74] offset: 1019, children: no, tag: base_type
          attr: byte_size, form: data1, offset: 0x3fb
          attr: encoding, form: data1, offset: 0x3fd
          attr: name, form: strp, offset: 0x3ff

And note that almost all base_types share the same abbrev code.

[PATCH 3/5] readelf: Print actual file for decl_file and call_file.

This was very helpful to understand where something was really defined.
It simply resolves the file number from the stmt list, so you don't
have to do that by hand anymore. New output:

 [    4c]    typedef              abbrev: 26
             name                 (strp) "size_t"
             decl_file            (data1) stddef.h (13)
             decl_line            (data1) 216
             decl_column          (data1) 23
             type                 (ref4) [    29]

[PATCH 4/5] readelf: Print CU, base address and unresolved .debug_ranges.

We helpfully resolve the addresses to actual symbol+offsets whenever
possible, but this kind of obscured what the actual encoding was. And
it made the output a bit messy because addresses didn't line up. It now
also prints out the associated CU and the base address to the range list.

 CU [ 3582e] base: 0x000000000041de70 <ebl_machine_flag_name>
 [  c370] range 2a, 6a
          0x000000000041de9a <ebl_machine_flag_name+0x2a>..
          0x000000000041ded9 <ebl_machine_flag_name+0x69>
          range 80, e5
          0x000000000041def0 <ebl_machine_flag_name+0x80>..
          0x000000000041df54 <ebl_machine_flag_name+0xe4>
          range f8, 11a
          0x000000000041df68 <ebl_machine_flag_name+0xf8>..
          0x000000000041df89 <ebl_machine_flag_name+0x119>
 [  c3b0] range 91, 9f
          0x000000000041df01 <ebl_machine_flag_name+0x91>..
          0x000000000041df0e <ebl_machine_flag_name+0x9e>
          range a3, a6
          0x000000000041df13 <ebl_machine_flag_name+0xa3>..
          0x000000000041df15 <ebl_machine_flag_name+0xa5>

[PATCH 5/5] readelf: Print CU, base address and unresolved .debug_loc.

Like the .debug_ranges change, but including location list entries.
The new output is (IMHO) a big improvement:

CU [ 4a404] base: 0x000000000041f350 <__popcountdi2>
 [ 3c3e2] range 0, 24
          0x000000000041f350 <__popcountdi2>..
          0x000000000041f373 <__popcountdi2+0x23>
           [ 0] reg5
          range 24, 2b
          0x000000000041f374 <__popcountdi2+0x24>..
          0x000000000041f37a <__popcountdi2+0x2a>
           [ 0] reg5
          range 2b, 2e
          0x000000000041f37b <__popcountdi2+0x2b>..
          0x000000000041f37d <__popcountdi2+0x2d>
           [ 0] reg0
          range 2e, 3e
          0x000000000041f37e <__popcountdi2+0x2e>..
          0x000000000041f38d <__popcountdi2+0x3d>
           [ 0] GNU_entry_value:
                [ 0] reg5
           [ 3] GNU_entry_value:
                [ 0] reg5
           [ 6] lit1
           [ 7] shr
           [ 8] constu 6148914691236517205
           [18] and
           [19] minus
           [20] stack_value
          range 3e, 48
          0x000000000041f38e <__popcountdi2+0x3e>..
          0x000000000041f397 <__popcountdi2+0x47>
           [ 0] reg5
          range 48, 4b
          0x000000000041f398 <__popcountdi2+0x48>..
          0x000000000041f39a <__popcountdi2+0x4a>
           [ 0] breg0 0
           [ 2] constu 1085102592571150095
           [12] and
           [13] stack_value
          range 4b, 59
          0x000000000041f39b <__popcountdi2+0x4b>..
          0x000000000041f3a8 <__popcountdi2+0x58>
           [ 0] reg0
          range 59, 5e
          0x000000000041f3a9 <__popcountdi2+0x59>..
          0x000000000041f3ad <__popcountdi2+0x5d>
           [ 0] breg5 0
           [ 2] lit4
           [ 3] shr
           [ 4] breg5 0
           [ 6] plus
           [ 7] constu 1085102592571150095
           [17] and
           [18] stack_value

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-12-10 16:00 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-29 16:06 Various eu-readelf --debug-dump improvements Mark Wielaard
2017-11-29 16:06 ` [PATCH 3/5] readelf: Print actual file for decl_file and call_file attributes Mark Wielaard
2017-11-29 16:06 ` [PATCH 1/5] readelf: Adjust print_ops formatting Mark Wielaard
2017-11-29 16:06 ` [PATCH 2/5] readelf: Print abbrev code for DIE with --debug-dump=info Mark Wielaard
2017-11-29 16:06 ` [PATCH 4/5] readelf: Print CU, base address and unresolved .debug_range entries Mark Wielaard
2017-11-29 16:06 ` [PATCH 5/5] readelf: Print CU, base address and unresolved .debug_loc entries Mark Wielaard
2017-12-10 16:00 ` Various eu-readelf --debug-dump improvements Mark Wielaard

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).