diff --git a/config/largefile.m4 b/config/largefile.m4 index 4a88fd738fd..937596334cd 100644 --- a/config/largefile.m4 +++ b/config/largefile.m4 @@ -1,5 +1,5 @@ # This macro wraps AC_SYS_LARGEFILE with one exception for Solaris. -# PR 9992/binutils: We have to replicate everywhere the behaviour of +# PR binutils/9992: We have to replicate everywhere the behaviour of # bfd's configure script so that all the directories agree on the size # of structures used to describe files. @@ -16,17 +16,38 @@ AC_REQUIRE([AC_CANONICAL_TARGET]) AC_PLUGINS case "${host}" in -changequote(,)dnl - sparc-*-solaris*|i[3-7]86-*-solaris*) -changequote([,])dnl - # On native 32bit sparc and ia32 solaris, large-file and procfs support - # are mutually exclusive; and without procfs support, the bfd/ elf module - # cannot provide certain routines such as elfcore_write_prpsinfo - # or elfcore_write_prstatus. So unless the user explicitly requested - # large-file support through the --enable-largefile switch, disable - # large-file support in favor of procfs support. - test "${target}" = "${host}" -a "x$plugins" = xno \ - && : ${enable_largefile="no"} + sparc-*-solaris*|i?86-*-solaris*) + # On native 32-bit Solaris/SPARC and x86, large-file and procfs support + # were mutually exclusive until Solaris 11.3. Without procfs support, + # the bfd/ elf module cannot provide certain routines such as + # elfcore_write_prpsinfo or elfcore_write_prstatus. So unless the user + # explicitly requested large-file support through the + # --enable-largefile switch, disable large-file support in favor of + # procfs support. + # + # Check if is incompatible with large-file support. + AC_TRY_COMPILE([#define _FILE_OFFSET_BITS 64 +#define _STRUCTURED_PROC 1 +#include ], , acx_cv_procfs_lfs=yes, acx_cv_procfs_lfs=no) + # + # Forcefully disable large-file support only if necessary, gdb is in + # tree and enabled. + if test "${target}" = "${host}" -a "$acx_cv_procfs_lfs" = no \ + -a -d $srcdir/../gdb -a "$enable_gdb" != no; then + : ${enable_largefile="no"} + if test "$plugins" = yes; then + AC_MSG_WARN([ +plugin support disabled; require large-file support which is incompatible with GDB.]) + plugins=no + fi + fi + # + # Explicitly undef _FILE_OFFSET_BITS if enable_largefile=no for the + # benefit of g++ 9+ which predefines it on Solaris. + if test "$enable_largefile" = no; then + LARGEFILE_CPPFLAGS="-U_FILE_OFFSET_BITS" + AC_SUBST(LARGEFILE_CPPFLAGS) + fi ;; esac