From patchwork Wed Jul 6 16:40:16 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rainer Orth X-Patchwork-Id: 103530 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 DF9E2B6F69 for ; Thu, 7 Jul 2011 02:40:45 +1000 (EST) Received: (qmail 21882 invoked by alias); 6 Jul 2011 16:40:43 -0000 Received: (qmail 21867 invoked by uid 22791); 6 Jul 2011 16:40:41 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, TW_YM, T_RP_MATCHES_RCVD 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; Wed, 06 Jul 2011 16:40:22 +0000 Received: from localhost (localhost.CeBiTec.Uni-Bielefeld.DE [127.0.0.1]) by smtp-relay.CeBiTec.Uni-Bielefeld.DE (Postfix) with ESMTP id B508496; Wed, 6 Jul 2011 18:40:20 +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 XGmffmTH5n5c; Wed, 6 Jul 2011 18:40:16 +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 B2AB395; Wed, 6 Jul 2011 18:40:16 +0200 (CEST) Received: (from ro@localhost) by manam.CeBiTec.Uni-Bielefeld.DE (8.14.4+Sun/8.14.4/Submit) id p66GeGCc003223; Wed, 6 Jul 2011 18:40:16 +0200 (MEST) From: Rainer Orth To: libstdc++@gcc.gnu.org Cc: gcc-patches@gcc.gnu.org Subject: [v3] Correctly determine baseline_subdir for 64-bit default Solaris gcc Date: Wed, 06 Jul 2011 18:40:16 +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 As alluded to in Provide 64-bit default Solaris/x86 configuration (PR target/39150) http://gcc.gnu.org/ml/gcc-patches/2011-07/msg00327.html (which was meant to be Cc'ed to libstdc++, but bounced due to a stupid typo), there are now to variant bi-arch gcc configurations for Solaris: i386-pc-solaris2.* sparc-sun-solaris2.* which default to 32-bit code generation, and x86_64-pc-solaris2.* sparc64-sun-solaris2.* which default to 64-bit code generation. Unfortunately, libstdc++-abi/abi_check fails for the latter two for the 64-bit (default) multilib. The problem is that testsuite/Makefile.am and testsuite/libstdc++-abi/abi.exp use g++ --print-multi-directory to determine the subdirectory of config/abi/post/ to use for the multilib at hand. For the 32-bit configurations, all is fine, while there's a mismatch for the 64-bit ones: 32-bit default 64-bit default --print-multi-directory . amd64 . 32 --print-multi-os-directory . amd64 amd64 . For the 32-bit case, everything works (sort of by chance): if abi.exp cannot fine the baseline in the subdir, it defaults to the baseline dir, which is exactly right. In the 64-bit case, the 32-bit baseline is used instead, which breaks completely. Unfortunately, one cannot simply use --print-multi-os-directory instead everywhere: while this is fine on Solaris, it would break Linux/x86_64: . 32 ../lib64 ../lib So it seems the whole thing needs to be made configurable, which is what this patch does. It allows setting a non-default switch in configure.host, but defaults to --print-multi-directory otherwise. Tested on sparc-sun-solaris2.11 and sparcv9-sun-solaris2.11 by rebuilding libstdc++-v3 and running make RUNTESTFLAGS=abi.exp check. As expected, libstdc++-abi/abi_check now succeeds for both multilibs. I'll also test on x86_64-unknown-linux-gnu to make sure nothing breaks there. Ok for mainline if that passes? Thanks. Rainer 2011-07-06 Rainer Orth * configure.host (abi_baseline_subdir_switch): Describe. Provide default. (*-*-solaris2.[89], *-*-solaris2.1[0-9]): Override. * acinclude.m4 (GLIBCXX_CONFIGURE_TESTSUITE): Substitute baseline_subdir_switch. * testsuite/Makefile.am (site.exp): Emit it. (baseline_subdir): Use it. * testsuite/libstdc++-abi/abi.exp: Use it. * configure: Regenerate. * Makefile.in: Regenerate. * doc/Makefile.in: Regenerate. * include/Makefile.in: Regenerate. * libsupc++/Makefile.in: Regenerate. * po/Makefile.in: Regenerate. * python/Makefile.in: Regenerate. * src/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -590,6 +590,7 @@ dnl GLIBCXX_TEST_WCHAR_T dnl GLIBCXX_TEST_THREAD dnl Substs: dnl baseline_dir +dnl baseline_subdir_switch dnl AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], [ if $GLIBCXX_IS_NATIVE ; then @@ -617,6 +618,8 @@ AC_DEFUN([GLIBCXX_CONFIGURE_TESTSUITE], # Export file names for ABI checking. baseline_dir="$glibcxx_srcdir/config/abi/post/${abi_baseline_pair}" AC_SUBST(baseline_dir) + baseline_subdir_switch="$abi_baseline_subdir_switch" + AC_SUBST(baseline_subdir_switch) ]) diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host --- a/libstdc++-v3/configure.host +++ b/libstdc++-v3/configure.host @@ -30,6 +30,11 @@ # abi_baseline_pair directory name for ABI compat testing, # defaults to host_cpu-host_os (as per config.guess) # +# abi_baseline_subdir_switch +# g++ switch to determine ABI baseline subdir for +# multilibbed targets, +# defaults to --print-multi-directory +# # abi_tweaks_dir location of cxxabi_tweaks.h, # defaults to cpu_include_dir # @@ -78,6 +83,7 @@ atomic_flags="" atomicity_dir="cpu/generic" cpu_defines_dir="cpu/generic" try_cpu=generic +abi_baseline_subdir_switch=--print-multi-directory abi_tweaks_dir="cpu/generic" error_constants_dir="os/generic" @@ -336,8 +342,10 @@ case "${host}" in ;; *-*-solaris2.[89]) abi_baseline_pair=solaris2.8 + abi_baseline_subdir_switch=--print-multi-os-directory ;; *-*-solaris2.1[0-9]) abi_baseline_pair=solaris2.10 + abi_baseline_subdir_switch=--print-multi-os-directory ;; esac diff --git a/libstdc++-v3/testsuite/Makefile.am b/libstdc++-v3/testsuite/Makefile.am --- a/libstdc++-v3/testsuite/Makefile.am +++ b/libstdc++-v3/testsuite/Makefile.am @@ -59,6 +59,7 @@ site.exp: Makefile @echo 'set target_triplet $(target_triplet)' >>site.tmp @echo 'set libiconv "$(LIBICONV)"' >>site.tmp @echo 'set baseline_dir "$(baseline_dir)"' >> site.tmp + @echo 'set baseline_subdir_switch "$(baseline_subdir_switch)"' >> site.tmp @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp @test ! -f site.exp || \ sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp @@ -69,7 +70,7 @@ site.exp: Makefile extract_symvers = $(glibcxx_builddir)/scripts/extract_symvers -baseline_subdir := $(shell $(CXX) --print-multi-dir) +baseline_subdir := $(shell $(CXX) $(baseline_subdir_switch)) baseline_symbols: -@(output=${baseline_dir}/${baseline_subdir}/baseline_symbols.txt; \ diff --git a/libstdc++-v3/testsuite/libstdc++-abi/abi.exp b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp --- a/libstdc++-v3/testsuite/libstdc++-abi/abi.exp +++ b/libstdc++-v3/testsuite/libstdc++-abi/abi.exp @@ -1,4 +1,4 @@ -# Copyright (C) 2005, 2009, 2010 Free Software Foundation, Inc. +# Copyright (C) 2005, 2009, 2010, 2011 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ if { [string match "*-*-darwin*" $target set lib $blddir/src/.libs/libstdc++.so } -set baseline_subdir "[eval exec $cxx --print-multi-dir]" +set baseline_subdir "[eval exec $cxx $baseline_subdir_switch]" # Build the support objects. v3-build_support