xref: /netbsd-src/external/gpl3/gdb.old/dist/gdbsupport/common.m4 (revision a45db23f655e22f0c2354600d3b3c2cb98abf2dc)
1dnl Autoconf configure snippets for common.
2dnl Copyright (C) 1995-2020 Free Software Foundation, Inc.
3dnl
4dnl This file is part of GDB.
5dnl
6dnl This program is free software; you can redistribute it and/or modify
7dnl it under the terms of the GNU General Public License as published by
8dnl the Free Software Foundation; either version 3 of the License, or
9dnl (at your option) any later version.
10dnl
11dnl This program is distributed in the hope that it will be useful,
12dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14dnl GNU General Public License for more details.
15dnl
16dnl You should have received a copy of the GNU General Public License
17dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
19dnl Invoke configury needed by the files in 'common'.
20AC_DEFUN([GDB_AC_COMMON], [
21  # Set the 'development' global.
22  . $srcdir/../bfd/development.sh
23
24  AC_HEADER_STDC
25  AC_FUNC_ALLOCA
26
27  WIN32APILIBS=
28  case ${host} in
29    *mingw32*)
30      AC_DEFINE(USE_WIN32API, 1,
31		[Define if we should use the Windows API, instead of the
32		 POSIX API.  On Windows, we use the Windows API when
33		 building for MinGW, but the POSIX API when building
34		 for Cygwin.])
35      WIN32APILIBS="-lws2_32"
36      ;;
37  esac
38
39  dnl Note that this requires codeset.m4, which is included
40  dnl by the users of common.m4.
41  AM_LANGINFO_CODESET
42
43  AC_CHECK_HEADERS(linux/perf_event.h locale.h memory.h signal.h dnl
44		   sys/resource.h sys/socket.h dnl
45		   sys/un.h sys/wait.h dnl
46		   thread_db.h wait.h dnl
47		   termios.h dnl
48		   dlfcn.h dnl
49		   linux/elf.h proc_service.h dnl
50		   poll.h sys/poll.h sys/select.h)
51
52  AC_FUNC_MMAP
53  AC_FUNC_VFORK
54  AC_CHECK_FUNCS([fdwalk getrlimit pipe pipe2 poll socketpair sigaction \
55		  ptrace64 sbrk setns sigaltstack sigprocmask \
56		  setpgid setpgrp getrusage getauxval])
57
58  dnl Check if we can disable the virtual address space randomization.
59  dnl The functionality of setarch -R.
60  AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
61  define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [
62  #      if !HAVE_DECL_ADDR_NO_RANDOMIZE
63  #       define ADDR_NO_RANDOMIZE 0x0040000
64  #      endif
65	 /* Test the flag could be set and stays set.  */
66	 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
67	 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
68	     return 1])])
69  AC_RUN_IFELSE([PERSONALITY_TEST],
70		[have_personality=true],
71		[have_personality=false],
72		[AC_LINK_IFELSE([PERSONALITY_TEST],
73				[have_personality=true],
74				[have_personality=false])])
75  if $have_personality
76  then
77      AC_DEFINE([HAVE_PERSONALITY], 1,
78		[Define if you support the personality syscall.])
79  fi
80
81  AC_CHECK_DECLS([strstr])
82
83  # ----------------------- #
84  # Checks for structures.  #
85  # ----------------------- #
86
87  AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize])
88
89  AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd,
90    [AC_DEFINE(HAVE_KINFO_GETFILE, 1,
91	      [Define to 1 if your system has the kinfo_getfile function. ])])
92
93  # Check for std::thread.  This does not work on some platforms, like
94  # mingw and DJGPP.
95  AC_LANG_PUSH([C++])
96  AX_PTHREAD([threads=yes], [threads=no])
97  if test "$threads" = "yes"; then
98    save_LIBS="$LIBS"
99    LIBS="$PTHREAD_LIBS $LIBS"
100    save_CXXFLAGS="$CXXFLAGS"
101    CXXFLAGS="$PTHREAD_CFLAGS $save_CXXFLAGS"
102    AC_CACHE_CHECK([for std::thread],
103		   gdb_cv_cxx_std_thread,
104		   [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
105    [[#include <thread>
106      void callback() { }]],
107    [[std::thread t(callback);]])],
108				  gdb_cv_cxx_std_thread=yes,
109				  gdb_cv_cxx_std_thread=no)])
110
111    # This check must be here, while LIBS includes any necessary
112    # threading library.
113    AC_CHECK_FUNCS([pthread_sigmask pthread_setname_np])
114
115    LIBS="$save_LIBS"
116    CXXFLAGS="$save_CXXFLAGS"
117  fi
118  if test "$gdb_cv_cxx_std_thread" = "yes"; then
119    AC_DEFINE(CXX_STD_THREAD, 1,
120	      [Define to 1 if std::thread works.])
121  fi
122  AC_LANG_POP
123
124  dnl Check if sigsetjmp is available.  Using AC_CHECK_FUNCS won't
125  dnl do since sigsetjmp might only be defined as a macro.
126  AC_CACHE_CHECK([for sigsetjmp], gdb_cv_func_sigsetjmp,
127  [AC_TRY_COMPILE([
128  #include <setjmp.h>
129  ], [sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);],
130  gdb_cv_func_sigsetjmp=yes, gdb_cv_func_sigsetjmp=no)])
131  if test "$gdb_cv_func_sigsetjmp" = "yes"; then
132    AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available. ])
133  fi
134
135  AC_ARG_WITH(intel_pt,
136    AS_HELP_STRING([--with-intel-pt], [include Intel Processor Trace support (auto/yes/no)]),
137    [], [with_intel_pt=auto])
138  AC_MSG_CHECKING([whether to use intel pt])
139  AC_MSG_RESULT([$with_intel_pt])
140
141  if test "${with_intel_pt}" = no; then
142    AC_MSG_WARN([Intel Processor Trace support disabled; some features may be unavailable.])
143    HAVE_LIBIPT=no
144  else
145    AC_PREPROC_IFELSE([AC_LANG_SOURCE([[
146  #include <linux/perf_event.h>
147  #ifndef PERF_ATTR_SIZE_VER5
148  # error
149  #endif
150    ]])], [perf_event=yes], [perf_event=no])
151    if test "$perf_event" != yes; then
152      if test "$with_intel_pt" = yes; then
153	AC_MSG_ERROR([linux/perf_event.h missing or too old])
154      else
155	AC_MSG_WARN([linux/perf_event.h missing or too old; some features may be unavailable.])
156      fi
157    fi
158
159    AC_LIB_HAVE_LINKFLAGS([ipt], [], [#include "intel-pt.h"], [pt_insn_alloc_decoder (0);])
160    if test "$HAVE_LIBIPT" != yes; then
161      if test "$with_intel_pt" = yes; then
162	AC_MSG_ERROR([libipt is missing or unusable])
163      else
164	AC_MSG_WARN([libipt is missing or unusable; some features may be unavailable.])
165      fi
166    else
167      save_LIBS=$LIBS
168      LIBS="$LIBS $LIBIPT"
169      AC_CHECK_FUNCS(pt_insn_event)
170      AC_CHECK_MEMBERS([struct pt_insn.enabled, struct pt_insn.resynced], [], [],
171		       [#include <intel-pt.h>])
172      LIBS=$save_LIBS
173    fi
174  fi
175
176  BFD_SYS_PROCFS_H
177  if test "$ac_cv_header_sys_procfs_h" = yes; then
178    BFD_HAVE_SYS_PROCFS_TYPE(gregset_t)
179    BFD_HAVE_SYS_PROCFS_TYPE(fpregset_t)
180    BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
181    BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t)
182    BFD_HAVE_SYS_PROCFS_TYPE(prgregset32_t)
183    BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
184    BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
185    BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
186  fi
187])
188