[Bug cli/16224] New: add "pahole" functionality to ptype

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

[Bug cli/16224] New: add "pahole" functionality to ptype

macro@linux-mips.org
https://sourceware.org/bugzilla/show_bug.cgi?id=16224

            Bug ID: 16224
           Summary: add "pahole" functionality to ptype
           Product: gdb
           Version: HEAD
            Status: NEW
          Severity: enhancement
          Priority: P2
         Component: cli
          Assignee: unassigned at sourceware dot org
          Reporter: tromey at redhat dot com

There's a "pahole" script in Python floating around, but
I think it would be nicer for users if pahole functionality
were just incorporated directly into the gdb "ptype" command.

--
You are receiving this mail because:
You are on the CC list for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug cli/16224] add "pahole" functionality to ptype

macro@linux-mips.org
https://sourceware.org/bugzilla/show_bug.cgi?id=16224

Sergio Durigan Junior <sergiodj at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
                 CC|                            |sergiodj at redhat dot com
           Assignee|unassigned at sourceware dot org   |sergiodj at redhat dot com

--- Comment #1 from Sergio Durigan Junior <sergiodj at redhat dot com> ---
Patch: https://sourceware.org/ml/gdb-patches/2017-11/msg00435.html

--
You are receiving this mail because:
You are on the CC list for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug cli/16224] add "pahole" functionality to ptype

macro@linux-mips.org
In reply to this post by macro@linux-mips.org
https://sourceware.org/bugzilla/show_bug.cgi?id=16224

Joel Brobecker <brobecker at gnat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |brobecker at gnat dot com
   Target Milestone|---                         |8.1

--- Comment #2 from Joel Brobecker <brobecker at gnat dot com> ---
Trying to aim for 8.1...

--
You are receiving this mail because:
You are on the CC list for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug cli/16224] add "pahole" functionality to ptype

macro@linux-mips.org
In reply to this post by macro@linux-mips.org
https://sourceware.org/bugzilla/show_bug.cgi?id=16224

Tom Tromey <tromey at sourceware dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Blocks|                            |22574


Referenced Bugs:

https://sourceware.org/bugzilla/show_bug.cgi?id=22574
[Bug 22574] support ptype/o in rust
--
You are receiving this mail because:
You are on the CC list for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug cli/16224] add "pahole" functionality to ptype

macro@linux-mips.org
In reply to this post by macro@linux-mips.org
https://sourceware.org/bugzilla/show_bug.cgi?id=16224

--- Comment #3 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Sergio Durigan Junior
<[hidden email]>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=7c1618381fdaa0697a211721ac31844f884797ac

commit 7c1618381fdaa0697a211721ac31844f884797ac
Author: Sergio Durigan Junior <[hidden email]>
Date:   Mon Nov 20 16:34:59 2017 -0500

    Implement pahole-like 'ptype /o' option

    This commit implements the pahole-like '/o' option for 'ptype', which
    prints the offsets and sizes of struct fields, reporting whenever
    there is a hole found.

    The output is heavily based on pahole(1), with a few modifications
    here and there to adjust it to our reality.  Here's an example:

      /* offset    |  size */  type = struct wer : public tuv {
                           public:
      /*   32      |    24 */    struct tyu {
      /*   32:31   |     4 */        int a1 : 1;
      /*   32:28   |     4 */        int a2 : 3;
      /*   32: 5   |     4 */        int a3 : 23;
      /*   35: 3   |     1 */        char a4 : 2;
      /* XXX  3-bit hole   */
      /* XXX  4-byte hole  */
      /*   40      |     8 */        int64_t a5;
      /*   48:27   |     4 */        int a6 : 5;
      /*   48:56   |     8 */        int64_t a7 : 3;

                                 /* total size (bytes):   24 */
                             } a1;

                             /* total size (bytes):   56 */
                           }

    A big part of this patch handles the formatting logic of 'ptype',
    which is a bit messy.  The code to handle bitfield offsets, however,
    took some time to craft.  My thanks to Pedro Alves for figuring things
    out and pointing me to the right direction, as well as coming up with
    a way to inspect the layout of structs with bitfields (see testcase
    for comments).

    After many discussions both on IRC and at the mailing list, I tried to
    implement printing vtables and inherited classes.  Unfortunately the
    code grew too complex and there were still a few corner cases failing
    so I had to drop the attempt.  This should be implemented in a future
    patch.

    This patch is the start of a long-term work I'll do to flush the local
    patches we carry for Fedora GDB.  In this specific case, I'm aiming at
    upstreaming the feature implemented by the 'pahole.py' script that is
    shipped with Fedora GDB:

     
<https://src.fedoraproject.org/rpms/gdb/blob/master/f/gdb-archer.patch#_311>

    This has been regression-tested on the BuildBot.  There's a new
    testcase for it, along with an update to the documentation.  I also
    thought it was worth mentioning this feature in the NEWS file.

    gdb/ChangeLog:
    2017-12-15  Sergio Durigan Junior  <[hidden email]>
            Pedro Alves  <[hidden email]>

        PR cli/16224
        * NEWS (Changes since GDB 8.0): Mention new '/o' flag.
        * c-typeprint.c (OFFSET_SPC_LEN): New define.
        (c_type_print_varspec_prefix): New argument 'struct
        print_offset_data *'.
        (c_type_print_base_1): New function and prototype.
        (c_print_type_1): New function, with code from 'c_print_type'.
        (c_print_type): Use 'c_print_type_1'.
        (c_type_print_varspec_prefix): New argument 'struct
        print_offset_data *'.  Use it.  Call 'c_type_print_base_1'
        instead of 'c_print_type_base'.
        (print_spaces_filtered_with_print_options): New function.
        (output_access_specifier): Take new argument FLAGS.  Modify
        function to call 'print_spaces_filtered_with_print_options'.
        (c_print_type_vtable_offset_marker): New function.
        (c_print_type_union_field_offset): New function.
        (c_print_type_struct_field_offset): New function.
        (c_print_type_no_offsets): New function.
        (c_type_print_base_struct_union): New argument 'struct
        print_offset_data *'.  Print offsets and sizes for
        struct/union/class fields.
        * typeprint.c (const struct type_print_options
        type_print_raw_options): Initialize 'print_offsets'.
        (static struct type_print_options default_ptype_flags):
        Likewise.
        (struct print_offset_data print_offset_default_data): New
        variable.
        (whatis_exp): Handle '/o' option.
        (_initialize_typeprint): Add '/o' flag to ptype's help.
        * typeprint.h (struct print_offset_data): New struct.
        (struct type_print_options) <print_offsets>: New field.

    gdb/testsuite/ChangeLog:
    2017-12-15  Sergio Durigan Junior  <[hidden email]>

        PR cli/16224
        * gdb.base/ptype-offsets.cc: New file.
        * gdb.base/ptype-offsets.exp: New file.

    gdb/doc/ChangeLog:
    2017-12-15  Sergio Durigan Junior  <[hidden email]>

        PR cli/16224
        * gdb.texinfo (ptype): Add documentation for new flag '/o'.

--
You are receiving this mail because:
You are on the CC list for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug cli/16224] add "pahole" functionality to ptype

macro@linux-mips.org
In reply to this post by macro@linux-mips.org
https://sourceware.org/bugzilla/show_bug.cgi?id=16224

Sergio Durigan Junior <sergiodj at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED

--- Comment #4 from Sergio Durigan Junior <sergiodj at redhat dot com> ---
Patches have been pushed.

--
You are receiving this mail because:
You are on the CC list for the bug.