Hey Andrea,

> As you can see the return value is an address, actually the same address as
> arg0 in entry.
> I suspect I'm doing something wrong in dtrace but I can't realize
> what....Could you please advice?

The return type of calc_guest_util() was cut off, but I infer that
it's a double. DTrace doesn't have much by way of support for
floating-point values -- adding access to the floating-point registers
and support for manipulating floating-point datatypes have long been
RFEs for DTrace. I'd offer to add them to illumos, but I doubt that
would be of much help to users of Oracle Solaris.

Adam

On Sun, Jun 12, 2011 at 4:04 AM, Andrea Cucciarre'
<andrea.cuccia...@oracle.com> wrote:
> Hello,
>
> I need to use the pid provider to trace the inputs and return value of the
> following function
>
> calc_guest_util(rs_guest_util_t *gutil, int ncpu, int fcpu)
>   {
>    <snip>
>    return ((100.0 * (double)used_cycles) / (double)(total_cycles));
>   }
>
> I can trace the input arguments with the following dscript (if there's a
> quicker and cleaver dscript to do that please correct me):
>
> #!/usr/sbin/dtrace -qs
>
> typedef struct rs_guest_util {
>         uint64_t        lifespan;
>         uint64_t        wallclock_delta;
>         uint64_t        active_delta;
>         uint64_t        stopped_cycles;
>         uint64_t        yielded_cycles;
>  } rs_guest_util_t;
>
> pid$1::calc_guest_util:entry
> {
> self->guest=((rs_guest_util_t *)(copyin(arg0,sizeof(rs_guest_util_t))));
> printf("arg0 %x\n",arg0);
> printf("ncpu %d\n",arg1);
> printf("fcup %d\n",arg2);
> printf("active delta %d\n",self->guest->active_delta);
> printf("stopped cycles %d\n",self->guest->stopped_cycles);
> printf("yielded cycles %d\n",self->guest->yielded_cycles);
> }
>
> Then I added the following to trace the return value of the function
>
> pid$1::calc_guest_util:return
> {
> printf("return %x\n",arg1);
> }
>
> But I get the following output:
>
> arg0 ffbffb80
> ncpu 8
> fcup 0
> active delta 583970560
> stopped cycles 0
> yielded cycles 4652066048
> total cycles 4671764480
> return ffbffb80
>
> As you can see the return value is an address, actually the same address as
> arg0 in entry.
> I suspect I'm doing something wrong in dtrace but I can't realize
> what....Could you please advice?
>
> Regards
> Andrea
>
>
>
>
> _______________________________________________
> dtrace-discuss mailing list
> dtrace-discuss@opensolaris.org
>



-- 
Adam Leventhal, Delphix
http://dtrace.org/blogs/ahl

275 Middlefield Road, Suite 50
Menlo Park, CA 94025
http://www.delphix.com
_______________________________________________
dtrace-discuss mailing list
dtrace-discuss@opensolaris.org

Reply via email to