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

> Hi Lianbo,
>
> On 2022/05/27 18:56, lijiang wrote:
> > On Fri, May 27, 2022 at 5:14 PM HAGIO KAZUHITO(萩尾 一仁) <
> [email protected] <mailto:[email protected]>> wrote:
> >
> >     On 2022/05/27 16:03, lijiang wrote:
> >      >      >> If no another gdb setting, we will need to rewrite the
> parser.
> >      >      >> So first, I'd like to know whether there is no another
> setting.
> >      >      >
> >      >      > Otherwise, maybe we can patch the gdb code...
> >      >      >
> >      >      > That '{...}' is probably printed in
> c_type_print_base_struct_union().
> >      >      > And found a comment for c_type_print_base_1() in
> gdb/c-typeprint.c:
> >      >      >
> >      >      >      SHOW negative means just print the type name or
> struct tag if there
> >      >      >      is one.  If there is no name, print something
> sensible but concise
> >      >      >      like "struct {...}".
> >      >      >
> >      >      > Just an idea and clue.
> >      >
> >      >
> >      > I like the good idea.
> >      >
> >      >     Just a rough try and I've not tested enough, but this patch
> might be
> >      >     somewhat good.
> >      >
> >      >     --- gdb-10.2.orig/gdb/c-typeprint.c     2022-05-27
> 14:49:53.079853333 +0900
> >      >     +++ gdb-10.2/gdb/c-typeprint.c  2022-05-27 14:47:18.729165094
> +0900
> >      >     @@ -1043,6 +1043,8 @@
> >      >          struct type_print_options local_flags = *flags;
> >      >          local_flags.local_typedefs = NULL;
> >      >
> >      >     +  show = 1;
> >      >     +
> >      >          std::unique_ptr<typedef_hash_table> hash_holder;
> >      >          if (!flags->raw)
> >      >            {
> >      >
> >      >
> >      > This looks more reasonable to me. Could you please post a patch
> with this fix?
> >
> >     Sure.  But more understanding and testing are needed, I will look
> into it
> >     next week.
>
> I found that gdb-7.6 also prints "{...}" for unnamed struct/union.
>
> (gdb) ptype struct page
> type = struct page {
>      unsigned long flags;
>      struct address_space *mapping;
>      struct {
>          union {...};
>          union {...};
>      };
> ...
>
> And crash-7.x (gdb-7.6.patch) had the following patch to print the details
> of unnamed struct/union.
>
> --- gdb-7.6/gdb/c-typeprint.c.orig
> +++ gdb-7.6/gdb/c-typeprint.c
> @@ -1097,7 +1097,8 @@ c_type_print_base (struct type *type, st
>                    fprintf_filtered (stream, "static ");
>                  c_print_type (TYPE_FIELD_TYPE (type, i),
>                                TYPE_FIELD_NAME (type, i),
> -                             stream, show - 1, level + 4,
> +                             stream, strlen(TYPE_FIELD_NAME (type, i)) ?
> +                             show - 1 : show, level + 4,
>                                &local_flags);
>                  if (!field_is_static (&TYPE_FIELD (type, i))
>                      && TYPE_FIELD_PACKED (type, i))
>
>
> But gdb-10.2.patch does not have it, and prints "{...}" again.
>
>
Good findings, Kazu.


> So I will post the following patch later to do the same thing in gdb-10.2.
>
> --- gdb-10.2/gdb/c-typeprint.c.orig     2022-05-31 13:15:39.099537173 +0900
> +++ gdb-10.2/gdb/c-typeprint.c  2022-05-31 13:17:02.076909579 +0900
> @@ -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),
>

This looks good, it can keep the same behavior as gdb-7.6.

Thanks.
Lianbo


> Thanks,
> Kazu
>
--
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