summaryrefslogtreecommitdiff
path: root/infrastructure/m4/ax_func_syscall.m4
blob: 40496bf02c80c77914e6f2b044cd43dd1b4c5063 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
dnl @synopsis AX_FUNC_SYSCALL
dnl
dnl This macro will find out how to call syscall. One or more of the following
dnl defines will be made as appropriate:
dnl HAVE_UNISTD_H            - If unistd.h is available
dnl HAVE_SYS_SYSCALL_H       - If sys/syscall.h is available
dnl HAVE_SYSCALL             - If syscall() is available and is defined in unistd.h
dnl HAVE___SYSCALL           - If __syscall() is available and is defined in unistd.h
dnl HAVE___SYSCALL_NEED_DEFN - If __syscall() is available but is not defined in unistd.h
dnl
dnl @category C
dnl @author Martin Ebourne
dnl @version 2005/07/01
dnl @license AllPermissive

AC_DEFUN([AX_FUNC_SYSCALL], [
  AC_CHECK_HEADERS([sys/syscall.h unistd.h])
  AC_CHECK_FUNCS([syscall __syscall])
  if test "x$ac_cv_func_syscall" != "xyes" &&
     test "x$ac_cv_func___syscall" != "xyes"; then
    AC_CACHE_CHECK([for __syscall needing definition], [have___syscall_need_defn],
      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
          $ac_includes_default
          #ifdef HAVE_SYS_SYSCALL_H
            #include <sys/syscall.h>
          #endif
          extern "C" off_t __syscall(quad_t number, ...);
          ]], [[
          __syscall(SYS_exit, 0);
          return 1;
        ]])],
        [have___syscall_need_defn=yes], [have___syscall_need_defn=no]
      )])
    if test "x$have___syscall_need_defn" = "xyes"; then
      AC_DEFINE([HAVE___SYSCALL_NEED_DEFN], 1,
                [Define to 1 if __syscall is available but needs a definition])
    fi
  fi
  ])dnl