From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.CeBiTec.Uni-Bielefeld.DE (smtp.CeBiTec.Uni-Bielefeld.DE [129.70.160.84]) by sourceware.org (Postfix) with ESMTPS id 8DDE43850415; Wed, 29 Jul 2020 11:19:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 8DDE43850415 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=CeBiTec.Uni-Bielefeld.DE Authentication-Results: sourceware.org; spf=none smtp.mailfrom=ro@cebitec.uni-bielefeld.de Received: from localhost (localhost [127.0.0.1]) by smtp.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTP id 875CEB5F12; Wed, 29 Jul 2020 13:19:30 +0200 (CEST) X-Virus-Scanned: amavisd-new at CeBiTec.Uni-Bielefeld.DE Received: from smtp.CeBiTec.Uni-Bielefeld.DE ([127.0.0.1]) by localhost (smtp.cebitec.uni-bielefeld.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id j9kT3B1SOPoX; Wed, 29 Jul 2020 13:19:28 +0200 (CEST) Received: from manam.CeBiTec.Uni-Bielefeld.DE (p4fddbb33.dip0.t-ipconnect.de [79.221.187.51]) by smtp.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTPSA id 44BD5B5756; Wed, 29 Jul 2020 13:19:28 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=CeBiTec.Uni-Bielefeld.DE; s=20200306; t=1596021568; bh=6voIRmNXB9iU/Nu7VVjNqUT+Y6/q3WMIn8mZ3Ia9ZAY=; h=From:To:Cc:Subject:References:Date:In-Reply-To:From; b=VTZmo9n9QP8nMqrCgBdYaNw1V/ax1GqaazqsQOnlWBx9IqB+G0WGjWBIakN0ZNi5J Bgh1kC9VHZpHxQU6zDDWgZp1GW/RmTUNb8nYPvvyHz1nkIGCtXohTV4Qa5riwzcxx2 IowfPDo091ZpNLsBvtpeHdpcp8xteZUju2UIFROYZxWSYcjGOjhpycYUWbNcaK+08V lP4jNPsIbsSItmlY7Pr9oYqf7Fo9vwTJ9ZL6UiUe/u0Y5JgLRniqflEat+fXPnlF2V K9LBFlHLebznfjPBF40ZBUFyB0aY99pQCuayxMPHj3uvL11DejTNA7Kfo7TaatE0cN qRxaAUwfiBx3Q== From: Rainer Orth To: Simon Marchi Cc: binutils@sourceware.org, gdb-patches@sourceware.org Subject: Re: [PATCH] Unify Solaris procfs and largefile handling References: <51f44a63-3062-39e5-14c5-ed08e32f2129@simark.ca> <5aae580e-ab2e-f008-91c6-f3b1c1f757b7@simark.ca> Date: Wed, 29 Jul 2020 13:19:27 +0200 In-Reply-To: <5aae580e-ab2e-f008-91c6-f3b1c1f757b7@simark.ca> (Simon Marchi's message of "Tue, 28 Jul 2020 10:17:22 -0400") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (usg-unix-v) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Status: No, score=-3795.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, GIT_PATCH_0, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2020 11:19:36 -0000 --=-=-= Content-Type: text/plain Hi Simon, > On 2020-07-28 9:51 a.m., Rainer Orth wrote: >> Unfortunately not: is sometimes used in code shared with >> non-Solaris systems, none of which have . So we'd have to >> conditionalize on HAVE_PROCFS_H vs. HAVE_SYS_PROCFS_H. >> >> And on older Solaris 11.3, even when using the new procfs interface, >> errors out when largefile support is enabled. >> >> As I said: it's a royal mess ;-( >> >> Rainer > > Ok, I see. > > The only part I'm not sure about is the part that adds --enable-gdb to all > configure > files. For example we now have this in bfd's configure: > > $ ./binutils/configure --help | grep gdb > --enable-gdb[=ARG] build gdb [ARG={yes,no}] > > I understand that you want to catch whether the user enabled or disabled > building GDB > with --enable-gdb or --disable-gdb, but the result is a bit weird. Is > there a way not > to include it in the --help? > > Ideally, the top-level configure system would be able to tell which modules > are enabled. > I don't know much about it, maybe there's a way. It's even simpler: every configure script has code to parse --enable-foo/--disable-foo and turn the result into enable_foo=[yes|no]. AC_ARG_ENABLE primarily adds default and additional values and properly aligned help text, none of which is needed in this case. So just removing the macro invocation still works. > In your patch, can > > : ${enable_largefile="no"} > > become just > > enable_largefile="no" > > ? No: the code has been (and should remain) like this. It allows the user to override the automatic largefile detection with explicit --enable-largefile/--disable-largefile options without having to change the code. I've now removed AC_ARG_ENABLE from largefile.m4. Retested on i386-pc-solaris2.11 without and with --disable-gdb, checking that _FILE_OFFSET_BITS are set as expected, and amd64-pc-solaris2.11. Ok for master now? Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=sol2-procfs-lfs.patch # HG changeset patch # Parent a6e459650cf69716409ebec7fae0049adaa6abab Unify Solaris procfs and largefile handling diff --git a/bfd/Makefile.am b/bfd/Makefile.am --- a/bfd/Makefile.am +++ b/bfd/Makefile.am @@ -53,7 +53,7 @@ ZLIBINC = @zlibinc@ WARN_CFLAGS = @WARN_CFLAGS@ NO_WERROR = @NO_WERROR@ AM_CFLAGS = $(WARN_CFLAGS) $(ZLIBINC) -AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' +AM_CPPFLAGS = -DBINDIR='"$(bindir)"' -DLIBDIR='"$(libdir)"' @LARGEFILE_CPPFLAGS@ if PLUGINS bfdinclude_HEADERS += $(INCDIR)/plugin-api.h LIBDL = @lt_cv_dlopen_libs@ diff --git a/bfd/configure.ac b/bfd/configure.ac --- a/bfd/configure.ac +++ b/bfd/configure.ac @@ -1039,7 +1039,7 @@ changequote([,])dnl # ELF corefile support has several flavors, but all of # them use something called - AC_CHECK_HEADERS(sys/procfs.h) + BFD_SYS_PROCFS_H if test "$ac_cv_header_sys_procfs_h" = yes; then BFD_HAVE_SYS_PROCFS_TYPE(prstatus_t) BFD_HAVE_SYS_PROCFS_TYPE(prstatus32_t) diff --git a/bfd/elf.c b/bfd/elf.c --- a/bfd/elf.c +++ b/bfd/elf.c @@ -9453,8 +9453,6 @@ bfd_reloc_status_type out details about the corefile. */ #ifdef HAVE_SYS_PROCFS_H -/* Needed for new procfs interface on sparc-solaris. */ -# define _STRUCTURED_PROC 1 # include #endif diff --git a/binutils/Makefile.am b/binutils/Makefile.am --- a/binutils/Makefile.am +++ b/binutils/Makefile.am @@ -116,6 +116,7 @@ INCDIR = $(BASEDIR)/include AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \ @HDEFINES@ \ @INCINTL@ \ + @LARGEFILE_CPPFLAGS@ \ -DLOCALEDIR="\"$(datadir)/locale\"" \ -Dbin_dummy_emulation=$(EMULATION_VECTOR) diff --git a/config/largefile.m4 b/config/largefile.m4 --- 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 diff --git a/gas/Makefile.am b/gas/Makefile.am --- a/gas/Makefile.am +++ b/gas/Makefile.am @@ -389,7 +389,7 @@ INCDIR = $(BASEDIR)/include # so that tm.h and config.h will be found in the compilation # subdirectory rather than in the source directory. AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(srcdir)/config \ - -I$(INCDIR) -I$(srcdir)/.. -I$(BFDDIR) @INCINTL@ \ + -I$(INCDIR) -I$(srcdir)/.. -I$(BFDDIR) @INCINTL@ @LARGEFILE_CPPFLAGS@ \ -DLOCALEDIR="\"$(datadir)/locale\"" # How to link with both our special library facilities diff --git a/gdb/Makefile.in b/gdb/Makefile.in --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -589,7 +589,8 @@ CPPFLAGS = @CPPFLAGS@ # are sometimes a little generic, we think that the risk of collision # with other header files is high. If that happens, we try to mitigate # a bit the consequences by putting the Python includes last in the list. -INTERNAL_CPPFLAGS = $(CPPFLAGS) @GUILE_CPPFLAGS@ @PYTHON_CPPFLAGS@ +INTERNAL_CPPFLAGS = $(CPPFLAGS) @GUILE_CPPFLAGS@ @PYTHON_CPPFLAGS@ \ + @LARGEFILE_CPPFLAGS@ # INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros. INTERNAL_CFLAGS_BASE = \ diff --git a/gdb/proc-api.c b/gdb/proc-api.c --- a/gdb/proc-api.c +++ b/gdb/proc-api.c @@ -28,8 +28,6 @@ #include "gdbcmd.h" #include "completer.h" -#define _STRUCTURED_PROC 1 - #include #include #include /* for struct proc */ diff --git a/gdb/proc-events.c b/gdb/proc-events.c --- a/gdb/proc-events.c +++ b/gdb/proc-events.c @@ -30,8 +30,6 @@ #include "defs.h" -#define _STRUCTURED_PROC 1 - #include #include #include diff --git a/gdb/proc-flags.c b/gdb/proc-flags.c --- a/gdb/proc-flags.c +++ b/gdb/proc-flags.c @@ -27,8 +27,6 @@ #include "defs.h" -#define _STRUCTURED_PROC 1 - #include #include diff --git a/gdb/proc-why.c b/gdb/proc-why.c --- a/gdb/proc-why.c +++ b/gdb/proc-why.c @@ -20,8 +20,6 @@ #include "defs.h" -#define _STRUCTURED_PROC 1 - #include #include diff --git a/gdb/procfs.c b/gdb/procfs.c --- a/gdb/procfs.c +++ b/gdb/procfs.c @@ -33,8 +33,6 @@ #include "nat/fork-inferior.h" #include "gdbarch.h" -#define _STRUCTURED_PROC 1 /* Should be done by configure script. */ - #include #include #include diff --git a/gdbsupport/Makefile.am b/gdbsupport/Makefile.am --- a/gdbsupport/Makefile.am +++ b/gdbsupport/Makefile.am @@ -22,7 +22,8 @@ ACLOCAL_AMFLAGS = -I . -I ../config AM_CPPFLAGS = -I$(srcdir)/../include -I$(srcdir)/../gdb \ -I../gnulib/import -I$(srcdir)/../gnulib/import \ - -I.. -I$(srcdir)/.. $(INCINTL) -I../bfd -I$(srcdir)/../bfd + -I.. -I$(srcdir)/.. $(INCINTL) -I../bfd -I$(srcdir)/../bfd \ + @LARGEFILE_CPPFLAGS@ override CXX += $(CXX_DIALECT) diff --git a/gdbsupport/common.m4 b/gdbsupport/common.m4 --- a/gdbsupport/common.m4 +++ b/gdbsupport/common.m4 @@ -46,7 +46,7 @@ AC_DEFUN([GDB_AC_COMMON], [ thread_db.h wait.h dnl termios.h dnl dlfcn.h dnl - linux/elf.h sys/procfs.h proc_service.h dnl + linux/elf.h proc_service.h dnl poll.h sys/poll.h sys/select.h) AC_FUNC_MMAP @@ -173,6 +173,7 @@ AC_DEFUN([GDB_AC_COMMON], [ fi fi + BFD_SYS_PROCFS_H if test "$ac_cv_header_sys_procfs_h" = yes; then BFD_HAVE_SYS_PROCFS_TYPE(gregset_t) BFD_HAVE_SYS_PROCFS_TYPE(fpregset_t) diff --git a/gnulib/configure.ac b/gnulib/configure.ac --- a/gnulib/configure.ac +++ b/gnulib/configure.ac @@ -27,11 +27,12 @@ AM_MAINTAINER_MODE AC_PROG_CC AC_USE_SYSTEM_EXTENSIONS +# Needs to run before gl_EARLY so it can override AC_SYS_LARGEFILE included +# there. +ACX_LARGEFILE gl_EARLY AM_PROG_CC_STDC -ACX_LARGEFILE - AC_CONFIG_AUX_DIR(..) AC_CANONICAL_SYSTEM diff --git a/gprof/Makefile.am b/gprof/Makefile.am --- a/gprof/Makefile.am +++ b/gprof/Makefile.am @@ -34,7 +34,7 @@ NO_WERROR = @NO_WERROR@ AM_CFLAGS = $(WARN_CFLAGS) AM_CPPFLAGS = -DDEBUG -I../bfd -I$(srcdir)/../include \ - -I$(srcdir)/../bfd @INCINTL@ -I. \ + -I$(srcdir)/../bfd @INCINTL@ @LARGEFILE_CPPFLAGS@ -I. \ -DLOCALEDIR="\"$(datadir)/locale\"" bin_PROGRAMS = gprof diff --git a/ld/Makefile.am b/ld/Makefile.am --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -139,7 +139,7 @@ TEXI2DVI = texi2dvi -I $(srcdir) -I $(BF -I $(top_srcdir)/../libiberty AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) @zlibinc@ \ - @INCINTL@ $(HDEFINES) $(CFLAGS) \ + @INCINTL@ $(HDEFINES) $(CFLAGS) @LARGEFILE_CPPFLAGS@ \ -DLOCALEDIR="\"$(datadir)/locale\"" BFDLIB = ../bfd/libbfd.la --=-=-=--