Discussion:
isenabled probles broken on Mac OS X Lion
Brendan Gregg
2011-07-27 23:00:29 UTC
Permalink
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
--
Brendan Gregg, Joyent http://dtrace.org/blogs/brendan
James McIlree
2011-07-28 05:07:32 UTC
Permalink
I'm not able to reproduce, what compiler are you using?

James M
Post by Brendan Gregg
G'Day,
$ cat -n liontest.d
1 provider lion {
2 probe hello(const char *world);
3 };
$ dtrace -h -s liontest.d -o liontest.h
$ cat -n liontest.h
[...]
24 #define LION_HELLO_ENABLED() \
25 __dtrace_isenabled$lion$hello$v1()
$ 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.
#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
<lion.h><snowleopard.h>_______________________________________________
dtrace-discuss mailing list
Brendan Gregg
2011-07-28 06:44:43 UTC
Permalink
Oh, is this a gcc issue? Does xcode handle it ok?

Brendan
Post by James McIlree
I'm not able to reproduce, what compiler are you using?
James M
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
$ cat -n liontest.d
1 provider lion {
2 probe hello(const char *world);
3 };
$ dtrace -h -s liontest.d -o liontest.h
$ cat -n liontest.h
[...]
24 #define LION_HELLO_ENABLED() \
25 __dtrace_isenabled$lion$hello$v1()
$ 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.
#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
<lion.h><snowleopard.h>_______________________________________________
dtrace-discuss mailing list
--
Brendan Gregg, Joyent http://dtrace.org/blogs/brendan
James McIlree
2011-07-28 21:35:21 UTC
Permalink
I tried llvm-gcc and clang, both worked for me. It looks like invoking gcc "by name" gives you llvm-gcc on a default Xcode install.

I think everything we ship should work, are you building your own gcc?

James M
Post by Brendan Gregg
Oh, is this a gcc issue? Does xcode handle it ok?
Brendan
I'm not able to reproduce, what compiler are you using?
James M
Post by Brendan Gregg
G'Day,
$ cat -n liontest.d
1 provider lion {
2 probe hello(const char *world);
3 };
$ dtrace -h -s liontest.d -o liontest.h
$ cat -n liontest.h
[...]
24 #define LION_HELLO_ENABLED() \
25 __dtrace_isenabled$lion$hello$v1()
$ 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.
#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
<lion.h><snowleopard.h>_______________________________________________
dtrace-discuss mailing list
--
Brendan Gregg, Joyent http://dtrace.org/blogs/brendan
Loading...