----- 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@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/crash-utility > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility