Re: [PATCH 01/36] Create libiberty/libiberty.m4, have GDB and GDBserver use it

Pedro Alves
2015-02-09T23:35:06Z

Bah, looks like I dropped gdb-patches@ by accident, adding it back
(patch here: https://gcc.gnu.org/ml/gcc-patches/2015-02/msg00580.html).

For the gcc folks, this is part of this series:
https://sourceware.org/ml/gdb-patches/2015-02/msg00202.html

Thanks,
Pedro Alves

On 02/09/2015 11:20 PM, Pedro Alves wrote:
> Converting GDB to be a C++ program, I stumbled on 'basename' issues,
> like:
>
> src/gdb/../include/ansidecl.h:169:64: error: new declaration ‘char* basename(const char*)’
> /usr/include/string.h:597:26: error: ambiguates old declaration ‘const char* basename(const char*)’
>
> which I believe led to this bit in gold's configure.ac:
>
> dnl We have to check these in C, not C++, because autoconf generates
> dnl tests which have no type information, and current glibc provides
> dnl multiple declarations of functions like basename when compiling
> dnl with C++.
> AC_CHECK_DECLS([basename, ffs, asprintf, vasprintf, snprintf, vsnprintf, strverscmp])
>
> These checks IIUC intend to generate all the HAVE_DECL_FOO symbols
> that libiberty.h and ansidecl.h check.
>
> GDB is missing these checks currently, which results in the conflict
> shown above.
>
> I could just copy gold's bits over to GDB. But, since libiberty's
> ansidecl.h and libiberty.h check HAVE_DECL_XXX symbols, ISTM that all
> programs that use these headers should be doing the exact same
> corresponding AC_CHECK_DECLS autoconf checks, and that there's good
> potential for bit rot here.
>
> So I thought of adding a m4 file that projects that use libiberty can
> source to pull in the autoconf checks that libiberty needs done in
> order to use its public headers.
>
> Turns out that this has already happened. Since I first wrote this a
> few months back, libiberty gained more HAVE_DECL_FOO checks even, for
> the strtol & friends replacements.
>
> Are the libiberty changes OK?
>
> libiberty/ChangeLog:
> 2015-02-09 Pedro Alves <palves@redhat.com>
>
> * libiberty.m4: New file.
>
> gdb/ChangeLog:
> 2015-02-09 Pedro Alves <palves@redhat.com>
>
> * acinclude.m4: Include libiberty.m4.
> * config.in, configure: Regenerate.
> * configure.ac: Call libiberty_INIT.
>
> gdb/gdbserver/
> 2015-02-09 Pedro Alves <palves@redhat.com>
>
> * acinclude.m4: Include libiberty.m4.
> * config.in, configure: Regenerate.
> * configure.ac: Call libiberty_INIT.
> ---
> gdb/acinclude.m4 | 3 +
> gdb/config.in | 45 ++++++
> gdb/configure | 266 +++++++++++++++++++++++++++--------
> gdb/configure.ac | 2 +
> gdb/gdbserver/acinclude.m4 | 3 +
> gdb/gdbserver/config.in | 41 ++++++
> gdb/gdbserver/configure | 338 +++++++++++++++++++++++++++++++++++++++++++++
> gdb/gdbserver/configure.ac | 2 +
> libiberty/libiberty.m4 | 33 +++++
> 9 files changed, 679 insertions(+), 54 deletions(-)
> create mode 100644 libiberty/libiberty.m4
>
> diff --git a/gdb/acinclude.m4 b/gdb/acinclude.m4
> index 6f71486..ff4aff0 100644
> --- a/gdb/acinclude.m4
> +++ b/gdb/acinclude.m4
> @@ -54,6 +54,9 @@ sinclude([../config/zlib.m4])
>
> m4_include([common/common.m4])
>
> +dnl For libiberty_INIT.
> +m4_include(../libiberty/libiberty.m4)
> +
> ## ----------------------------------------- ##
> ## ANSIfy the C compiler whenever possible. ##
> ## From Franc,ois Pinard ##
> diff --git a/gdb/config.in b/gdb/config.in
> index 806cbac..6a8df15 100644
> --- a/gdb/config.in
> +++ b/gdb/config.in
> @@ -85,6 +85,17 @@
> you don't. */
> #undef HAVE_DECL_ADDR_NO_RANDOMIZE
>
> +/* Define to 1 if you have the declaration of `asprintf', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_ASPRINTF
> +
> +/* Define to 1 if you have the declaration of `basename(char *)', and to 0 if
> + you don't. */
> +#undef HAVE_DECL_BASENAME
> +
> +/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */
> +#undef HAVE_DECL_FFS
> +
> /* Define to 1 if you have the declaration of `free', and to 0 if you don't.
> */
> #undef HAVE_DECL_FREE
> @@ -117,6 +128,34 @@
> */
> #undef HAVE_DECL_STRSTR
>
> +/* Define to 1 if you have the declaration of `strtol', and to 0 if you don't.
> + */
> +#undef HAVE_DECL_STRTOL
> +
> +/* Define to 1 if you have the declaration of `strtoll', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_STRTOLL
> +
> +/* Define to 1 if you have the declaration of `strtoul', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_STRTOUL
> +
> +/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_STRTOULL
> +
> +/* Define to 1 if you have the declaration of `strverscmp', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_STRVERSCMP
> +
> +/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_VASPRINTF
> +
> +/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_VSNPRINTF
> +
> /* Define to 1 if you have the <dlfcn.h> header file. */
> #undef HAVE_DLFCN_H
>
> @@ -225,6 +264,9 @@
> /* Define to 1 if the compiler supports long double. */
> #undef HAVE_LONG_DOUBLE
>
> +/* Define if you have the `long long' type. */
> +#undef HAVE_LONG_LONG
> +
> /* Define if <sys/procfs.h> has lwpid_t. */
> #undef HAVE_LWPID_T
>
> @@ -635,6 +677,9 @@
> /* The size of `long', as computed by sizeof. */
> #undef SIZEOF_LONG
>
> +/* The size of `long long', as computed by sizeof. */
> +#undef SIZEOF_LONG_LONG
> +
> /* The size of `unsigned long', as computed by sizeof. */
> #undef SIZEOF_UNSIGNED_LONG
>
> diff --git a/gdb/configure b/gdb/configure
> index 9632f9a..05e355c 100755
> --- a/gdb/configure
> +++ b/gdb/configure
> @@ -2184,6 +2184,60 @@ $as_echo "$ac_res" >&6; }
>
> } # ac_fn_c_check_func
>
> +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
> +# -------------------------------------------
> +# Tests whether TYPE exists after having included INCLUDES, setting cache
> +# variable VAR accordingly.
> +ac_fn_c_check_type ()
> +{
> + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
> +$as_echo_n "checking for $2... " >&6; }
> +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
> + $as_echo_n "(cached) " >&6
> +else
> + eval "$3=no"
> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +$4
> +int
> +main ()
> +{
> +if (sizeof ($2))
> + return 0;
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_compile "$LINENO"; then :
> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +$4
> +int
> +main ()
> +{
> +if (sizeof (($2)))
> + return 0;
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_compile "$LINENO"; then :
> +
> +else
> + eval "$3=yes"
> +fi
> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> +fi
> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> +fi
> +eval ac_res=\$$3
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
> +$as_echo "$ac_res" >&6; }
> + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
> +
> +} # ac_fn_c_check_type
> +
> # ac_fn_c_check_decl LINENO SYMBOL VAR
> # ------------------------------------
> # Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
> @@ -2285,60 +2339,6 @@ $as_echo "$ac_res" >&6; }
> eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
>
> } # ac_fn_c_check_member
> -
> -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
> -# -------------------------------------------
> -# Tests whether TYPE exists after having included INCLUDES, setting cache
> -# variable VAR accordingly.
> -ac_fn_c_check_type ()
> -{
> - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
> - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
> -$as_echo_n "checking for $2... " >&6; }
> -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
> - $as_echo_n "(cached) " >&6
> -else
> - eval "$3=no"
> - cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> -/* end confdefs.h. */
> -$4
> -int
> -main ()
> -{
> -if (sizeof ($2))
> - return 0;
> - ;
> - return 0;
> -}
> -_ACEOF
> -if ac_fn_c_try_compile "$LINENO"; then :
> - cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> -/* end confdefs.h. */
> -$4
> -int
> -main ()
> -{
> -if (sizeof (($2)))
> - return 0;
> - ;
> - return 0;
> -}
> -_ACEOF
> -if ac_fn_c_try_compile "$LINENO"; then :
> -
> -else
> - eval "$3=yes"
> -fi
> -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> -fi
> -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> -fi
> -eval ac_res=\$$3
> - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
> -$as_echo "$ac_res" >&6; }
> - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
> -
> -} # ac_fn_c_check_type
> cat >config.log <<_ACEOF
> This file contains any messages produced by compilers while
> running configure, to aid debugging if configure makes a mistake.
> @@ -9584,6 +9584,164 @@ done
> # Checks for declarations. #
> # ------------------------- #
>
> +
> + # Check for presence of long long.
> + ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default"
> +if test "x$ac_cv_type_long_long" = x""yes; then :
> +
> +$as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
> + # The cast to long int works around a bug in the HP C Compiler
> +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
> +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
> +# This bug is HP SR number 8606223364.
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
> +$as_echo_n "checking size of long long... " >&6; }
> +if test "${ac_cv_sizeof_long_long+set}" = set; then :
> + $as_echo_n "(cached) " >&6
> +else
> + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
> +
> +else
> + if test "$ac_cv_type_long_long" = yes; then
> + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
> +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
> +{ as_fn_set_status 77
> +as_fn_error "cannot compute sizeof (long long)
> +See \`config.log' for more details." "$LINENO" 5; }; }
> + else
> + ac_cv_sizeof_long_long=0
> + fi
> +fi
> +
> +fi
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
> +$as_echo "$ac_cv_sizeof_long_long" >&6; }
> +
> +
> +
> +cat >>confdefs.h <<_ACEOF
> +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
> +_ACEOF
> +
> +
> +fi
> +
> +
> + ac_fn_c_check_decl "$LINENO" "basename(char *)" "ac_cv_have_decl_basename_char_p_" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_basename_char_p_" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_BASENAME $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_ffs" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_FFS $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_asprintf" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_ASPRINTF $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_vasprintf" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_VASPRINTF $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_snprintf" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_SNPRINTF $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_vsnprintf" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_VSNPRINTF $ac_have_decl
> +_ACEOF
> +
> + ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strtol" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRTOL $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strtoul" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRTOUL $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strtoll" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRTOLL $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strtoull" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRTOULL $ac_have_decl
> +_ACEOF
> +
> + ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strverscmp" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRVERSCMP $ac_have_decl
> +_ACEOF
> +
> +
> +
> ac_fn_c_check_decl "$LINENO" "free" "ac_cv_have_decl_free" "$ac_includes_default"
> if test "x$ac_cv_have_decl_free" = x""yes; then :
> ac_have_decl=1
> diff --git a/gdb/configure.ac b/gdb/configure.ac
> index dfc6947..920e580 100644
> --- a/gdb/configure.ac
> +++ b/gdb/configure.ac
> @@ -1283,6 +1283,8 @@ AC_CHECK_HEADERS(term.h, [], [],
> # Checks for declarations. #
> # ------------------------- #
>
> +libiberty_INIT
> +
> AC_CHECK_DECLS([free, malloc, realloc, snprintf])
> AM_LC_MESSAGES
>
> diff --git a/gdb/gdbserver/acinclude.m4 b/gdb/gdbserver/acinclude.m4
> index 744871a..ba4a21f 100644
> --- a/gdb/gdbserver/acinclude.m4
> +++ b/gdb/gdbserver/acinclude.m4
> @@ -20,6 +20,9 @@ dnl anything else in gdbserver.
> m4_include(../../config/codeset.m4)
> m4_include(../common/common.m4)
>
> +dnl For libiberty_INIT.
> +m4_include(../../libiberty/libiberty.m4)
> +
> dnl Check for existence of a type $1 in libthread_db.h
> dnl Based on BFD_HAVE_SYS_PROCFS_TYPE in bfd/bfd.m4.
>
> diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in
> index 8f68ed2..cf8e59d 100644
> --- a/gdb/gdbserver/config.in
> +++ b/gdb/gdbserver/config.in
> @@ -22,10 +22,25 @@
> you don't. */
> #undef HAVE_DECL_ADDR_NO_RANDOMIZE
>
> +/* Define to 1 if you have the declaration of `asprintf', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_ASPRINTF
> +
> +/* Define to 1 if you have the declaration of `basename(char *)', and to 0 if
> + you don't. */
> +#undef HAVE_DECL_BASENAME
> +
> +/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */
> +#undef HAVE_DECL_FFS
> +
> /* Define to 1 if you have the declaration of `perror', and to 0 if you don't.
> */
> #undef HAVE_DECL_PERROR
>
> +/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_SNPRINTF
> +
> /* Define to 1 if you have the declaration of `strerror', and to 0 if you
> don't. */
> #undef HAVE_DECL_STRERROR
> @@ -34,6 +49,26 @@
> */
> #undef HAVE_DECL_STRSTR
>
> +/* Define to 1 if you have the declaration of `strtol', and to 0 if you don't.
> + */
> +#undef HAVE_DECL_STRTOL
> +
> +/* Define to 1 if you have the declaration of `strtoll', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_STRTOLL
> +
> +/* Define to 1 if you have the declaration of `strtoul', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_STRTOUL
> +
> +/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_STRTOULL
> +
> +/* Define to 1 if you have the declaration of `strverscmp', and to 0 if you
> + don't. */
> +#undef HAVE_DECL_STRVERSCMP
> +
> /* Define to 1 if you have the declaration of `vasprintf', and to 0 if you
> don't. */
> #undef HAVE_DECL_VASPRINTF
> @@ -96,6 +131,9 @@
> /* Define to 1 if you have the <locale.h> header file. */
> #undef HAVE_LOCALE_H
>
> +/* Define if you have the `long long' type. */
> +#undef HAVE_LONG_LONG
> +
> /* Define if <thread_db.h> has lwpid_t. */
> #undef HAVE_LWPID_T
>
> @@ -253,6 +291,9 @@
> /* Bug reporting address */
> #undef REPORT_BUGS_TO
>
> +/* The size of `long long', as computed by sizeof. */
> +#undef SIZEOF_LONG_LONG
> +
> /* If using the C implementation of alloca, define if you know the
> direction of stack growth for your system; otherwise it will be
> automatically deduced at runtime.
> diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure
> index 2240b78..5623746 100755
> --- a/gdb/gdbserver/configure
> +++ b/gdb/gdbserver/configure
> @@ -1882,6 +1882,184 @@ $as_echo "$ac_res" >&6; }
> eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
>
> } # ac_fn_c_check_type
> +
> +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
> +# --------------------------------------------
> +# Tries to find the compile-time value of EXPR in a program that includes
> +# INCLUDES, setting VAR accordingly. Returns whether the value could be
> +# computed
> +ac_fn_c_compute_int ()
> +{
> + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
> + if test "$cross_compiling" = yes; then
> + # Depending upon the size, compute the lo and hi bounds.
> +cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +$4
> +int
> +main ()
> +{
> +static int test_array [1 - 2 * !(($2) >= 0)];
> +test_array [0] = 0
> +
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_compile "$LINENO"; then :
> + ac_lo=0 ac_mid=0
> + while :; do
> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +$4
> +int
> +main ()
> +{
> +static int test_array [1 - 2 * !(($2) <= $ac_mid)];
> +test_array [0] = 0
> +
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_compile "$LINENO"; then :
> + ac_hi=$ac_mid; break
> +else
> + as_fn_arith $ac_mid + 1 && ac_lo=$as_val
> + if test $ac_lo -le $ac_mid; then
> + ac_lo= ac_hi=
> + break
> + fi
> + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
> +fi
> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> + done
> +else
> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +$4
> +int
> +main ()
> +{
> +static int test_array [1 - 2 * !(($2) < 0)];
> +test_array [0] = 0
> +
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_compile "$LINENO"; then :
> + ac_hi=-1 ac_mid=-1
> + while :; do
> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +$4
> +int
> +main ()
> +{
> +static int test_array [1 - 2 * !(($2) >= $ac_mid)];
> +test_array [0] = 0
> +
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_compile "$LINENO"; then :
> + ac_lo=$ac_mid; break
> +else
> + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
> + if test $ac_mid -le $ac_hi; then
> + ac_lo= ac_hi=
> + break
> + fi
> + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
> +fi
> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> + done
> +else
> + ac_lo= ac_hi=
> +fi
> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> +fi
> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> +# Binary search between lo and hi bounds.
> +while test "x$ac_lo" != "x$ac_hi"; do
> + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +$4
> +int
> +main ()
> +{
> +static int test_array [1 - 2 * !(($2) <= $ac_mid)];
> +test_array [0] = 0
> +
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_compile "$LINENO"; then :
> + ac_hi=$ac_mid
> +else
> + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
> +fi
> +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
> +done
> +case $ac_lo in #((
> +?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
> +'') ac_retval=1 ;;
> +esac
> + else
> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +$4
> +static long int longval () { return $2; }
> +static unsigned long int ulongval () { return $2; }
> +#include <stdio.h>
> +#include <stdlib.h>
> +int
> +main ()
> +{
> +
> + FILE *f = fopen ("conftest.val", "w");
> + if (! f)
> + return 1;
> + if (($2) < 0)
> + {
> + long int i = longval ();
> + if (i != ($2))
> + return 1;
> + fprintf (f, "%ld", i);
> + }
> + else
> + {
> + unsigned long int i = ulongval ();
> + if (i != ($2))
> + return 1;
> + fprintf (f, "%lu", i);
> + }
> + /* Do not output a trailing newline, as this causes \r\n confusion
> + on some platforms. */
> + return ferror (f) || fclose (f) != 0;
> +
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_run "$LINENO"; then :
> + echo >>conftest.val; read $3 <conftest.val; ac_retval=0
> +else
> + ac_retval=1
> +fi
> +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
> + conftest.$ac_objext conftest.beam conftest.$ac_ext
> +rm -f conftest.val
> +
> + fi
> + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
> + return $ac_retval
> +
> +} # ac_fn_c_compute_int
> cat >config.log <<_ACEOF
> This file contains any messages produced by compilers while
> running configure, to aid debugging if configure makes a mistake.
> @@ -5338,6 +5516,166 @@ done
>
> LIBS="$old_LIBS"
>
> +
> +
> + # Check for presense of long long
> + ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default"
> +if test "x$ac_cv_type_long_long" = x""yes; then :
> +
> +$as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
> + # The cast to long int works around a bug in the HP C Compiler
> +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
> +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
> +# This bug is HP SR number 8606223364.
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
> +$as_echo_n "checking size of long long... " >&6; }
> +if test "${ac_cv_sizeof_long_long+set}" = set; then :
> + $as_echo_n "(cached) " >&6
> +else
> + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then :
> +
> +else
> + if test "$ac_cv_type_long_long" = yes; then
> + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
> +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
> +{ as_fn_set_status 77
> +as_fn_error "cannot compute sizeof (long long)
> +See \`config.log' for more details." "$LINENO" 5; }; }
> + else
> + ac_cv_sizeof_long_long=0
> + fi
> +fi
> +
> +fi
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
> +$as_echo "$ac_cv_sizeof_long_long" >&6; }
> +
> +
> +
> +cat >>confdefs.h <<_ACEOF
> +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
> +_ACEOF
> +
> +
> +fi
> +
> +
> + ac_fn_c_check_decl "$LINENO" "basename(char *)" "ac_cv_have_decl_basename_char_p_" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_basename_char_p_" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_BASENAME $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_ffs" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_FFS $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_asprintf" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_ASPRINTF $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_vasprintf" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_VASPRINTF $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_snprintf" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_SNPRINTF $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_vsnprintf" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_VSNPRINTF $ac_have_decl
> +_ACEOF
> +
> + ac_fn_c_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strtol" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRTOL $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strtoul" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRTOUL $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strtoll" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRTOLL $ac_have_decl
> +_ACEOF
> +ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strtoull" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRTOULL $ac_have_decl
> +_ACEOF
> +
> + ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default"
> +if test "x$ac_cv_have_decl_strverscmp" = x""yes; then :
> + ac_have_decl=1
> +else
> + ac_have_decl=0
> +fi
> +
> +cat >>confdefs.h <<_ACEOF
> +#define HAVE_DECL_STRVERSCMP $ac_have_decl
> +_ACEOF
> +
> +
> +
> +
> ac_fn_c_check_decl "$LINENO" "strerror" "ac_cv_have_decl_strerror" "$ac_includes_default"
> if test "x$ac_cv_have_decl_strerror" = x""yes; then :
> ac_have_decl=1
> diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac
> index f883adc..60636f7 100644
> --- a/gdb/gdbserver/configure.ac
> +++ b/gdb/gdbserver/configure.ac
> @@ -193,6 +193,8 @@ LIBS="$LIBS -ldl"
> AC_CHECK_FUNCS(dladdr)
> LIBS="$old_LIBS"
>
> +libiberty_INIT
> +
> AC_CHECK_DECLS([strerror, perror, vasprintf, vsnprintf])
>
> AC_CHECK_TYPES(socklen_t, [], [],
> diff --git a/libiberty/libiberty.m4 b/libiberty/libiberty.m4
> new file mode 100644
> index 0000000..6d9fd05
> --- /dev/null
> +++ b/libiberty/libiberty.m4
> @@ -0,0 +1,33 @@
> +dnl Bits libiberty clients must do on their autoconf step.
> +dnl
> +dnl Copyright (C) 2012-2015 Free Software Foundation, Inc.
> +dnl
> +dnl This file is free software; you can redistribute it and/or modify
> +dnl it under the terms of the GNU General Public License as published by
> +dnl the Free Software Foundation; either version 3 of the License, or
> +dnl (at your option) any later version.
> +dnl
> +dnl This program is distributed in the hope that it will be useful,
> +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
> +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +dnl GNU General Public License for more details.
> +dnl
> +dnl You should have received a copy of the GNU General Public License
> +dnl along with this program; see the file COPYING3. If not see
> +dnl <http://www.gnu.org/licenses/>.
> +dnl
> +
> +dnl Checks for declarations ansidecl.h and libiberty.h themselves
> +dnl check with HAVE_DECL_XXX, etc.
> +
> +AC_DEFUN([libiberty_INIT],
> +[
> + # Check for presence of long long.
> + AC_CHECK_TYPE([long long],
> + [AC_DEFINE(HAVE_LONG_LONG, 1, [Define if you have the `long long' type.]) AC_CHECK_SIZEOF([long long])],
> + [])
> +
> + AC_CHECK_DECLS([basename(char *), ffs, asprintf, vasprintf, snprintf, vsnprintf])
> + AC_CHECK_DECLS([strtol, strtoul, strtoll, strtoull])
> + AC_CHECK_DECLS([strverscmp])
> +])
>