On Thu, Jul 24, 2008 at 12:12:01PM -0700, Chris Kiick wrote:
> Hi,
>    Searched for similar errors and nothing came up. Anybody know what this is?
> When using aggregate stddev, and then trying to print it at END, using 
> printa, I get this error:
> dtrace: processing aborted: Invalid return value from callback
> avg works fine. Tried on two recent builds of solaris (build 89 and build 
> 94), on two difference sparc systems.
> Here's a sample script:
> 

Easier test case:

--- cut here ---
#!/usr/sbin/dtrace -Fs

BEGIN
{
        @ = stddev(100);
        @ = stddev(200);
        @ = stddev(300);

        printa("[EMAIL PROTECTED]", @);
}
--- cut here ---

Looks like we're missing a printf handler for stddev:

usr/src/lib/libdtrace/common/dt_printf.c:
...
1213 static int
1214 pfprint_average(dtrace_hdl_t *dtp, FILE *fp, const char *format,
1215     const dt_pfargd_t *pfd, const void *addr, size_t size, uint64_t normal)
1216 {
1217         const uint64_t *data = addr;
1218 
1219         if (size != sizeof (uint64_t) * 2)
1220                 return (dt_set_errno(dtp, EDT_DMISMATCH));
1221 
1222         return (dt_printf(dtp, fp, format,
1223             data[0] ? data[1] / normal / data[0] : 0));
1224 }
...
1242 static int
1243 dt_printf_format(dtrace_hdl_t *dtp, FILE *fp, const dt_pfargv_t *pfv,
1244     const dtrace_recdesc_t *recs, uint_t nrecs, const void *buf,
1245     size_t len, const dtrace_aggdata_t **aggsdata, int naggvars)
1246 {
...
1414                 switch (rec->dtrd_action) {
1415                 case DTRACEAGG_AVG:
1416                         func = pfprint_average;
1417                         break;
...
1430                 default:
1431                         func = pfc->pfc_print;
1432                         break;
1433                 }

We need a matching entry for stddev.

Cheers,
- jonathan

_______________________________________________
dtrace-discuss mailing list
[email protected]

Reply via email to