Brendan Gregg
2011-07-27 23:00:29 UTC
G'Day,
The way isenabled probes are compiled on Mac OS X Lion has changed in a way
that dosen't compile (at least, with some compilers). Here's the test to
try:
$ cat -n liontest.d
1 provider lion {
2 probe hello(const char *world);
3 };
$ dtrace -h -s liontest.d -o liontest.h
On Snow Leopard this output:
$ cat -n liontest.h
[...]
24 #define LION_HELLO_ENABLED() \
25 __dtrace_isenabled$lion$hello$v1()
On Lion that is now:
$ can -n liontest.h
[...]
26 #define LION_HELLO_ENABLED() \
27 ({ int _r = __dtrace_isenabled$lion$hello$v1(); \
28 __asm__ volatile(""); \
29 _r; })
Which doesn't compile when used in if statements (the use case for
isenabled). Which means, some software that has DTrace probes is now not
compiling on Lion.
Another difference is the addition of:
#if !defined(DTRACE_PROBES_DISABLED) || !DTRACE_PROBES_DISABLED
but I don't think that is breaking anything.
I've attached both header files from the OS versions. Does Apple know of
this?
thanks,
Brendan
The way isenabled probes are compiled on Mac OS X Lion has changed in a way
that dosen't compile (at least, with some compilers). Here's the test to
try:
$ cat -n liontest.d
1 provider lion {
2 probe hello(const char *world);
3 };
$ dtrace -h -s liontest.d -o liontest.h
On Snow Leopard this output:
$ cat -n liontest.h
[...]
24 #define LION_HELLO_ENABLED() \
25 __dtrace_isenabled$lion$hello$v1()
On Lion that is now:
$ can -n liontest.h
[...]
26 #define LION_HELLO_ENABLED() \
27 ({ int _r = __dtrace_isenabled$lion$hello$v1(); \
28 __asm__ volatile(""); \
29 _r; })
Which doesn't compile when used in if statements (the use case for
isenabled). Which means, some software that has DTrace probes is now not
compiling on Lion.
Another difference is the addition of:
#if !defined(DTRACE_PROBES_DISABLED) || !DTRACE_PROBES_DISABLED
but I don't think that is breaking anything.
I've attached both header files from the OS versions. Does Apple know of
this?
thanks,
Brendan
--
Brendan Gregg, Joyent http://dtrace.org/blogs/brendan
Brendan Gregg, Joyent http://dtrace.org/blogs/brendan