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 foor loop. Albeit since we set OPEN_ONLY_ONCE, the following should be fine: @@ -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