----- Original Message -----
On Mon 2016-04-18 11:22 -0400, Dave Anderson wrote:
Hi Dave,
> I may be missing something, but it seems like you just need it to calculate
> cpuaddr each time through the loop, and then you're done with it. But then
> you rewind() it, store it, and keep tmpfp open across the do_datatype_addr()
> call? What am I missing?
sure -- but I'd prefer to avoid the use of tmpfile()/fclose() in the for loop.
Albeit since we set OPEN_ONLY_ONCE, the following should be fine:
Yep, much better...
Thanks,
Dave
@@ -6138,6 +6172,8 @@ cmd_datatype_common(ulong flags)
}
if (cpuspec) {
+ typename = expr_type_name(sp->name);
+ ptype = typename && LASTCHAR(typename) == '*' ? 1 : 0;
cpus = get_cpumask_buf();
if (STREQ(cpuspec, ""))
SET_BIT(cpus, CURRENT_CONTEXT()->processor);
@@ -6227,7 +6263,20 @@ cmd_datatype_common(ulong flags)
continue;
}
+ if (ptype) {
+ open_tmpfile();
+ snprintf(buf, sizeof buf, "p *(%s*) 0x%lx",
+ typename, cpuaddr);
+ gdb_pass_through(buf, pc->tmpfile, GNU_RETURN_ON_ERROR);
+
+ rewind(pc->tmpfile);
+ fgets(buf, BUFSIZE, pc->tmpfile);
+ parse_line(buf, argv);
+ cpuaddr = htol(argv[3], FAULT_ON_ERROR, NULL);
+ close_tmpfile();
+ }
fprintf(fp, "%lx\n", cpuaddr);
+
do_datatype_addr(dm, cpuaddr , count,
flags, memberlist, argc_members);
}
@@ -6245,6 +6294,9 @@ freebuf:
if (cpus)
FREEBUF(cpus);
+
+ if (typename)
+ FREEBUF(typename);
}
static void
--
Aaron Tomlin
--
Crash-utility mailing list
Crash-utility(a)redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility