From patchwork Mon Aug 8 13:47:49 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rainer Orth X-Patchwork-Id: 108935 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id B8F8BB6F6F for ; Mon, 8 Aug 2011 23:48:54 +1000 (EST) Received: (qmail 29603 invoked by alias); 8 Aug 2011 13:48:44 -0000 Received: (qmail 29438 invoked by uid 22791); 8 Aug 2011 13:48:35 -0000 X-SWARE-Spam-Status: No, hits=-2.1 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, TW_BJ, TW_CX, TW_FC X-Spam-Check-By: sourceware.org Received: from snape.CeBiTec.Uni-Bielefeld.DE (HELO smtp-relay.CeBiTec.Uni-Bielefeld.DE) (129.70.160.84) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 08 Aug 2011 13:48:15 +0000 Received: from localhost (localhost.CeBiTec.Uni-Bielefeld.DE [127.0.0.1]) by smtp-relay.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTP id 794DC75B; Mon, 8 Aug 2011 15:48:13 +0200 (CEST) Received: from smtp-relay.CeBiTec.Uni-Bielefeld.DE ([127.0.0.1]) by localhost (malfoy.CeBiTec.Uni-Bielefeld.DE [127.0.0.1]) (amavisd-new, port 10024) with LMTP id tiZd29Hd+tgt; Mon, 8 Aug 2011 15:47:58 +0200 (CEST) Received: from manam.CeBiTec.Uni-Bielefeld.DE (manam.CeBiTec.Uni-Bielefeld.DE [129.70.161.120]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp-relay.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTPS id 56B8275A; Mon, 8 Aug 2011 15:47:58 +0200 (CEST) Received: (from ro@localhost) by manam.CeBiTec.Uni-Bielefeld.DE (8.14.5+Sun/8.14.5/Submit) id p78DlnQX003780; Mon, 8 Aug 2011 15:47:49 +0200 (MEST) From: Rainer Orth To: gcc-patches@gcc.gnu.org Cc: Paolo Bonzini , "Joseph S. Myers" , Ian Lance Taylor , Nathan Sidwell , Joel Sherrill , Kai Tietz , Richard Sandiford , John David Anglin , David Edelsohn , Ulrich Weigand , Nicola Pero , fortran@gcc.gnu.org, libstdc++@gcc.gnu.org Subject: [build] Move gthr to toplevel libgcc Date: Mon, 08 Aug 2011 15:47:49 +0200 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.3 (usg-unix-v) MIME-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org This patch moves gthr*.h and related code to toplevel libgcc. Unlike the other outstanding patches (libgcc1, libgcc2, crtstuff, shlib), it is pretty independent from the rest, so I'm posting it first. It was developed last, so there may be conflicts (gcc/Makefile.in). It also depends on the posix95 removal patch. Instead of cluttering the libgcc directory, all non-generic gthr-*.h files were moved to their respecitive positions in libgcc/config. The patch simplifies gthr.h quite a bit: * It does away with the need for thread-specific defines: ** HAVE_GTHR_DEFAULT is removed, instead I always create gthr-default.h, even if only as a link to gthr-single.h. That simplifies the calling runtime libs which don't need to re-determine that value. ** There's no need to treat gthr-tpf.h specially: tpf is the only/default model on s390x-ibm-tpf*, so this can be handled by the default case. ** The use of _PTHREADS to select gthr-posix.h is quite inconsistent: only a few targets define that macro (m32r/linux.h, mn10300/linux.h, netbsd.h, sh/linux.h, sol2.h), and none of them support alternative thread models. Given that everything works fine for every other Linux target suggests that this can go. ** _DCE_THREADS is used to select gthr-dce.h, but again dce is the only/default model on hppa[12]*-*-hpux10* (pa-hpux10.h), so the special-casing can be removed. ** Since gthr-default.h points to gthr-single.h if nothing else, that explicit fallback can be removed. I noticed that config/t-vxworks installs gthr-vxworks.h, gthr-default.h via EXTRA_HEADERS, but the comment suggests this is only for the benefit of the runtime libs which know how to find them, so I've removed that. The gthr*.h headers have GCC_GTHR_* guards right now. With the move, one might want to change them to LIBGCC_GTHR_*. If so, one needs to adapt libstdc++-v3/include/Makefile.am. I haven't touched this yet. The target libraries using gthr.h (libgfortran, libobjc, libstdc++-v3) need to be adapted to search both libgcc source (for gthr.h etc.) and build (for gthr-default.h) directories. I haven't moved two macros used in gthr*.h yet: GTHREAD_USE_WEAK and SUPPORTS_WEAK. This seems to warrant a separate followup patch, but for the record I report my findings: * GTHREAD_USE_WEAK must be defined explicitly. It needs to be poisoned in system.h after the move. Right now, only a few targets defined a non-default value: darwin.h #define GTHREAD_USE_WEAK 0 i386/cygwin.h #define GTHREAD_USE_WEAK 0 ia64/hpux.h #define GTHREAD_USE_WEAK 0 pa/pa64-hpux.h #define GTHREAD_USE_WEAK 0 pa/som.h #define GTHREAD_USE_WEAK 0 The last 3 could be handled in a new hpux-lib.h, but perhaps this isn't necessary if ax_sys_weak_alias.m4 works. * SUPPORTS_WEAK is probably best detected with autoconf. We have libgfortran/acinclude.m4 (LIBGFOR_GTHREAD_WEAK), but should probably go for m4/ax_sys_weak_alias.m4 from the autoconf-archive instead. If we're lucky, that macro can detect support for weak definitions and replace both SUPPORTS_WEAK and GTHREAD_USE_WEAK. We have only 2 non-default definitions right now: config/avr/avr.h #define SUPPORTS_WEAK 1 config/cris/cris.h #define SUPPORTS_WEAK 1 I have no idea why they are made explicit; both are already correct from the default in elfos.h (ASM_WEAKEN_LABEL) from what I can see. A really ugly point in the gthr.h interface is that all users need to define SUPPORTS_WEAK and GTHREAD_USE_WEAK themselves. It would be far better to substitute the result of such a test into gthr.h to avoid this complication. Currently, this is handled quite inconsistently: libobjc does nothing, libstdc++-v3/acinclude.m4 (GLIBCXX_CHECK_GTHREADS) hardcodes SUPPORTS_WEAK, GTHREAD_USE_WEAK for posix threads, and libgfortran/acinclude.m4 (LIBGFOR_GTHREAD_WEAK) tries to determine a sensible value. As I said, I'd like to handle this aspect in a followup patch and keep the build part separate. This patch was bootstrapped without regressions on i386-pc-solaris2.10 and i386-pc-solaris2.11. It probably needs more testing on other non-posix platforms. Comments? Thanks. Rainer 2011-08-06 Rainer Orth gcc: * gthr-posix.h, gthr-single.h, gthr.h: Move to ../libgcc. * gthr-aix.h: Move to ../libgcc/config/rs6000. * gthr-dce.h: Move to ../libgcc/config/pa. * gthr-lynx.h: Move to ../libgcc/config. * gthr-mipssde.h: Move to ../libgcc/config/mips. * gthr-rtems.h: Move to ../libgcc/config. * gthr-tpf.h: Move to ../libgcc/config/s390. * gthr-vxworks.h: Move to ../libgcc/config. * gthr-win32.h: Move to ../libgcc/config/i386. * configure.ac (gthread_flags): Remove (gthr-default.h): Don't create. (thread_file): Don't substitute. * configure: Regenerate. * Makefile.in (GCC_THREAD_FILE): Remove. (GTHREAD_FLAGS): Remove. (libgcc.mvars): Remove GTHREAD_FLAGS. * config/m32r/linux.h (SUBTARGET_CPP_SPEC): Don't define _PTHREADS if -pthread. * config/mn10300/linux.h (CPP_SPEC): Likewise. * config/netbsd.h (NETBSD_CPP_SPEC): Likewise. * config/sh/linux.h (SUBTARGET_CPP_SPEC): Likewise. * config/sol2.h (CPP_SUBTARGET_SPEC): Likewise. * config/pa/pa-hpux10.h (CPP_SPEC): Don't define _DCE_THREADS if -threads. * config/t-vxworks (EXTRA_HEADERS): Remove. gcc/po: * EXCLUDES (gthr-aix.h, gthr-dce.h, gthr-posix.c, gthr-posix.h) (gthr-rtems.h, gthr-single.h, gthr-solaris.h, gthr-vxworks.h) (gthr-win32.h, gthr.h): Remove. libgcc: * gthr-posix.h, gthr-single.h, gthr.h: New files. * config/gthr-lynx.h, config/gthr-rtems.h, config/gthr-vxworks.h, config/i386/gthr-win32.h, config/mips/gthr-mipssde.h, config/pa/gthr-dce.h, config/rs6000/gthr-aix.h, config/s390/gthr-tpf.h: New files. * config/i386/gthr-win32.c: Include "gthr-win32.h". * config.host (thread_header, thread_dir): New variables. Set it depending on target_thread_file. * configure.ac (gthr-default.h): Link from $thread_header. * configure: Regenerate. * Makefile.in (LIBGCC2_CFLAGS): Remove $(GTHREAD_FLAGS). libgfortran: * Makefile.am (AM_CPPFLAGS): Add -I$(srcdir)/$(MULTISRCTOP)../libgcc, -I$(MULTIBUILDTOP)../libgcc. * Makefile.in: Regenerate. * acinclude.m4 (LIBGFOR_CHECK_GTHR_DEFAULT): Remove. * configure.ac (LIBGFOR_CHECK_GTHR_DEFAULT): Likewise. * configure: Regenerate. * config.h.in: Regenerate. libobjc: * Makefile.in (INCLUDES): Add -I$(MULTIBUILDTOP)../libgcc. * configure.ac (target_thread_file, HAVE_GTHR_DEFAULT): Remove. * configure: Regenerate. * config.h.in: Regenerate. libstdc++-v3: * acinclude.m4 (GLIBCXX_CONFIGURE): Determine and substitute toplevel_builddir. (GLIBCXX_ENABLE_THREADS): Remove glibcxx_thread_h, HAVE_GTHR_DEFAULT, enable_thread. (GLIBCXX_CHECK_GTHREADS): Reflect gthr move to libgcc. * include/Makefile.am (thread_host_headers): Remove ${host_builddir}/gthr-tpf.h. (${host_builddir}/gthr.h): Reflect gthr move to libgcc. Use $<. (${host_builddir}/gthr-single.h): Likewise. (${host_builddir}/gthr-posix.h): Likewise. (${host_builddir}/gthr-tpf.h): Remove. (${host_builddir}/gthr-default.h): Likewise. * configure, config.h.in: Regenerate. * Makefile.in, doc/Makefile.in, include/Makefile.in, libsupc++/Makefile.in, po/Makefile.in, python/Makefile.in, src/Makefile.intestsuite/Makefile.in: Regenerate. diff --git a/gcc/Makefile.in b/gcc/Makefile.in --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -527,9 +527,7 @@ lang_opt_files=@lang_opt_files@ $(srcdir lang_specs_files=@lang_specs_files@ lang_tree_files=@lang_tree_files@ target_cpu_default=@target_cpu_default@ -GCC_THREAD_FILE=@thread_file@ OBJC_BOEHM_GC=@objc_boehm_gc@ -GTHREAD_FLAGS=@gthread_flags@ extra_modes_file=@extra_modes_file@ extra_opt_files=@extra_opt_files@ host_hook_obj=@out_host_hook_obj@ @@ -1784,7 +1782,6 @@ libgcc-support: libgcc.mvars stmp-int-hd libgcc.mvars: config.status Makefile specs xgcc$(exeext) : > tmp-libgcc.mvars echo GCC_CFLAGS = '$(GCC_CFLAGS)' >> tmp-libgcc.mvars - echo GTHREAD_FLAGS = '$(GTHREAD_FLAGS)' >> tmp-libgcc.mvars echo INHIBIT_LIBC_CFLAGS = '$(INHIBIT_LIBC_CFLAGS)' >> tmp-libgcc.mvars echo TARGET_SYSTEM_ROOT = '$(TARGET_SYSTEM_ROOT)' >> tmp-libgcc.mvars diff --git a/gcc/config/m32r/linux.h b/gcc/config/m32r/linux.h --- a/gcc/config/m32r/linux.h +++ b/gcc/config/m32r/linux.h @@ -84,7 +84,7 @@ #undef SUBTARGET_CPP_SPEC #define SUBTARGET_CPP_SPEC "\ %{posix:-D_POSIX_SOURCE} \ - %{pthread:-D_REENTRANT -D_PTHREADS} \ + %{pthread:-D_REENTRANT} \ " #define TARGET_OS_CPP_BUILTINS() GNU_USER_TARGET_OS_CPP_BUILTINS() diff --git a/gcc/config/mn10300/linux.h b/gcc/config/mn10300/linux.h --- a/gcc/config/mn10300/linux.h +++ b/gcc/config/mn10300/linux.h @@ -28,7 +28,7 @@ #undef CPP_SPEC #define CPP_SPEC "%{mam33:-D__AM33__} %{!mam33:-D__AM33__=2 -D__AM33_2__} \ %{posix:-D_POSIX_SOURCE} \ - %{pthread:-D_REENTRANT -D_PTHREADS}" + %{pthread:-D_REENTRANT}" #undef ASM_SPEC #define ASM_SPEC "" diff --git a/gcc/config/netbsd.h b/gcc/config/netbsd.h --- a/gcc/config/netbsd.h +++ b/gcc/config/netbsd.h @@ -33,7 +33,7 @@ along with GCC; see the file COPYING3. /* CPP_SPEC parts common to all NetBSD targets. */ #define NETBSD_CPP_SPEC \ "%{posix:-D_POSIX_SOURCE} \ - %{pthread:-D_REENTRANT -D_PTHREADS}" + %{pthread:-D_REENTRANT}" /* NETBSD_NATIVE is defined when gcc is integrated into the NetBSD source tree so it can be configured appropriately without using diff --git a/gcc/config/pa/pa-hpux10.h b/gcc/config/pa/pa-hpux10.h --- a/gcc/config/pa/pa-hpux10.h +++ b/gcc/config/pa/pa-hpux10.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler, for HP PA-RISC Copyright (C) 1995, 1996, 1997, 2000, 2001, 2002, 2003, 2004, - 2007, 2008, 2010 Free Software Foundation, Inc. + 2007, 2008, 2010, 2011 Free Software Foundation, Inc. Contributed by Tim Moore (moore@defmacro.cs.utah.edu) This file is part of GCC. @@ -77,7 +77,7 @@ along with GCC; see the file COPYING3. } \ while (0) -#define CPP_SPEC "%{threads: -D_REENTRANT -D_DCE_THREADS}" +#define CPP_SPEC "%{threads: -D_REENTRANT}" /* We can debug dynamically linked executables on hpux9; we also want dereferencing of a NULL pointer to cause a SEGV. */ diff --git a/gcc/config/sh/linux.h b/gcc/config/sh/linux.h --- a/gcc/config/sh/linux.h +++ b/gcc/config/sh/linux.h @@ -28,7 +28,7 @@ along with GCC; see the file COPYING3. #undef SUBTARGET_CPP_SPEC #define SUBTARGET_CPP_SPEC "\ %{posix:-D_POSIX_SOURCE} \ - %{pthread:-D_REENTRANT -D_PTHREADS} \ + %{pthread:-D_REENTRANT} \ " #define TARGET_OS_CPP_BUILTINS() \ diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h --- a/gcc/config/sol2.h +++ b/gcc/config/sol2.h @@ -72,8 +72,7 @@ along with GCC; see the file COPYING3. #define UINTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "unsigned int") #undef CPP_SUBTARGET_SPEC -#define CPP_SUBTARGET_SPEC "\ -%{pthreads|pthread:-D_REENTRANT -D_PTHREADS}" +#define CPP_SUBTARGET_SPEC "%{pthreads|pthread:-D_REENTRANT}" /* Names to predefine in the preprocessor for this target machine. */ #define TARGET_SUB_OS_CPP_BUILTINS() diff --git a/gcc/config/t-vxworks b/gcc/config/t-vxworks --- a/gcc/config/t-vxworks +++ b/gcc/config/t-vxworks @@ -17,10 +17,6 @@ # along with GCC; see the file COPYING3. If not see # . -# Some runtime modules need these. Can't set extra_headers in config.gcc -# because the paths are always made absolute to the cpu config dir. -EXTRA_HEADERS += $(srcdir)/gthr-vxworks.h gthr-default.h - # Both the kernel and RTP headers provide limits.h. LIMITS_H_TEST = true diff --git a/gcc/configure.ac b/gcc/configure.ac --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1370,19 +1370,6 @@ if test x${thread_file} = x; then thread_file=${target_thread_file} fi -# Make gthr-default.h if we have a thread file. -gthread_flags= -if test $thread_file != single; then - echo "#include \"gthr-${thread_file}.h\"" > gthr-default.h-t - if diff gthr-default.h-t gthr-default.h 2>/dev/null; then - rm -f gthr-default.h-t - else - mv -f gthr-default.h-t gthr-default.h - fi - gthread_flags=-DHAVE_GTHR_DEFAULT -fi -AC_SUBST(gthread_flags) - # -------- # UNSORTED # -------- @@ -4883,7 +4870,6 @@ AC_SUBST(out_file) AC_SUBST(out_object_file) AC_SUBST(common_out_file) AC_SUBST(common_out_object_file) -AC_SUBST(thread_file) AC_SUBST(tm_file_list) AC_SUBST(tm_include_list) AC_SUBST(tm_defines) diff --git a/gcc/po/EXCLUDES b/gcc/po/EXCLUDES --- a/gcc/po/EXCLUDES +++ b/gcc/po/EXCLUDES @@ -24,16 +24,6 @@ # These files are part of libgcc, or target headers provided by gcc. gcov-io.h gcov-iov.c -gthr-aix.h -gthr-dce.h -gthr-posix.c -gthr-posix.h -gthr-rtems.h -gthr-single.h -gthr-solaris.h -gthr-vxworks.h -gthr-win32.h -gthr.h limitx.h limity.h diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in --- a/libgcc/Makefile.in +++ b/libgcc/Makefile.in @@ -223,8 +223,7 @@ endif # LIBGCC2_DEBUG_CFLAGS = -g LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \ - $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) \ - -DIN_LIBGCC2 \ + $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \ -fbuilding-libgcc -fno-stack-protector \ $(INHIBIT_LIBC_CFLAGS) diff --git a/libgcc/config.host b/libgcc/config.host --- a/libgcc/config.host +++ b/libgcc/config.host @@ -64,6 +64,7 @@ # built for the target, not the host. These files # are relative to $srcdir/config and must not have # the same names as files in $srcdir/../gcc/config. +# thread_header The name of the header file for the thread model used. # unwind_header The name of the header file declaring the unwind # runtime interface routines. @@ -72,6 +73,7 @@ enable_execute_stack= extra_parts= tmake_file= tm_file= +thread_header= md_unwind_header=no-unwind.h unwind_header=unwind-generic.h @@ -283,6 +285,38 @@ i[34567]86-*-mingw* | x86_64-*-mingw*) ;; esac +# Map from thread model to thread header. +thread_dir= +case $target_thread_file in + aix) + thread_dir=config/rs6000/ + ;; + dce) + thread_dir=config/pa/ + ;; + lynx) + thread_dir=config/ + ;; + mipssde) + thread_dir=config/mips/ + ;; + posix | single) + ;; + rtems) + thread_dir=config/ + ;; + tpf) + thread_dir=config/s390/ + ;; + vxworks) + thread_dir=config/ + ;; + win32) + thread_dir=config/i386/ + ;; +esac +thread_header=${thread_dir}gthr-${target_thread_file}.h + case ${host} in alpha*-*-linux*) tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee t-crtfm alpha/t-linux" diff --git a/gcc/gthr-lynx.h b/libgcc/config/gthr-lynx.h rename from gcc/gthr-lynx.h rename to libgcc/config/gthr-lynx.h diff --git a/gcc/gthr-rtems.h b/libgcc/config/gthr-rtems.h rename from gcc/gthr-rtems.h rename to libgcc/config/gthr-rtems.h diff --git a/gcc/gthr-vxworks.h b/libgcc/config/gthr-vxworks.h rename from gcc/gthr-vxworks.h rename to libgcc/config/gthr-vxworks.h diff --git a/libgcc/config/i386/gthr-win32.c b/libgcc/config/i386/gthr-win32.c --- a/libgcc/config/i386/gthr-win32.c +++ b/libgcc/config/i386/gthr-win32.c @@ -1,7 +1,8 @@ /* Implementation of W32-specific threads compatibility routines for libgcc2. */ -/* Copyright (C) 1999, 2000, 2002, 2004, 2008, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2002, 2004, 2008, 2009, 2011 + Free Software Foundation, Inc. Contributed by Mumit Khan . Modified and moved to separate file by Danny Smith . @@ -33,7 +34,7 @@ see the files COPYING3 and COPYING.RUNTI #endif #undef __GTHREAD_I486_INLINE_LOCK_PRIMITIVES #define __GTHREAD_I486_INLINE_LOCK_PRIMITIVES -#include +#include "gthr-win32.h" /* Windows32 threads specific definitions. The windows32 threading model does not map well into pthread-inspired gcc's threading model, and so diff --git a/gcc/gthr-win32.h b/libgcc/config/i386/gthr-win32.h rename from gcc/gthr-win32.h rename to libgcc/config/i386/gthr-win32.h diff --git a/gcc/gthr-mipssde.h b/libgcc/config/mips/gthr-mipssde.h rename from gcc/gthr-mipssde.h rename to libgcc/config/mips/gthr-mipssde.h diff --git a/gcc/gthr-dce.h b/libgcc/config/pa/gthr-dce.h rename from gcc/gthr-dce.h rename to libgcc/config/pa/gthr-dce.h --- a/gcc/gthr-dce.h +++ b/libgcc/config/pa/gthr-dce.h @@ -1,6 +1,6 @@ /* Threads compatibility routines for libgcc2 and libobjc. */ /* Compile this one with gcc. */ -/* Copyright (C) 1997, 1999, 2000, 2001, 2004, 2005, 2008, 2009 +/* Copyright (C) 1997, 1999, 2000, 2001, 2004, 2005, 2008, 2009, 2011 Free Software Foundation, Inc. This file is part of GCC. @@ -27,10 +27,10 @@ see the files COPYING3 and COPYING.RUNTI #ifndef GCC_GTHR_DCE_H #define GCC_GTHR_DCE_H -/* If _DCE_THREADS is not defined, then we're building the single +/* If _REENTRANT is not defined, then we're building the single threaded version of the libraries and do not want to reference anything related to pthreads or dce. */ -#ifndef _DCE_THREADS +#ifndef _REENTRANT #include "gthr-single.h" #else /* DCE threads interface. diff --git a/gcc/gthr-aix.h b/libgcc/config/rs6000/gthr-aix.h rename from gcc/gthr-aix.h rename to libgcc/config/rs6000/gthr-aix.h diff --git a/gcc/gthr-tpf.h b/libgcc/config/s390/gthr-tpf.h rename from gcc/gthr-tpf.h rename to libgcc/config/s390/gthr-tpf.h diff --git a/libgcc/configure.ac b/libgcc/configure.ac --- a/libgcc/configure.ac +++ b/libgcc/configure.ac @@ -361,6 +361,7 @@ AC_CONFIG_LINKS([enable-execute-stack.c: AC_CONFIG_LINKS([unwind.h:$unwind_header]) AC_CONFIG_LINKS([md-unwind-support.h:config/$md_unwind_header]) AC_CONFIG_LINKS([sfp-machine.h:config/$sfp_machine_header]) +AC_CONFIG_LINKS([gthr-default.h:$thread_header]) # We need multilib support. AC_CONFIG_FILES([Makefile]) diff --git a/gcc/gthr-posix.h b/libgcc/gthr-posix.h rename from gcc/gthr-posix.h rename to libgcc/gthr-posix.h diff --git a/gcc/gthr-single.h b/libgcc/gthr-single.h rename from gcc/gthr-single.h rename to libgcc/gthr-single.h diff --git a/gcc/gthr.h b/libgcc/gthr.h rename from gcc/gthr.h rename to libgcc/gthr.h --- a/gcc/gthr.h +++ b/libgcc/gthr.h @@ -132,23 +132,8 @@ see the files COPYING3 and COPYING.RUNTI __gthread_recursive_mutex_t *mutex, const __gthread_time_t *abs_time) - Currently supported threads packages are - TPF threads with -D__tpf__ - POSIX/Unix98 threads with -D_PTHREADS - DCE threads with -D_DCE_THREADS - */ -/* Check first for thread specific defines. */ -#if defined (__tpf__) -#include "gthr-tpf.h" -#elif _PTHREADS -#include "gthr-posix.h" -#elif _DCE_THREADS -#include "gthr-dce.h" - -/* Include GTHREAD_FILE if one is defined. */ -#elif defined(HAVE_GTHR_DEFAULT) #if SUPPORTS_WEAK #ifndef GTHREAD_USE_WEAK #define GTHREAD_USE_WEAK 1 @@ -156,11 +141,6 @@ see the files COPYING3 and COPYING.RUNTI #endif #include "gthr-default.h" -/* Fallback to single thread definitions. */ -#else -#include "gthr-single.h" -#endif - #ifndef HIDE_EXPORTS #pragma GCC visibility pop #endif diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am --- a/libgfortran/Makefile.am +++ b/libgfortran/Makefile.am @@ -56,7 +56,9 @@ libcaf_single_la_LINK = $(LINK) $(libcaf ## use -iquote AM_CPPFLAGS = -iquote$(srcdir)/io -I$(srcdir)/$(MULTISRCTOP)../gcc \ -I$(srcdir)/$(MULTISRCTOP)../gcc/config $(LIBQUADINCLUDE) \ - -I$(MULTIBUILDTOP)../../$(host_subdir)/gcc + -I$(MULTIBUILDTOP)../../$(host_subdir)/gcc \ + -I$(srcdir)/$(MULTISRCTOP)../libgcc \ + -I$(MULTIBUILDTOP)../libgcc # Fortran rules for complex multiplication and division AM_CFLAGS += -fcx-fortran-rules diff --git a/libgfortran/acinclude.m4 b/libgfortran/acinclude.m4 --- a/libgfortran/acinclude.m4 +++ b/libgfortran/acinclude.m4 @@ -83,17 +83,6 @@ if (foovar > 10) return __sync_add_and_f [Define to 1 if the target supports __sync_fetch_and_add]) fi]) -dnl Check if threads are supported. -AC_DEFUN([LIBGFOR_CHECK_GTHR_DEFAULT], [ - AC_CACHE_CHECK([configured target thread model], - libgfor_cv_target_thread_file, [ -libgfor_cv_target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'`]) - - if test $libgfor_cv_target_thread_file != single; then - AC_DEFINE(HAVE_GTHR_DEFAULT, 1, - [Define if the compiler has a thread header that is non single.]) - fi]) - dnl Check for pragma weak. AC_DEFUN([LIBGFOR_GTHREAD_WEAK], [ AC_CACHE_CHECK([whether pragma weak works], diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac --- a/libgfortran/configure.ac +++ b/libgfortran/configure.ac @@ -550,9 +550,6 @@ LIBGFOR_CHECK_ATTRIBUTE_ALIAS # Check out sync builtins support. LIBGFOR_CHECK_SYNC_FETCH_AND_ADD -# Check out thread support. -LIBGFOR_CHECK_GTHR_DEFAULT - # Check out #pragma weak. LIBGFOR_GTHREAD_WEAK diff --git a/libobjc/Makefile.in b/libobjc/Makefile.in --- a/libobjc/Makefile.in +++ b/libobjc/Makefile.in @@ -102,6 +102,7 @@ INCLUDES = -I$(srcdir)/$(MULTISRCTOP)../ -I$(srcdir)/$(MULTISRCTOP)../gcc/config \ -I$(MULTIBUILDTOP)../../$(host_subdir)/gcc \ -I$(srcdir)/$(MULTISRCTOP)../libgcc \ + -I$(MULTIBUILDTOP)../libgcc \ -I$(srcdir)/$(MULTISRCTOP)../include \ $(OBJC_BOEHM_GC_INCLUDES) diff --git a/libobjc/configure.ac b/libobjc/configure.ac --- a/libobjc/configure.ac +++ b/libobjc/configure.ac @@ -217,15 +217,6 @@ AC_CHECK_HEADERS(sched.h) # Miscellanea # ----------- -AC_MSG_CHECKING([for thread model used by GCC]) -target_thread_file=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` -AC_MSG_RESULT([$target_thread_file]) - -if test $target_thread_file != single; then - AC_DEFINE(HAVE_GTHR_DEFAULT, 1, - [Define if the compiler has a thread header that is non single.]) -fi - # Check if we have thread-local storage GCC_CHECK_TLS diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -35,6 +35,7 @@ dnl SUBDIRS dnl Substs: dnl glibcxx_builddir (absolute path) dnl glibcxx_srcdir (absolute path) +dnl toplevel_builddir (absolute path) dnl toplevel_srcdir (absolute path) dnl with_cross_host dnl with_newlib @@ -59,9 +60,11 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [ [\\/$]* | ?:[\\/]*) glibcxx_srcdir=${srcdir} ;; *) glibcxx_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;; esac + toplevel_builddir=${glibcxx_builddir}/.. toplevel_srcdir=${glibcxx_srcdir}/.. AC_SUBST(glibcxx_builddir) AC_SUBST(glibcxx_srcdir) + AC_SUBST(toplevel_builddir) AC_SUBST(toplevel_srcdir) # We use these options to decide which functions to include. They are @@ -3132,34 +3135,10 @@ dnl having to write complex code (the se dnl namespace are complex and fragile enough as it is). We must also dnl add a relative path so that -I- is supported properly. dnl -dnl Substs: -dnl glibcxx_thread_h -dnl -dnl Defines: -dnl HAVE_GTHR_DEFAULT -dnl AC_DEFUN([GLIBCXX_ENABLE_THREADS], [ AC_MSG_CHECKING([for thread model used by GCC]) target_thread_file=`$CXX -v 2>&1 | sed -n 's/^Thread model: //p'` AC_MSG_RESULT([$target_thread_file]) - - if test $target_thread_file != single; then - AC_DEFINE(HAVE_GTHR_DEFAULT, 1, - [Define if gthr-default.h exists - (meaning that threading support is enabled).]) - fi - - glibcxx_thread_h=gthr-$target_thread_file.h - - dnl Check for __GTHREADS define. - gthread_file=${toplevel_srcdir}/gcc/${glibcxx_thread_h} - if grep __GTHREADS $gthread_file >/dev/null 2>&1 ; then - enable_thread=yes - else - enable_thread=no - fi - - AC_SUBST(glibcxx_thread_h) ]) @@ -3173,7 +3152,8 @@ AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [ AC_LANG_CPLUSPLUS ac_save_CXXFLAGS="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -fno-exceptions -I${toplevel_srcdir}/gcc" + CXXFLAGS="$CXXFLAGS -fno-exceptions \ + -I${toplevel_srcdir}/libgcc -I${toplevel_builddir}/libgcc" AC_MSG_CHECKING([check whether it can be safely assumed that mutex_timedlock is available]) diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -846,7 +846,6 @@ thread_host_headers = \ ${host_builddir}/gthr.h \ ${host_builddir}/gthr-single.h \ ${host_builddir}/gthr-posix.h \ - ${host_builddir}/gthr-tpf.h \ ${host_builddir}/gthr-default.h @@ -1108,43 +1107,35 @@ endif # Host includes for threads uppercase = [ABCDEFGHIJKLMNOPQRSTUVWXYZ_] -${host_builddir}/gthr.h: ${toplevel_srcdir}/gcc/gthr.h stamp-${host_alias} +${host_builddir}/gthr.h: ${toplevel_srcdir}/libgcc/gthr.h stamp-${host_alias} sed -e '/^#pragma/b' \ -e '/^#/s/\(${uppercase}${uppercase}*\)/_GLIBCXX_\1/g' \ -e 's/_GLIBCXX_SUPPORTS_WEAK/__GXX_WEAK__/g' \ -e 's,^#include "\(.*\)",#include ,g' \ - < ${toplevel_srcdir}/gcc/gthr.h > $@ + < $< > $@ -${host_builddir}/gthr-single.h: ${toplevel_srcdir}/gcc/gthr-single.h \ +${host_builddir}/gthr-single.h: ${toplevel_srcdir}/libgcc/gthr-single.h \ stamp-${host_alias} sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \ -e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \ - < ${toplevel_srcdir}/gcc/gthr-single.h > $@ + < $< > $@ -${host_builddir}/gthr-posix.h: ${toplevel_srcdir}/gcc/gthr-posix.h \ +${host_builddir}/gthr-posix.h: ${toplevel_srcdir}/libgcc/gthr-posix.h \ stamp-${host_alias} sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \ -e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \ -e 's/SUPPORTS_WEAK/__GXX_WEAK__/g' \ -e 's/\(${uppercase}*USE_WEAK\)/_GLIBCXX_\1/g' \ - < ${toplevel_srcdir}/gcc/gthr-posix.h > $@ + < $< > $@ -${host_builddir}/gthr-tpf.h: ${toplevel_srcdir}/gcc/gthr-tpf.h \ - stamp-${host_alias} - sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \ - -e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \ - -e 's/SUPPORTS_WEAK/__GXX_WEAK__/g' \ - -e 's/\(${uppercase}*USE_WEAK\)/_GLIBCXX_\1/g' \ - < ${toplevel_srcdir}/gcc/gthr-tpf.h > $@ - -${host_builddir}/gthr-default.h: ${toplevel_srcdir}/gcc/${glibcxx_thread_h} \ +${host_builddir}/gthr-default.h: ${toplevel_builddir}/libgcc/gthr-default.h \ stamp-${host_alias} sed -e 's/\(UNUSED\)/_GLIBCXX_\1/g' \ -e 's/\(GCC${uppercase}*_H\)/_GLIBCXX_\1/g' \ -e 's/SUPPORTS_WEAK/__GXX_WEAK__/g' \ -e 's/\(${uppercase}*USE_WEAK\)/_GLIBCXX_\1/g' \ -e 's,^#include "\(.*\)",#include ,g' \ - < ${toplevel_srcdir}/gcc/${glibcxx_thread_h} > $@ + < $< > $@ # Build two precompiled C++ includes, stdc++.h.gch/*.gch ${pch1a_output}: ${allstamped} ${host_builddir}/c++config.h ${pch1_source}