1 dnl Autoconf configure script for GDB server.
2 dnl Copyright (C) 2000-2015 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)
97 AC_CHECK_FUNCS(getauxval pread pwrite pread64 setns)
101 # Check the return and argument types of ptrace.
108 AC_ARG_WITH(ust, [ --with-ust=PATH Specify prefix directory for the installed UST package
109 Equivalent to --with-ust-include=PATH/include
110 plus --with-ust-lib=PATH/lib])
111 AC_ARG_WITH(ust_include, [ --with-ust-include=PATH Specify directory for installed UST include files])
112 AC_ARG_WITH(ust_lib, [ --with-ust-lib=PATH Specify the directory for the installed UST library])
124 ustlibs="-L$with_ust/lib -lust"
125 ustinc="-I$with_ust/include "
128 if test "x$with_ust_include" != x; then
129 ustinc="-I$with_ust_include "
131 if test "x$with_ust_lib" != x; then
132 ustlibs="-L$with_ust_lib -lust"
135 if test "x$with_ust" != "xno"; then
136 saved_CFLAGS="$CFLAGS"
137 CFLAGS="$CFLAGS $ustinc"
138 AC_MSG_CHECKING([for ust])
140 #define CONFIG_UST_GDB_INTEGRATION
143 [AC_MSG_RESULT([yes]); AC_DEFINE(HAVE_UST, 1, [Define if UST is available])],
144 [AC_MSG_RESULT([no]); ustlibs= ; ustinc= ])
145 CFLAGS="$saved_CFLAGS"
148 # Flags needed for UST
152 AC_ARG_ENABLE(werror,
153 AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]),
154 [case "${enableval}" in
155 yes | y) ERROR_ON_WARNING="yes" ;;
156 no | n) ERROR_ON_WARNING="no" ;;
157 *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;;
160 # Enable -Werror by default when using gcc in C mode. Leave it off
161 # for C++ until we're warning clean. Turn it off for releases.
162 if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" \
163 && test x"$enable_build_with_cxx" != x"yes" \
164 && $development; then
169 if test "${ERROR_ON_WARNING}" = yes ; then
170 WERROR_CFLAGS="-Werror"
173 build_warnings="-Wall -Wpointer-arith \
174 -Wformat-nonliteral -Wno-char-subscripts -Wempty-body"
176 # Now add in C and C++ specific options, depending on mode.
177 if test "$enable_build_with_cxx" = "yes"; then
178 build_warnings="$build_warnings -Wno-sign-compare -Wno-write-strings \
181 build_warnings="$build_warnings -Wdeclaration-after-statement"
184 # The set of warnings supported by a C++ compiler is not the same as
186 if test "$enable_build_with_cxx" = "yes"; then
191 if test "x$GCC" = xyes
193 AC_MSG_CHECKING(compiler warning flags)
194 # Separate out the -Werror flag as some files just cannot be
195 # compiled with it enabled.
196 for w in ${build_warnings}; do
198 -Werr*) WERROR_CFLAGS=-Werror ;;
200 # Check whether GCC accepts it.
201 saved_CFLAGS="$CFLAGS"
203 saved_CXXFLAGS="$CXXFLAGS"
204 CXXFLAGS="$CXXFLAGS $w"
205 AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",)
206 CFLAGS="$saved_CFLAGS"
207 CXXFLAGS="$saved_CXXFLAGS"
210 AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS})
212 AC_SUBST(WARN_CFLAGS)
213 AC_SUBST(WERROR_CFLAGS)
215 if test "$enable_build_with_cxx" = "yes"; then
219 dnl dladdr is glibc-specific. It is used by thread-db.c but only for
220 dnl debugging messages. It lives in -ldl which is handled below so we don't
221 dnl use AC_CHECK_LIB (or AC_SEARCH_LIBS) here. Instead we just temporarily
225 AC_CHECK_FUNCS(dladdr)
230 AC_CHECK_DECLS([strerror, perror, vasprintf, vsnprintf])
232 AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize])
234 AC_CHECK_TYPES(socklen_t, [], [],
235 [#include <sys/types.h>
236 #include <sys/socket.h>
239 AC_CHECK_TYPES([Elf32_auxv_t, Elf64_auxv_t], [], [],
243 ACX_PKGVERSION([GDB])
244 ACX_BUGURL([http://www.gnu.org/software/gdb/bugs/])
245 AC_DEFINE_UNQUOTED([PKGVERSION], ["$PKGVERSION"], [Additional package description])
246 AC_DEFINE_UNQUOTED([REPORT_BUGS_TO], ["$REPORT_BUGS_TO"], [Bug reporting address])
248 # Check for various supplementary target information (beyond the
249 # triplet) which might affect the choices in configure.srv.
254 AC_CACHE_CHECK([if building for x86-64], [gdb_cv_i386_is_x86_64],
255 [save_CPPFLAGS="$CPPFLAGS"
256 CPPFLAGS="$CPPFLAGS $CFLAGS"
257 AC_EGREP_CPP([got it], [
261 ], [gdb_cv_i386_is_x86_64=yes],
262 [gdb_cv_i386_is_x86_64=no])
263 CPPFLAGS="$save_CPPFLAGS"])
266 AC_CACHE_CHECK([if building for Coldfire], [gdb_cv_m68k_is_coldfire],
267 [save_CPPFLAGS="$CPPFLAGS"
268 CPPFLAGS="$CPPFLAGS $CFLAGS"
269 AC_EGREP_CPP([got it], [
273 ], [gdb_cv_m68k_is_coldfire=yes],
274 [gdb_cv_m68k_is_coldfire=no])
275 CPPFLAGS="$save_CPPFLAGS"])
279 . ${srcdir}/configure.srv
281 # Add in the common host objects.
282 . ${srcdir}/../common/common.host
283 srv_host_obs="$common_host_obs"
285 if test "${srv_mingwce}" = "yes"; then
287 elif test "${srv_mingw}" = "yes"; then
288 LIBS="$LIBS -lws2_32"
289 elif test "${srv_qnx}" = "yes"; then
290 LIBS="$LIBS -lsocket"
291 elif test "${srv_lynxos}" = "yes"; then
292 LIBS="$LIBS -lnetinet"
295 if test "${srv_mingw}" = "yes"; then
296 AC_DEFINE(USE_WIN32API, 1,
297 [Define if we should use the Windows API, instead of the
298 POSIX API. On Windows, we use the Windows API when
299 building for MinGW, but the POSIX API when building
303 if test "${srv_linux_usrregs}" = "yes"; then
304 AC_DEFINE(HAVE_LINUX_USRREGS, 1,
305 [Define if the target supports PTRACE_PEEKUSR for register ]
309 if test "${srv_linux_regsets}" = "yes"; then
310 AC_DEFINE(HAVE_LINUX_REGSETS, 1,
311 [Define if the target supports register sets.])
313 AC_MSG_CHECKING(for PTRACE_GETREGS)
314 AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getregs,
315 [AC_TRY_COMPILE([#include <sys/ptrace.h>],
317 [gdbsrv_cv_have_ptrace_getregs=yes],
318 [gdbsrv_cv_have_ptrace_getregs=no])])
319 AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getregs)
320 if test "${gdbsrv_cv_have_ptrace_getregs}" = "yes"; then
321 AC_DEFINE(HAVE_PTRACE_GETREGS, 1,
322 [Define if the target supports PTRACE_GETREGS for register ]
326 AC_MSG_CHECKING(for PTRACE_GETFPXREGS)
327 AC_CACHE_VAL(gdbsrv_cv_have_ptrace_getfpxregs,
328 [AC_TRY_COMPILE([#include <sys/ptrace.h>],
329 [PTRACE_GETFPXREGS;],
330 [gdbsrv_cv_have_ptrace_getfpxregs=yes],
331 [gdbsrv_cv_have_ptrace_getfpxregs=no])])
332 AC_MSG_RESULT($gdbsrv_cv_have_ptrace_getfpxregs)
333 if test "${gdbsrv_cv_have_ptrace_getfpxregs}" = "yes"; then
334 AC_DEFINE(HAVE_PTRACE_GETFPXREGS, 1,
335 [Define if the target supports PTRACE_GETFPXREGS for extended ]
340 if test "${srv_linux_btrace}" = "yes"; then
341 AC_DEFINE(HAVE_LINUX_BTRACE, 1,
342 [Define if the target supports branch tracing.])
345 if test "$ac_cv_header_sys_procfs_h" = yes; then
346 BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
347 BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
348 BFD_HAVE_SYS_PROCFS_TYPE(prgregset_t)
349 BFD_HAVE_SYS_PROCFS_TYPE(prfpregset_t)
350 BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
353 dnl Some systems (e.g., Android) have lwpid_t defined in libthread_db.h.
354 if test "$bfd_cv_have_sys_procfs_type_lwpid_t" != yes; then
355 GDBSERVER_HAVE_THREAD_DB_TYPE(lwpid_t)
358 dnl Some systems (e.g., Android) have psaddr_t defined in libthread_db.h.
359 if test "$bfd_cv_have_sys_procfs_type_psaddr_t" != yes; then
360 GDBSERVER_HAVE_THREAD_DB_TYPE(psaddr_t)
363 dnl Check for libdl, but do not add it to LIBS as only gdbserver
364 dnl needs it (and gdbreplay doesn't).
366 AC_CHECK_LIB(dl, dlopen)
372 if test "$srv_linux_thread_db" = "yes"; then
373 if test "$ac_cv_lib_dl_dlopen" = "yes"; then
375 AC_MSG_CHECKING(for the dynamic export flag)
376 old_LDFLAGS="$LDFLAGS"
377 # Older GNU ld supports --export-dynamic but --dynamic-list may not be
379 RDYNAMIC="-Wl,--dynamic-list=${srcdir}/proc-service.list"
380 LDFLAGS="$LDFLAGS $RDYNAMIC"
382 [found="-Wl,--dynamic-list"
383 RDYNAMIC='-Wl,--dynamic-list=$(srcdir)/proc-service.list'],
384 [RDYNAMIC="-rdynamic"
385 LDFLAGS="$old_LDFLAGS $RDYNAMIC"
391 LDFLAGS="$old_LDFLAGS"
392 AC_MSG_RESULT($found)
394 srv_libs="-lthread_db"
397 srv_thread_depfiles="thread-db.o proc-service.o"
398 AC_DEFINE(USE_THREAD_DB, 1, [Define if we should use libthread_db.])
399 AC_CACHE_CHECK([for TD_VERSION], gdbsrv_cv_have_td_version,
400 [AC_TRY_COMPILE([#include <thread_db.h>], [TD_VERSION;],
401 [gdbsrv_cv_have_td_version=yes],
402 [gdbsrv_cv_have_td_version=no])])
403 if test $gdbsrv_cv_have_td_version = yes; then
404 AC_DEFINE(HAVE_TD_VERSION, 1, [Define if TD_VERSION is available.])
408 AC_ARG_WITH(libthread-db,
409 AS_HELP_STRING([--with-libthread-db=PATH], [use given libthread_db directly]),
410 [srv_libthread_db_path="${withval}"
411 srv_libs="$srv_libthread_db_path"
414 if test "$srv_libs" != "" -a "$srv_libs" != "-ldl"; then
415 AC_DEFINE(USE_LIBTHREAD_DB_DIRECTLY, 1, [Define if we should use libthread_db directly.])
418 if test "$srv_xmlfiles" != ""; then
419 srv_xmlbuiltin="xml-builtin.o"
420 AC_DEFINE(USE_XML, 1, [Define if an XML target description is available.])
422 tmp_xmlfiles=$srv_xmlfiles
424 for f in $tmp_xmlfiles; do
425 srv_xmlfiles="$srv_xmlfiles \$(XML_DIR)/$f"
429 GDBSERVER_DEPFILES="$srv_regobj $srv_tgtobj $srv_hostio_err_objs $srv_thread_depfiles $srv_host_obs"
430 GDBSERVER_LIBS="$srv_libs"
432 dnl Check whether the target supports __sync_*_compare_and_swap.
433 AC_CACHE_CHECK([whether the target supports __sync_*_compare_and_swap],
434 gdbsrv_cv_have_sync_builtins, [
435 AC_TRY_LINK([], [int foo, bar; bar = __sync_val_compare_and_swap(&foo, 0, 1);],
436 gdbsrv_cv_have_sync_builtins=yes,
437 gdbsrv_cv_have_sync_builtins=no)])
438 if test $gdbsrv_cv_have_sync_builtins = yes; then
439 AC_DEFINE(HAVE_SYNC_BUILTINS, 1,
440 [Define to 1 if the target supports __sync_*_compare_and_swap])
443 dnl Check for -fvisibility=hidden support in the compiler.
444 saved_cflags="$CFLAGS"
445 CFLAGS="$CFLAGS -fvisibility=hidden"
446 AC_COMPILE_IFELSE(AC_LANG_PROGRAM([]),
447 [gdbsrv_cv_have_visibility_hidden=yes],
448 [gdbsrv_cv_have_visibility_hidden=no])
449 CFLAGS="$saved_cflags"
451 dnl Check if we can disable the virtual address space randomization.
452 dnl The functionality of setarch -R.
453 AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
454 define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [
455 # if !HAVE_DECL_ADDR_NO_RANDOMIZE
456 # define ADDR_NO_RANDOMIZE 0x0040000
458 /* Test the flag could be set and stays set. */
459 personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
460 if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
462 AC_RUN_IFELSE([PERSONALITY_TEST],
463 [gdbsrv_cv_have_personality=true],
464 [gdbsrv_cv_have_personality=false],
465 [AC_LINK_IFELSE([PERSONALITY_TEST],
466 [gdbsrv_cv_have_personality=true],
467 [gdbsrv_cv_have_personality=false])])
468 if $gdbsrv_cv_have_personality
470 AC_DEFINE([HAVE_PERSONALITY], 1,
471 [Define if you support the personality syscall.])
478 # check whether to enable the inprocess agent
479 if test "$ipa_obj" != "" \
480 -a "$gdbsrv_cv_have_sync_builtins" = yes \
481 -a "$gdbsrv_cv_have_visibility_hidden" = yes; then
487 AC_ARG_ENABLE(inprocess-agent,
488 AS_HELP_STRING([--enable-inprocess-agent], [inprocess agent]),
489 [case "$enableval" in
490 yes) want_ipa=true ;;
491 no) want_ipa=false ;;
492 *) AC_MSG_ERROR([bad value $enableval for inprocess-agent]) ;;
494 [want_ipa=$have_ipa])
498 IPA_DEPFILES="$ipa_obj"
499 extra_libraries="$extra_libraries libinproctrace.so"
501 AC_MSG_ERROR([inprocess agent not supported for this target])
505 AC_SUBST(GDBSERVER_DEPFILES)
506 AC_SUBST(GDBSERVER_LIBS)
507 AC_SUBST(srv_xmlbuiltin)
508 AC_SUBST(srv_xmlfiles)
509 AC_SUBST(IPA_DEPFILES)
510 AC_SUBST(extra_libraries)
512 GNULIB=build-gnulib-gdbserver/import
515 if test x"$STDINT_H" != x; then
516 GNULIB_STDINT_H=$GNULIB/$STDINT_H
518 AC_SUBST(GNULIB_STDINT_H)
521 [case x$CONFIG_HEADERS in