-----Original Message----- > In the show_member_offset() function, when trying to handle function > pointers, the case for "(*" is handled. However, if the function > pointer returns a pointer or a pointer to a pointer, then the > condition is unhandled. This results in the offset not being printed. > > Fix by first checking if the member is potentially a function pointer, > then checking if it returns a pointer or a pointer to a pointer. > > Signed-off-by: John Pittman <jpittman@xxxxxxxxxx> Good catch... I've confirmed that the patch works as expected with RHEL7's struct offload_callbacks: crash> struct -o offload_callbacks struct offload_callbacks { [0] struct sk_buff *(*gso_segment)(struct sk_buff *, netdev_features_t); [8] struct sk_buff **(*gro_receive)(struct sk_buff **, struct sk_buff *); [16] int (*gro_complete)(struct sk_buff *, int); } SIZE: 24 Acked-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx> Thanks, Kazu > --- > symbols.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/symbols.c b/symbols.c > index a2d5c6c..5d7da6e 100644 > --- a/symbols.c > +++ b/symbols.c > @@ -8356,8 +8356,15 @@ show_member_offset(FILE *ofp, struct datatype_member *dm, char *inbuf) > } > } else if (c) { > for (i = 0; i < c; i++) { > - if (STRNEQ(arglist[i], "(*")) { > - target = arglist[i]+2; > + if (strstr(inbuf, "(*")) { > + if (STRNEQ(arglist[i], "(*")) > + target = arglist[i]+2; > + else if (STRNEQ(arglist[i], "*(*")) > + target = arglist[i]+3; > + else if (STRNEQ(arglist[i], "**(*")) > + target = arglist[i]+4; > + else > + continue; > if (!(t1 = strstr(target, ")"))) > continue; > *t1 = NULLCHAR; > -- > 2.17.2 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility