diff options
author | M Joonas Pihlaja <jpihlaja@cc.helsinki.fi> | 2009-07-24 09:12:10 +0300 |
---|---|---|
committer | M Joonas Pihlaja <jpihlaja@cc.helsinki.fi> | 2009-09-02 04:50:21 +0100 |
commit | b509b548b1e3ac5a9e3de2f9652cd1973d295fa3 (patch) | |
tree | 8f0560f27b679085092ae22e73973ae36fb10356 | |
parent | 2b0e070f6a6bee415b1036fd149f0c41bcf87abb (diff) |
[trace] Check for __builtin_return_address explicitly.
Some other compilers such as clang and icc support the
__builtin_return_address() intrinsic as well, so we don't
need to check for __GNUC__ >= 3 only.
-rw-r--r-- | build/configure.ac.system | 12 | ||||
-rw-r--r-- | util/cairo-trace/trace.c | 2 |
2 files changed, 13 insertions, 1 deletions
diff --git a/build/configure.ac.system b/build/configure.ac.system index 09d2e307..3fffb949 100644 --- a/build/configure.ac.system +++ b/build/configure.ac.system @@ -73,6 +73,18 @@ dnl ==================================================================== dnl Header/function checks dnl ==================================================================== +dnl check if we have a __builtin_return_address for the cairo-trace +dnl utility. +AC_MSG_CHECKING([for __builtin_return_address(0)]) +AC_TRY_COMPILE([],[__builtin_return_address(0);], + [have_builtin_return_address=yes], + [have_builtin_return_address=no]) +AC_MSG_RESULT($have_builtin_return_address) +if test "x$have_builtin_return_address" = "xyes"; then + AC_DEFINE(HAVE_BUILTIN_RETURN_ADDRESS, 1, + [Define to 1 if your compiler supports the __builtin_return_address() intrinsic.]) +fi + dnl Checks for precise integer types AC_CHECK_HEADERS([stdint.h inttypes.h sys/int_types.h]) AC_CHECK_TYPES([uint64_t, uint128_t]) diff --git a/util/cairo-trace/trace.c b/util/cairo-trace/trace.c index 626a81e4..9a1c54e9 100644 --- a/util/cairo-trace/trace.c +++ b/util/cairo-trace/trace.c @@ -177,7 +177,7 @@ static bool _line_info; static bool _mark_dirty; static const cairo_user_data_key_t destroy_key; -#if __GNUC__ >= 3 +#if HAVE_BUILTIN_RETURN_ADDRESS #define _emit_line_info() do { \ if (_line_info && _write_lock ()) { \ void *addr = __builtin_return_address(0); \ |