On Tue, May 31, 2022 at 4:12 PM HAGIO KAZUHITO(萩尾 一仁) <[email protected]>
wrote:

> Currently gdb's "ptype" command does not print the details of unnamed
> structure and union deeper than second level in a structure, it prints
> only "{...}" instead.  And crash's "struct" and similar commands also
> inherit this behavior, so we cannot get the full information of them.
>
> To print the details of them, change the show variable when it is an
> unnamed one like crash-7.x.
>
> Without the patch:
>    crash> struct -o page
>    struct page {
>       [0] unsigned long flags;
>           union {
>               struct {...};
>               struct {...};
>    ...
>
> With the patch:
>    crash> struct -o page
>    struct page {
>       [0] unsigned long flags;
>           union {
>               struct {
>       [8]         struct list_head lru;
>      [24]         struct address_space *mapping;
>      [32]         unsigned long index;
>      [40]         unsigned long private;
>               };
>               struct {
>       [8]         dma_addr_t dma_addr;
>               };
>    ...
>
> Signed-off-by: Kazuhito Hagio <[email protected]>
> ---
>   gdb-10.2.patch | 12 ++++++++++++
>   1 file changed, 12 insertions(+)
>
> diff --git a/gdb-10.2.patch b/gdb-10.2.patch
> index b67db4e1ded9..603679657eee 100644
> --- a/gdb-10.2.patch
> +++ b/gdb-10.2.patch
> @@ -1638,3 +1638,15 @@ exit 0
>         $(ECHO_CXXLD) $(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
>                    -o $(shell /bin/cat mergeobj) $(LIBGDB_OBS) \
>                    $(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)
> $(shell /bin/cat mergelibs)
> +--- gdb-10.2/gdb/c-typeprint.c.orig
> ++++ gdb-10.2/gdb/c-typeprint.c
> +@@ -1202,6 +1202,9 @@ c_type_print_base_struct_union (struct t
> +               = podata->end_bitpos
> +                 - TYPE_LENGTH (type->field (i).type ()) *
> TARGET_CHAR_BIT;
> +           }
> ++        else if (strlen(TYPE_FIELD_NAME (type, i)) == 0)
> ++          /* crash: Print details for unnamed struct and union. */
> ++          newshow = show;
> +
> +         c_print_type_1 (type->field (i).type (),
> +                         TYPE_FIELD_NAME (type, i),
>

Thank you for working on this issue, Kazu.
Acked-by: Lianbo Jiang <[email protected]>

-- 
> 2.27.0
>
--
Crash-utility mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/crash-utility
Contribution Guidelines: https://github.com/crash-utility/crash/wiki

Reply via email to