summaryrefslogtreecommitdiff
path: root/m4
diff options
context:
space:
mode:
author <shinichiro.hamaji@gmail.com>2010-01-18 06:15:33 +0000
committer <shinichiro.hamaji@gmail.com>2010-01-18 06:15:33 +0000
commit327359662c7e320ca0891090647fd57949b9bad1 (patch)
treeb1355a284a7e1d9e497b10717c8634cb2bc8dbbe /m4
parentb71aa943814bad7668e5e058bc7c5599d7169258 (diff)
downloadglog-327359662c7e320ca0891090647fd57949b9bad1.tar.gz
glog-327359662c7e320ca0891090647fd57949b9bad1.tar.bz2
glog-327359662c7e320ca0891090647fd57949b9bad1.zip
Handle ucontext.h properly in Snow leopard.
git-svn-id: https://google-glog.googlecode.com/svn/trunk@75 eb4d4688-79bd-11dd-afb4-1d65580434c0
Diffstat (limited to 'm4')
-rw-r--r--m4/pc_from_ucontext.m433
1 files changed, 24 insertions, 9 deletions
diff --git a/m4/pc_from_ucontext.m4 b/m4/pc_from_ucontext.m4
index 8c4c5ce..daffddb 100644
--- a/m4/pc_from_ucontext.m4
+++ b/m4/pc_from_ucontext.m4
@@ -6,8 +6,13 @@
# OpenBSD doesn't have ucontext.h, but we can get PC from ucontext_t
# by using signal.h.
+# The first argument of AC_PC_FROM_UCONTEXT will be invoked when we
+# cannot find a way to obtain PC from ucontext.
+
AC_DEFUN([AC_PC_FROM_UCONTEXT],
- [AC_MSG_CHECKING([how to access the program counter from a struct ucontext])
+ [AC_CHECK_HEADERS(ucontext.h)
+ AC_CHECK_HEADERS(sys/ucontext.h) # ucontext on OS X 10.6 (at least)
+ AC_MSG_CHECKING([how to access the program counter from a struct ucontext])
pc_fields=" uc_mcontext.gregs[[REG_PC]]" # Solaris x86 (32 + 64 bit)
pc_fields="$pc_fields uc_mcontext.gregs[[REG_EIP]]" # Linux (i386)
pc_fields="$pc_fields uc_mcontext.gregs[[REG_RIP]]" # Linux (x86_64)
@@ -28,13 +33,23 @@ AC_DEFUN([AC_PC_FROM_UCONTEXT],
pc_field_found=false
for pc_field in $pc_fields; do
if ! $pc_field_found; then
- AC_TRY_COMPILE([#define _GNU_SOURCE 1
- #include <ucontext.h>],
- [ucontext_t u; return u.$pc_field == 0;],
- AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
- How to access the PC from a struct ucontext)
- AC_MSG_RESULT([$pc_field])
- pc_field_found=true)
+ if test "x$ac_cv_header_sys_ucontext_h" = xyes; then
+ AC_TRY_COMPILE([#define _GNU_SOURCE 1
+ #include <sys/ucontext.h>],
+ [ucontext_t u; return u.$pc_field == 0;],
+ AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
+ How to access the PC from a struct ucontext)
+ AC_MSG_RESULT([$pc_field])
+ pc_field_found=true)
+ else
+ AC_TRY_COMPILE([#define _GNU_SOURCE 1
+ #include <ucontext.h>],
+ [ucontext_t u; return u.$pc_field == 0;],
+ AC_DEFINE_UNQUOTED(PC_FROM_UCONTEXT, $pc_field,
+ How to access the PC from a struct ucontext)
+ AC_MSG_RESULT([$pc_field])
+ pc_field_found=true)
+ fi
fi
done
if ! $pc_field_found; then
@@ -52,5 +67,5 @@ AC_DEFUN([AC_PC_FROM_UCONTEXT],
done
fi
if ! $pc_field_found; then
- AC_MSG_WARN(Could not find the PC. Will not output failed addresses...)
+ [$1]
fi])