# HG changeset patch # Parent 1744e2404ea984f5881de57ecb5a23f789ac29f3 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/bfd.m4 b/bfd/bfd.m4 --- a/bfd/bfd.m4 +++ b/bfd/bfd.m4 @@ -17,15 +17,20 @@ dnl along with this program; see the fil dnl . dnl +dnl Check for sys/procfs.h, enforcing structured /proc on Solaris. + +AC_DEFUN([BFD_SYS_PROCFS_H], +[AC_DEFINE(_STRUCTURED_PROC, 1, [Use structured /proc on Solaris.]) + AC_CHECK_HEADERS(sys/procfs.h)]) + dnl Check for existence of a type $1 in sys/procfs.h AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE], -[AC_MSG_CHECKING([for $1 in sys/procfs.h]) +[AC_REQUIRE([BFD_SYS_PROCFS_H]) + AC_MSG_CHECKING([for $1 in sys/procfs.h]) AC_CACHE_VAL(bfd_cv_have_sys_procfs_type_$1, [AC_TRY_COMPILE([ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include ], [$1 avar], bfd_cv_have_sys_procfs_type_$1=yes, @@ -41,12 +46,11 @@ AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE], dnl Check for existence of member $2 in type $1 in sys/procfs.h AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE_MEMBER], -[AC_MSG_CHECKING([for $1.$2 in sys/procfs.h]) +[AC_REQUIRE([BFD_SYS_PROCFS_H]) + AC_MSG_CHECKING([for $1.$2 in sys/procfs.h]) AC_CACHE_VAL(bfd_cv_have_sys_procfs_type_member_$1_$2, [AC_TRY_COMPILE([ #define _SYSCALL32 -/* Needed for new procfs interface on sparc-solaris. */ -#define _STRUCTURED_PROC 1 #include ], [$1 avar; void* aref = (void*) &avar.$2], bfd_cv_have_sys_procfs_type_member_$1_$2=yes, diff --git a/bfd/configure.ac b/bfd/configure.ac --- a/bfd/configure.ac +++ b/bfd/configure.ac @@ -1046,7 +1046,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 @@ -9471,8 +9471,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,40 @@ 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. + AC_ARG_ENABLE(gdb,[[ --enable-gdb[=ARG] build gdb [ARG={yes,no}]]]) + + 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 @@ -587,7 +587,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