[libvirt] [PATCH] build: work around older systemtap header

Josh Stone jistone at redhat.com
Wed Jul 6 16:29:56 UTC 2011

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:

>> 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.


More information about the libvir-list mailing list