[RFA] configure gdb/gnulib with --disable-largefile if largefile support disabled.
Commit Message
This patch mostly aims at fixing a GDB build failure on 32bit Solaris
systems (Sparc and x86), due to a recent gnulib update adding the
readlink module. But it might also fix related issues when configuring
with --disable-largefile.
A side-effect of the gnulib readlink module addition is that it caused
largefile support to be added as well, and in particular
gnulib/import/m4/largefile.m4 introduced the following new #define in
gnulib's config.in:
| +/* Number of bits in a file offset, on hosts where this is settable. */
| +#undef _FILE_OFFSET_BITS
When defined to 64, it triggers an issue with procfs.h while trying
to build sparc-sol2-nat.c:
| #if !defined(_LP64) && _FILE_OFFSET_BITS == 64
| #error "Cannot use procfs in the large file compilation environment"
| #endif
As it turns out, this is a fairly familiar problem, and one of
the reasons behind ACX_LARGEFILE having been created. In that macro,
we have some code which disables largefile support on solaris hosts:
| 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"}
| ;;
But gnulib ignores this fact, and so tries to determine how to
enable large-file support irrespective of whether we want it or not.
This patch fixes the issue by passing --disable-largefile to gnulib's
configure when large-file support in GDB is disabled. This is done
by first enhancing ACX_CONFIGURE_DIR to allow us to pass extra
arguments to be passed to the configure command, and then by modifying
GDB's configure to pass --disable-largefile if large-file support
is disabled.
gdb/ChangeLog:
* acx_configure_dir.m4 (ACX_CONFIGURE_DIR): Add support for
new "EXTRA-ARGS" parameter.
* configure.ac: If large-file support is disabled in GDB,
pass --disable-largefile to ACX_CONFIGURE_DIR call for "gnulib".
* configure: Regenerate.
gdb/gdbserver/ChangeLog:
* configure.ac: If large-file support is disabled in GDBserver,
pass --disable-largefile to ACX_CONFIGURE_DIR call for "gnulib".
* configure: Regenerate.
Tested by rebuilding on sparc-solaris and x86_64-linux (with gdbserver).
This fixes the build failure on sparc-solaris. I also verified in
gnulib's config.log file that we pass --disable-largefile in the solaris
case, while we do not in the GNU/Linux case.
OK to apply?
Thank you,
Comments
> From: Joel Brobecker <brobecker@adacore.com>
> Cc: Yao Qi <yao@codesourcery.com>
> Date: Wed, 3 Dec 2014 07:08:29 -0500
>
> | 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"}
> | ;;
>
> But gnulib ignores this fact, and so tries to determine how to
> enable large-file support irrespective of whether we want it or not.
> This patch fixes the issue by passing --disable-largefile to gnulib's
> configure when large-file support in GDB is disabled. This is done
> by first enhancing ACX_CONFIGURE_DIR to allow us to pass extra
> arguments to be passed to the configure command, and then by modifying
> GDB's configure to pass --disable-largefile if large-file support
> is disabled.
Shouldn't this be reported to gnulib folks and preferably fixed there?
Joel Brobecker <brobecker@adacore.com> writes:
> This patch fixes the issue by passing --disable-largefile to gnulib's
> configure when large-file support in GDB is disabled. This is done
> by first enhancing ACX_CONFIGURE_DIR to allow us to pass extra
> arguments to be passed to the configure command, and then by modifying
> GDB's configure to pass --disable-largefile if large-file support
> is disabled.
I tested this patch by configuring gdb with --disable-largefile for
x86-linux and mingw32. Everything looks right to me.
> > But gnulib ignores this fact, and so tries to determine how to
> > enable large-file support irrespective of whether we want it or not.
> > This patch fixes the issue by passing --disable-largefile to gnulib's
> > configure when large-file support in GDB is disabled. This is done
> > by first enhancing ACX_CONFIGURE_DIR to allow us to pass extra
> > arguments to be passed to the configure command, and then by modifying
> > GDB's configure to pass --disable-largefile if large-file support
> > is disabled.
>
> Shouldn't this be reported to gnulib folks and preferably fixed there?
I do not think so, because gnulib can be used independently of procfs,
in which case you would probably want gnulib to have large-file support
by default. It's only in GDB and binutils' peculiar situation that
we need to disable by default.
> Date: Thu, 4 Dec 2014 07:18:28 +0400
> From: Joel Brobecker <brobecker@adacore.com>
> Cc: gdb-patches@sourceware.org, yao@codesourcery.com
>
> > > But gnulib ignores this fact, and so tries to determine how to
> > > enable large-file support irrespective of whether we want it or not.
> > > This patch fixes the issue by passing --disable-largefile to gnulib's
> > > configure when large-file support in GDB is disabled. This is done
> > > by first enhancing ACX_CONFIGURE_DIR to allow us to pass extra
> > > arguments to be passed to the configure command, and then by modifying
> > > GDB's configure to pass --disable-largefile if large-file support
> > > is disabled.
> >
> > Shouldn't this be reported to gnulib folks and preferably fixed there?
>
> I do not think so, because gnulib can be used independently of procfs,
> in which case you would probably want gnulib to have large-file support
> by default. It's only in GDB and binutils' peculiar situation that
> we need to disable by default.
Gnulib could have the necessary magic to DTRT in both situations, I
think.
Anyway, I don't think it's wise to not even tell Gnulib folks about
this. If they say it's just our problem, so be it. But they might
have other proposals.
> > This patch fixes the issue by passing --disable-largefile to gnulib's
> > configure when large-file support in GDB is disabled. This is done
> > by first enhancing ACX_CONFIGURE_DIR to allow us to pass extra
> > arguments to be passed to the configure command, and then by modifying
> > GDB's configure to pass --disable-largefile if large-file support
> > is disabled.
>
> I tested this patch by configuring gdb with --disable-largefile for
> x86-linux and mingw32. Everything looks right to me.
Thank you, Yao. Patch now pushed.
> > I do not think so, because gnulib can be used independently of procfs,
> > in which case you would probably want gnulib to have large-file support
> > by default. It's only in GDB and binutils' peculiar situation that
> > we need to disable by default.
>
> Gnulib could have the necessary magic to DTRT in both situations, I
> think.
>
> Anyway, I don't think it's wise to not even tell Gnulib folks about
> this. If they say it's just our problem, so be it. But they might
> have other proposals.
FTR, reported at:
http://lists.gnu.org/archive/html/bug-gnulib/2014-12/msg00177.html
@@ -4,7 +4,7 @@
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
-# ACX_CONFIGURE_DIR(SRC-DIR-NAME, BUILD-DIR-NAME)
+# ACX_CONFIGURE_DIR(SRC-DIR-NAME, BUILD-DIR-NAME, EXTRA-ARGS)
# ---------------------------
#
# Configure a subdirectory. This is an alternative to
@@ -16,11 +16,14 @@
# Inputs:
# - SRC-DIR-NAME is the source directory, relative to $srcdir.
# - BUILD-DIR-NAME is `top-build -> build'
+# - EXTRA-ARGS is an optional list of extra arguments to add
+# at the end of the configure command.
AC_DEFUN([ACX_CONFIGURE_DIR],
[
in_src=$1
in_build=$2
+ in_extra_args=$3
# Remove --cache-file, --srcdir, and --disable-option-checking arguments
# so they do not pile up.
@@ -105,6 +108,11 @@ AC_DEFUN([ACX_CONFIGURE_DIR],
ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
esac
+ if test -n "$in_extra_args"; then
+ # Add the extra args at the end.
+ ac_sub_configure_args="$ac_sub_configure_args $in_extra_args"
+ fi
+
AC_MSG_NOTICE([running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir])
# The eval makes quoting arguments work.
eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \
@@ -4836,6 +4836,12 @@ $as_echo "no" >&6; }
fi
+gnulib_extra_configure_args=
+# If large-file support is disabled, make sure gnulib does the same.
+if test "$enable_largefile" = no; then
+gnulib_extra_configure_args="$gnulib_extra_configure_args --disable-largefile"
+fi
+
# Configure gnulib. We need to build gnulib under some other
# directory not "gnulib", to avoid the problem of both GDB and
# GDBserver wanting to build it in the same directory, when building
@@ -4843,6 +4849,7 @@ fi
in_src="gnulib"
in_build="build-gnulib"
+ in_extra_args="$gnulib_extra_configure_args"
# Remove --cache-file, --srcdir, and --disable-option-checking arguments
# so they do not pile up.
@@ -4927,6 +4934,11 @@ fi
ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
esac
+ if test -n "$in_extra_args"; then
+ # Add the extra args at the end.
+ ac_sub_configure_args="$ac_sub_configure_args $in_extra_args"
+ fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
# The eval makes quoting arguments work.
@@ -51,11 +51,18 @@ esac
AM_CONDITIONAL(GMAKE, test "$MAKE_IS_GNU" = yes)
AC_PROG_MAKE_SET
+gnulib_extra_configure_args=
+# If large-file support is disabled, make sure gnulib does the same.
+if test "$enable_largefile" = no; then
+gnulib_extra_configure_args="$gnulib_extra_configure_args --disable-largefile"
+fi
+
# Configure gnulib. We need to build gnulib under some other
# directory not "gnulib", to avoid the problem of both GDB and
# GDBserver wanting to build it in the same directory, when building
# in the source dir.
-ACX_CONFIGURE_DIR(["gnulib"], ["build-gnulib"])
+ACX_CONFIGURE_DIR(["gnulib"], ["build-gnulib"],
+ ["$gnulib_extra_configure_args"])
dnl List of object files and targets accumulated by configure.
@@ -4514,6 +4514,12 @@ $as_echo "no" >&6; }
fi
+gnulib_extra_configure_args=
+# If large-file support is disabled, make sure gnulib does the same.
+if test "$enable_largefile" = no; then
+gnulib_extra_configure_args="$gnulib_extra_configure_args --disable-largefile"
+fi
+
# Configure gnulib. We can't use AC_CONFIG_SUBDIRS as that'd expect
# to find the the source subdir to be configured directly under
# gdbserver/. We need to build gnulib under some other directory not
@@ -4522,6 +4528,7 @@ fi
in_src="../gnulib"
in_build="build-gnulib-gdbserver"
+ in_extra_args="$gnulib_extra_configure_args"
# Remove --cache-file, --srcdir, and --disable-option-checking arguments
# so they do not pile up.
@@ -4606,6 +4613,11 @@ fi
ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
esac
+ if test -n "$in_extra_args"; then
+ # Add the extra args at the end.
+ ac_sub_configure_args="$ac_sub_configure_args $in_extra_args"
+ fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
# The eval makes quoting arguments work.
@@ -4619,6 +4631,7 @@ $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cach
in_src="../../libiberty"
in_build="build-libiberty-gdbserver"
+ in_extra_args=
# Remove --cache-file, --srcdir, and --disable-option-checking arguments
# so they do not pile up.
@@ -4703,6 +4716,11 @@ $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cach
ac_sub_cache_file=$ac_top_build_prefix$cache_file ;;
esac
+ if test -n "$in_extra_args"; then
+ # Add the extra args at the end.
+ ac_sub_configure_args="$ac_sub_configure_args $in_extra_args"
+ fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
# The eval makes quoting arguments work.
@@ -69,12 +69,19 @@ esac
AM_CONDITIONAL(GMAKE, test "$MAKE_IS_GNU" = yes)
AC_PROG_MAKE_SET
+gnulib_extra_configure_args=
+# If large-file support is disabled, make sure gnulib does the same.
+if test "$enable_largefile" = no; then
+gnulib_extra_configure_args="$gnulib_extra_configure_args --disable-largefile"
+fi
+
# Configure gnulib. We can't use AC_CONFIG_SUBDIRS as that'd expect
# to find the the source subdir to be configured directly under
# gdbserver/. We need to build gnulib under some other directory not
# "gnulib", to avoid the problem of both GDB and GDBserver wanting to
# build it in the same directory, when building in the source dir.
-ACX_CONFIGURE_DIR(["../gnulib"], ["build-gnulib-gdbserver"])
+ACX_CONFIGURE_DIR(["../gnulib"], ["build-gnulib-gdbserver"],
+ ["$gnulib_extra_configure_args"])
ACX_CONFIGURE_DIR(["../../libiberty"], ["build-libiberty-gdbserver"])