----- 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
> [email protected]
> https://www.redhat.com/mailman/listinfo/crash-utility
> 

--
Crash-utility mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/crash-utility

Reply via email to