This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]