1 dnl Autoconf configure script for GDB server.
2 dnl Copyright (C) 2000-2016 Free Software Foundation, Inc.
4 dnl This file is part of GDB.
6 dnl This program is free software; you can redistribute it and/or modify
7 dnl it under the terms of the GNU General Public License as published by
8 dnl the Free Software Foundation; either version 3 of the License, or
9 dnl (at your option) any later version.
11 dnl This program is distributed in the hope that it will be useful,
12 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
13 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 dnl GNU General Public License for more details.
16 dnl You should have received a copy of the GNU General Public License
17 dnl along with this program. If not, see <http://www.gnu.org/licenses/>.
19 dnl Process this file with autoconf to produce a configure script.
24 AC_CONFIG_HEADER(config.h:config.in)
43 # See if we are building with C++, and substitute COMPILER.
46 # Set the 'development' global.
47 . $srcdir/../../bfd/development.sh
49 # Enable -lmcheck by default (it provides cheap-enough memory
50 # mangling), but turn it off for releases.
56 GDB_AC_LIBMCHECK(${libmcheck_default})
58 ACX_NONCANONICAL_TARGET
61 # Dependency checking.
63 ZW_PROG_COMPILER_DEPENDENCIES([CC])
65 # Check for the 'make' the user wants to use.
66 AC_CHECK_PROGS(MAKE, make)
68 case "`$MAKE --version 2>&1 | sed 1q`" in
73 AM_CONDITIONAL(GMAKE, test "$MAKE_IS_GNU" = yes)
76 gnulib_extra_configure_args=
77 # If large-file support is disabled, make sure gnulib does the same.
78 if test "$enable_largefile" = no; then
79 gnulib_extra_configure_args="$gnulib_extra_configure_args --disable-largefile"
82 # Configure gnulib. We can't use AC_CONFIG_SUBDIRS as that'd expect
83 # to find the the source subdir to be configured directly under
84 # gdbserver/. We need to build gnulib under some other directory not
85 # "gnulib", to avoid the problem of both GDB and GDBserver wanting to
86 # build it in the same directory, when building in the source dir.
87 ACX_CONFIGURE_DIR(["../gnulib"], ["build-gnulib-gdbserver"],
88 ["$gnulib_extra_configure_args"])
90 ACX_CONFIGURE_DIR(["../../libiberty"], ["build-libiberty-gdbserver"])
92 AC_CHECK_HEADERS(sgtty.h termio.h termios.h sys/reg.h string.h dnl
93 proc_service.h sys/procfs.h linux/elf.h dnl
94 fcntl.h signal.h sys/file.h dnl
95 sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl
96 netinet/tcp.h arpa/inet.h)
98 AC_CHECK_FUNCS(getauxval pread pwrite pread64 setns)
102 # Check the return and argument types of ptrace.
109 AC_ARG_WITH(ust, [ --with-ust=PATH Specify prefix directory for the installed UST package
110 Equivalent to --with-ust-include=PATH/include
111 plus --with-ust-lib=PATH/lib])
112 AC_ARG_WITH(ust_include, [ --with-ust-include=PATH Specify directory for installed UST include files])
113 AC_ARG_WITH(ust_lib, [ --with-ust-lib=PATH Specify the directory for the installed UST library])
125 ustlibs="-L$with_ust/lib -lust"
126 ustinc="-I$with_ust/include "
129 if test "x$with_ust_include" != x; then
130 ustinc="-I$with_ust_include "
132 if test "x$with_ust_lib" != x; then
133 ustlibs="-L$with_ust_lib -lust"
136 if test "x$with_ust" != "xno"; then
137 saved_CFLAGS="$CFLAGS"
138 CFLAGS="$CFLAGS $ustinc"
139 AC_MSG_CHECKING([for ust])
141 #define CONFIG_UST_GDB_INTEGRATION
144 [AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_UST, 1, [Define if UST is available])],
145 [AC_MSG_RESULT([no]); ustlibs= ; ustinc= ])
146 CFLAGS="$saved_CFLAGS"
149 # Flags needed for UST
154 dnl The codebase isn't clean yet with this flag.
155 case " $WARN_CFLAGS " in
156 *" -Wmissing-prototypes "*)
157 WARN_CFLAGS="$WARN_CFLAGS -Wno-missing-prototypes"
161 dnl dladdr is glibc-specific. It is used by thread-db.c but only for
162 dnl debugging messages. It lives in -ldl which is handled below so we don't
163 dnl use AC_CHECK_LIB (or AC_SEARCH_LIBS) here. Instead we just temporarily
167 AC_CHECK_FUNCS(dladdr)
172 AC_CHECK_DECLS([strerror, perror, vasprintf, vsnprintf])
174 AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize])
176 AC_CHECK_TYPES(socklen_t, [], [],
177 [#include <sys/types.h>
178 #include <sys/socket.h>
183 # Starting with NDK version 9, <elf.h> actually includes definitions
184 # of Elf32_auxv_t and Elf64_auxv_t. But sadly, <elf.h> includes
185 # <sys/exec_elf.h> which defines some of the ELF types incorrectly,
186 # leading to conflicts with the defintions from <linux/elf.h>.
187 # This makes it impossible for us to include both <elf.h> and
188 # <linux/elf.h>, which means that, in practice, we do not have
189 # access to Elf32_auxv_t and Elf64_auxv_t on this platform.
190 # Therefore, do not try to auto-detect availability, as it would
191 # get it wrong on this platform.
194 AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [],
199 ACX_PKGVERSION([GDB])
200 ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/])
201 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description])
202 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address])
204 # Check for various supplementary target information (beyond the
205 # triplet) which might affect the choices in configure.srv.
210 AC_CACHE_CHECK([if building for x86-64], [gdb_cv_i386_is_x86_64],
211 [save_CPPFLAGS="$CPPFLAGS"
212 CPPFLAGS="$CPPFLAGS $CFLAGS"
213 AC_EGREP_CPP([got it], [
217 ], [gdb_cv_i386_is_x86_64=yes],
218 [gdb_cv_i386_is_x86_64=no])
219 CPPFLAGS="$save_CPPFLAGS"])
222 AC_CACHE_CHECK([if building for Coldfire], [gdb_cv_m68k_is_coldfire],
223 [save_CPPFLAGS="$CPPFLAGS"
224 CPPFLAGS="$CPPFLAGS $CFLAGS"
225 AC_EGREP_CPP([got it], [
229 ], [gdb_cv_m68k_is_coldfire=yes],
230 [gdb_cv_m68k_is_coldfire=no])
231 CPPFLAGS="$save_CPPFLAGS"])
235 . ${srcdir}/configure.srv
237 # Add in the common host objects.
238 . ${srcdir}/../common/common.host
239 srv_host_obs="$common_host_obs"
241 if test "${srv_mingwce}" = "yes"; then
243 elif test "${srv_mingw}" = "yes"; then
244 LIBS="$LIBS -lws2_32"
245 elif test "${srv_qnx}" = "yes"; then
246 LIBS="$LIBS -lsocket"
247 elif test "${srv_lynxos}" = "yes"; then
248 LIBS="$LIBS -lnetinet"
251 if test "${srv_mingw}" = "yes"; then
252 AC_DEFINE(USE_WIN32API, 1,
253 [Define if we should use the Windows API, instead of the
254 POSIX API. On Windows, we use the Windows API when
255 building for MinGW, but the POSIX API when building
259 if test "${srv_linux_usrregs}" = "yes"; then
260 AC_DEFINE(HAVE_LINUX_USRREGS, 1,
261 [Define if the target supports PTRACE_PEEKUSR for register ]
265 if test "${srv_linux_regsets}" = "yes"; then
266 AC_DEFINE(HAVE_LINUX_REGSETS, 1,
267 [Define if the target supports register sets.])
269 AC_MSG_CHECKING(for PTRACE_GETREGS)
270 AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getregs,
271 [AC_TRY_COMPILE([#include <sys/ptrace.h>],
273 [gdbsrv_cv_have_ptrace_getregs=yes],
274 [gdbsrv_cv_have_ptrace_getregs=no])])
275 AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getregs)
276 if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then
277 AC_DEFINE(HAVE_PTRACE_GETREGS, 1,
278 [Define if the target supports PTRACE_GETREGS for register ]
282 AC_MSG_CHECKING(for PTRACE_GETFPXREGS)
283 AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getfpxregs,
284 [AC_TRY_COMPILE([#include <sys/ptrace.h>],
285 [PTRACE_GETFPXREGS;],
286 [gdbsrv_cv_have_ptrace_getfpxregs=yes],
287 [gdbsrv_cv_have_ptrace_getfpxregs=no])])
288 AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getfpxregs)
289 if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then
290 AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1,
291 [Define if the target supports PTRACE_GETFPXREGS for extended ]
296 if test "${srv_linux_btrace}" = "yes"; then
297 AC_DEFINE(HAVE_LINUX_BTRACE, 1,
298 [Define if the target supports branch tracing.])
301 if test "$ac_cv_header_sys_procfs_h" = yes; then
302 BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
303 BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
304 BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
305 BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t)
306 BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
309 dnl Some systems (e.g., Android) have lwpid_t defined in libthread_db.h.
310 if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then
311 GDBSERVER_HAVE_THREAD_DB_TYPE(lwpid_t)
314 dnl Some systems (e.g., Android) have psaddr_t defined in libthread_db.h.
315 if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then
316 GDBSERVER_HAVE_THREAD_DB_TYPE(psaddr_t)
319 dnl Check for libdl, but do not add it to LIBS as only gdbserver
320 dnl needs it (and gdbreplay doesn't).
322 AC_CHECK_LIB(dl, dlopen)
328 if test "$srv_linux_thread_db" = "yes"; then
329 if test "$ac_cv_lib_dl_dlopen" = "yes"; then
331 AC_MSG_CHECKING(for the dynamic export flag)
332 old_LDFLAGS="$LDFLAGS"
333 # Older GNU ld supports --export-dynamic but --dynamic-list may not be
335 RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
336 LDFLAGS="$LDFLAGS $RDYNAMIC"
338 [found="-Wl,--dynamic-list"
339 RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'],
340 [RDYNAMIC="-rdynamic"
341 LDFLAGS="$old_LDFLAGS $RDYNAMIC"
347 LDFLAGS="$old_LDFLAGS"
348 AC_MSG_RESULT($found)
350 srv_libs="-lthread_db"
353 srv_thread_depfiles="thread-db.o proc-service.o"
354 AC_DEFINE(USE_THREAD_DB, 1, [Define if we should use libthread_db.])
355 AC_CACHE_CHECK([for TD_VERSION], gdbsrv_cv_have_td_version,
356 [AC_TRY_COMPILE([#include <thread_db.h>], [TD_VERSION;],
357 [gdbsrv_cv_have_td_version=yes],
358 [gdbsrv_cv_have_td_version=no])])
359 if test $gdbsrv_cv_have_td_version = yes; then
360 AC_DEFINE(HAVE_TD_VERSION, 1, [Define if TD_VERSION is available.])
364 AC_ARG_WITH(libthread-db,
365 AS_HELP_STRING([--with-libthread-db=PATH], [use given libthread_db directly]),
366 [srv_libthread_db_path="${withval}"
367 srv_libs="$srv_libthread_db_path"
370 if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then
371 AC_DEFINE(USE_LIBTHREAD_DB_DIRECTLY, 1, [Define if we should use libthread_db directly.])
374 if test "$srv_xmlfiles" != ""; then
375 srv_xmlbuiltin="xml-builtin.o"
376 AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.])
378 tmp_xmlfiles=$srv_xmlfiles
380 for f in $tmp_xmlfiles; do
381 srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f"
385 GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_host_obs"
386 GDBSERVER_LIBS="$srv_libs"
388 dnl Check whether the target supports __sync_*_compare_and_swap.
389 AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
390 gdbsrv_cv_have_sync_builtins, [
391 AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],
392 gdbsrv_cv_have_sync_builtins=yes,
393 gdbsrv_cv_have_sync_builtins=no)])
394 if test $gdbsrv_cv_have_sync_builtins = yes; then
395 AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
396 [Define to 1 if the target supports __sync_*_compare_and_swap])
399 dnl Check for -fvisibility=hidden support in the compiler.
400 saved_cflags="$CFLAGS"
401 CFLAGS="$CFLAGS -fvisibility=hidden"
402 AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),
403 [gdbsrv_cv_have_visibility_hidden=yes],
404 [gdbsrv_cv_have_visibility_hidden=no])
405 CFLAGS="$saved_cflags"
407 dnl Check if we can disable the virtual address space randomization.
408 dnl The functionality of setarch -R.
409 AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
410 define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [
411 # if !HAVE_DECL_ADDR_NO_RANDOMIZE
412 # define ADDR_NO_RANDOMIZE 0x0040000
414 /* Test the flag could be set and stays set. */
415 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
416 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
418 AC_RUN_IFELSE([PERSONALITY_TEST],
419 [gdbsrv_cv_have_personality=true],
420 [gdbsrv_cv_have_personality=false],
421 [AC_LINK_IFELSE([PERSONALITY_TEST],
422 [gdbsrv_cv_have_personality=true],
423 [gdbsrv_cv_have_personality=false])])
424 if $gdbsrv_cv_have_personality
426 AC_DEFINE([HAVE_PERSONALITY], 1,
427 [Define if you support the personality syscall.])
434 # check whether to enable the inprocess agent
435 if test "$ipa_obj" != "" \
436 -a "$gdbsrv_cv_have_sync_builtins" = yes \
437 -a "$gdbsrv_cv_have_visibility_hidden" = yes; then
443 AC_ARG_ENABLE(inprocess-agent,
444 AS_HELP_STRING([--enable-inprocess-agent], [inprocess agent]),
445 [case "$enableval" in
446 yes) want_ipa=true ;;
447 no) want_ipa=false ;;
448 *) AC_MSG_ERROR([bad value $enableval for inprocess-agent]) ;;
450 [want_ipa=$have_ipa])
454 IPA_DEPFILES="$ipa_obj"
455 extra_libraries="$extra_libraries libinproctrace.so"
457 AC_MSG_ERROR([inprocess agent not supported for this target])
461 AC_SUBST(GDBSERVER_DEPFILES)
462 AC_SUBST(GDBSERVER_LIBS)
463 AC_SUBST(srv_xmlbuiltin)
464 AC_SUBST(srv_xmlfiles)
465 AC_SUBST(IPA_DEPFILES)
466 AC_SUBST(extra_libraries)
468 GNULIB=build-gnulib-gdbserver/import
471 if test x"$STDINT_H" != x; then
472 GNULIB_STDINT_H=$GNULIB/$STDINT_H
474 AC_SUBST(GNULIB_STDINT_H)
476 AC_CONFIG_FILES([Makefile],
477 [case x$CONFIG_HEADERS in