On 07/06/2011 08:45 AM, Eric Blake wrote:
> #define _SDT_ARGARRAY(x) (__builtin_classify_type (x) == 14 \
> || __builtin_classify_type (x) == 5)
>
Too bad gcc doesn't document this builtin.
It's documented in the Internals manual:
http://gcc.gnu.org/onlinedocs/gccint/Varargs.html
http://gcc.gnu.org/viewcvs/trunk/gcc/typeclass.h?view=markup
> So perhaps you could copy that macro and let your compatibility
casting
> do something like this:
>
> #define _SDT_CAST(x) \
> __builtin_choose_expr (_SDT_ARGARRAY(x), (uintptr_t)(x), (x))
That depends on gcc - so we'd have to provide a fallback define to a
plain cast for other compilers. I'll keep that in mind if the current
patch for libvirt (which doesn't use any gcc extensions) proves to be
problematic.
Well, sdt.h itself uses such extensions, so you may not get far with
very different compilers anyway. But FWIW, it seems to work fine on
F15's clang-2.8.
And we may still end up defining away the problem, by just stating
that libvirt requires systemtap 1.4 or newer before libvirt will use
systemtap.
I wouldn't blame you, if you can get away with that. We think the
current version of SDT is more sane overall, with better flexibility as
well as better resulting metadata.
Josh