On Thu 2016-09-29 12:37 -0400, Dave Anderson wrote: [ ... ] > Given that you are essentially specifying a completely new argument > type to the struct command, I'm going to have to NAK this patch. That's OK. > To do what you want, honestly I don't really feel that it's asking too much > to make it a two-step process, i.e, get the address first, and then apply it > to the struct command. Agreed. > However, if you really feel it's worth it, I suppose you could create a > new "indirect-pointer-argument-type" for the struct command that explicitly > specifies that it is a pointer to the target address. No, it's not worth it actually. Perhaps a warning instead? For e.g. something like this: Subject: [PATCH] struct: warn if percpu symbol is of type pointer --- symbols.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/symbols.c b/symbols.c index 8b0d8b9..6447fad 100644 --- a/symbols.c +++ b/symbols.c @@ -81,6 +81,7 @@ static void cmd_datatype_common(ulong); static void do_datatype_addr(struct datatype_member *, ulong, int, ulong, char **, int); static void process_gdb_output(char *, unsigned, const char *, int); +static char *expr_type_name(const char *); static int display_per_cpu_info(struct syment *, int, char *); static struct load_module *get_module_percpu_sym_owner(struct syment *); static int is_percpu_symbol(struct syment *); @@ -6112,6 +6113,7 @@ cmd_datatype_common(ulong flags) char *separator; char *structname, *members; char *memberlist[MAXARGS]; + char *typename; dm = &datatype_member; count = 0xdeadbeef; @@ -6122,6 +6124,7 @@ cmd_datatype_common(ulong flags) separator = members = NULL; cpuspec = NULL; cpus = NULL; + typename = NULL; while ((c = getopt(argcnt, args, "pxdhfuc:rvol:")) != EOF) { switch (c) @@ -6245,6 +6248,12 @@ cmd_datatype_common(ulong flags) sp->name); cpuspec = NULL; } + typename = expr_type_name(sp->name); + if (cpuspec && typename && + LASTCHAR(typename) == '*' ? 1 : 0) + error(WARNING, + "percpu symbol %s is of type pointer.\n", + sp->name); addr = sp->value; aflag++; } else { @@ -6364,6 +6373,9 @@ freebuf: if (cpus) FREEBUF(cpus); + + if (typename) + FREEBUF(typename); } static void -- 2.5.5 -- Aaron Tomlin -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility