[dtrace-discuss] USDT probe problems?
Adam Leventhal
ahl at eng.sun.com
Thu Dec 7 22:52:24 PST 2006
Hey James,
Glad you finally made it onto the discussion list.
Unfortunately, here isn't any support for floating point arguments with
USDT or any other probes for that matter.
There's a long-standing RFE to build true floating-point support for DTrace.
It's not a small project and the DTrace team doesn't have the cycles to
work on it. If anyone's interested in picking it up, feel free to mail the
list or send me mail privately.
Adam
On Thu, Dec 07, 2006 at 01:14:10PM -0800, James McIlree wrote:
>
> I've run into some potential oddness when trying to use
> USDT probes. I've boiled it down into a small test case, which I've
> included below.
>
> Here is some sample output:
>
> /home/ovrskeek> ./usdt
> floatArg: 1.000000 doubleArg: 1.500000 longLongArg: feeaadd00000001
> floatArg: 2.000000 doubleArg: 2.500000 longLongArg: feeaadd00000002
> floatArg: 3.000000 doubleArg: 3.500000 longLongArg: feeaadd00000003
> floatArg: 4.000000 doubleArg: 4.500000 longLongArg: feeaadd00000004
>
> /home/ovrskeek# dtrace -n 'fooProvider*:::longLongProbe
> { trace(args[0]); }'
> dtrace: description 'fooProvider*:::longLongProbe ' matched 1 probe
> CPU ID FUNCTION:NAME
> 1 52718 main:longLongProbe 2
> 1 52718 main:longLongProbe 3
> 1 52718 main:longLongProbe 4
>
> /home/ovrskeek# dtrace -n 'fooProvider*:::floatProbe
> { trace(args[0]); }'
> dtrace: invalid probe specifier fooProvider*:::floatProbe
> { trace(args[0]); }: in action list: translator for args[0] from float
> to float is not defined
>
> /home/ovrskeek# dtrace -n 'fooProvider*:::doubleProbe
> { trace(args[0]); }'
> dtrace: invalid probe specifier fooProvider*:::doubleProbe
> { trace(args[0]); }: in action list: translator for args[0] from
> double to double is not defined
>
> From poking around in the source code, it appears the
> first problem is related to how USDT arguments are read from the stack.
>
> I wasn't certain if the second two were an oversight,
> or an intentional guard against using floats/doubles (which may
> take ABI groveling to find).
>
> Doctor, doctor, it hurts when I use long long's in my
> USDT probes :-). Any advice?
>
> James McIlree
>
>
> ----------- fooProvider.d -------------------
>
> provider fooProvider {
> probe floatProbe(float);
> probe doubleProbe(double);
> probe longLongProbe(long long);
> };
>
> ------------ usdt.c ------------------------
>
> #include <stdio.h>
> #include "fooProvider.h"
>
> int main() {
> float floatArg = 1.0f;
> double doubleArg = 1.5;
> long long longLongArg = 0x0FEEAADD00000001LL;
>
> while (1) {
> FOOPROVIDER_FLOATPROBE(floatArg);
> FOOPROVIDER_DOUBLEPROBE(doubleArg);
> FOOPROVIDER_LONGLONGPROBE(longLongArg);
>
> printf("floatArg: %f doubleArg: %f longLongArg: %llx
> \n", (double)floatArg, doubleArg, (unsigned long long)longLongArg);
> floatArg++;
> doubleArg++;
> longLongArg++;
>
> sleep(1);
> }
>
> return 0;
> }
>
> _______________________________________________
> dtrace-discuss mailing list
> dtrace-discuss at opensolaris.org
--
Adam Leventhal, Solaris Kernel Development http://blogs.sun.com/ahl
More information about the dtrace-discuss
mailing list