From 5dfe4bfcb96945dc5cc1f8717be454f1f7f6bbec Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 29 Sep 2021 12:51:15 -0600 Subject: Fix format_pieces selftest on Windows The format_pieces selftest currently fails on Windows hosts. The selftest doesn't handle the "%ll" -> "%I64" rewrite that the formatter may perform, but also gdbsupport was missing a configure check for PRINTF_HAS_LONG_LONG. This patch fixes both issues. --- gdbsupport/common.m4 | 21 +++++++++++++++++++++ gdbsupport/config.in | 3 +++ gdbsupport/configure | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) (limited to 'gdbsupport') diff --git a/gdbsupport/common.m4 b/gdbsupport/common.m4 index 901c454..07c7b2a 100644 --- a/gdbsupport/common.m4 +++ b/gdbsupport/common.m4 @@ -163,6 +163,27 @@ AC_DEFUN([GDB_AC_COMMON], [ fi fi + # Check if the compiler and runtime support printing long longs. + + AC_CACHE_CHECK([for long long support in printf], + gdb_cv_printf_has_long_long, + [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], + [[char buf[32]; + long long l = 0; + l = (l << 16) + 0x0123; + l = (l << 16) + 0x4567; + l = (l << 16) + 0x89ab; + l = (l << 16) + 0xcdef; + sprintf (buf, "0x%016llx", l); + return (strcmp ("0x0123456789abcdef", buf));]])], + gdb_cv_printf_has_long_long=yes, + gdb_cv_printf_has_long_long=no, + gdb_cv_printf_has_long_long=no)]) + if test "$gdb_cv_printf_has_long_long" = yes; then + AC_DEFINE(PRINTF_HAS_LONG_LONG, 1, + [Define to 1 if the "%ll" format works to print long longs.]) + fi + BFD_SYS_PROCFS_H if test "$ac_cv_header_sys_procfs_h" = yes; then BFD_HAVE_SYS_PROCFS_TYPE(gregset_t) diff --git a/gdbsupport/config.in b/gdbsupport/config.in index e4e6fc0..f6b0159 100644 --- a/gdbsupport/config.in +++ b/gdbsupport/config.in @@ -321,6 +321,9 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION +/* Define to 1 if the "%ll" format works to print long longs. */ +#undef PRINTF_HAS_LONG_LONG + /* Define to necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE diff --git a/gdbsupport/configure b/gdbsupport/configure index f13ae76..d22f225 100755 --- a/gdbsupport/configure +++ b/gdbsupport/configure @@ -9571,6 +9571,52 @@ fi fi fi + # Check if the compiler and runtime support printing long longs. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long support in printf" >&5 +$as_echo_n "checking for long long support in printf... " >&6; } +if ${gdb_cv_printf_has_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gdb_cv_printf_has_long_long=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +char buf[32]; + long long l = 0; + l = (l << 16) + 0x0123; + l = (l << 16) + 0x4567; + l = (l << 16) + 0x89ab; + l = (l << 16) + 0xcdef; + sprintf (buf, "0x%016llx", l); + return (strcmp ("0x0123456789abcdef", buf)); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gdb_cv_printf_has_long_long=yes +else + gdb_cv_printf_has_long_long=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_printf_has_long_long" >&5 +$as_echo "$gdb_cv_printf_has_long_long" >&6; } + if test "$gdb_cv_printf_has_long_long" = yes; then + +$as_echo "#define PRINTF_HAS_LONG_LONG 1" >>confdefs.h + + fi + $as_echo "#define _STRUCTURED_PROC 1" >>confdefs.h -- cgit v1.1