On Wed, Jan 19, 2011 at 04:49:04PM -0500, Frank Ch. Eigler wrote:
tgl wrote:
> [...] I think the only near-term fix is to turn off dtrace support
> in mysql. [...]
We'll do one better; we'll add a hack to sys/sdt.h to make mysql build
and respin systemtap today or tomorrow.
> But the real issue here is that systemtap has got to be more chary of
> what they expose into application namespace, or this same scenario is
> going to be played out again and again.
I agree. It's not a great situation, but local GCC/C++ experts have
found no better way to type-analyze the parameters, to ensure their
safe passage to the tool. (Our testing shows <limits> is not
offensive to other C++ apps we've seen.)
If you really want to avoid #include <limits> in sys/sdt.h, you can, e.g. by using
template<typename __sdt_T>
struct __sdt_type
{
static const bool __sdt_signed = false;
};
#define __SDT_ALWAYS_SIGNED(T) \
template<> struct __sdt_type<T> { static const bool __sdt_signed = true; };
#define __SDT_COND_SIGNED(T) \
template<> struct __sdt_type<T> { static const bool __sdt_signed = ((T)(-1)
< 0); };
__SDT_ALWAYS_SIGNED(signed char)
__SDT_ALWAYS_SIGNED(short)
__SDT_ALWAYS_SIGNED(int)
__SDT_ALWAYS_SIGNED(long)
__SDT_ALWAYS_SIGNED(long long)
__SDT_COND_SIGNED(char)
__SDT_COND_SIGNED(wchar_t)
#if defined (__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 &&
__GNUC_MINOR__ >= 4))
__SDT_COND_SIGNED(char16_t)
__SDT_COND_SIGNED(char32_t)
#endif
Jakub