William J. Kucharski
2006-Aug-23 10:54 UTC
[dtrace-discuss] DTrace erroneously truncates return values to 32 bits on 32-bit kernels
I''ve just filed CR 6462995 on this but Adam Leventhal suggested I
mention it here as a heads up:
There''s currently a bug in DTrace where 64-bit return values are
truncated to 32 bits in length on 32-bit kernels.
For example, given this script:
#pragma D option quiet
fbt::getpid:return
{
printf("\n\tpid %d ppid %d\n", pid, ppid);
printf("\trval 0x%x pid %d ppid %d\n", args[1], args[1] &
0xffffffff,
args[1] >> 32);
}
When run on a 64-bit kernel, it will produce output as expected, e.g.:
# dtrace -s ./getpid.d
pid 665021 ppid 133049
rval 0x207b9000a25bd pid 665021 ppid 133049
But when run on a 32-bit kernel, the top 32 bits of the return value will go
missing:
# dtrace -s ./getpid.d
pid 100246 ppid 1
rval 0x18796 pid 100246 ppid 0
Adam already knows what''s wrong. :-)
This message posted from opensolaris.org