summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorM Joonas Pihlaja <jpihlaja@cc.helsinki.fi>2009-07-24 09:12:10 +0300
committerM Joonas Pihlaja <jpihlaja@cc.helsinki.fi>2009-09-02 04:50:21 +0100
commitb509b548b1e3ac5a9e3de2f9652cd1973d295fa3 (patch)
tree8f0560f27b679085092ae22e73973ae36fb10356
parent2b0e070f6a6bee415b1036fd149f0c41bcf87abb (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.system12
-rw-r--r--util/cairo-trace/trace.c2
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); \