From c969e34e3fe457d60c4220554fa3c81d2bdae91b Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Fri, 12 Jan 2018 09:52:53 +0000 Subject: [PATCH] Link with correct values-*.o files on Solaris (PR target/40411) gcc/testsuite: PR libfortran/67412 * gfortran.dg/execute_command_line_2.f90: Remove dg-xfail-run-if on *-*-solaris2.10. libstdc++-v3: PR libstdc++/64054 * testsuite/27_io/basic_ostream/inserters_arithmetic/char/hexfloat.cc: Remove dg-xfail-run-if. gcc: PR target/40411 * config/sol2.h (STARTFILE_ARCH_SPEC): Don't use with -shared or -symbolic. Use values-Xc.o for -pedantic. Link with values-xpg4.o for C90, values-xpg6.o otherwise. From-SVN: r256568 --- gcc/ChangeLog | 8 +++++ gcc/config/sol2.h | 29 +++++++++++++++++-- gcc/testsuite/ChangeLog | 6 ++++ .../gfortran.dg/execute_command_line_2.f90 | 1 - libstdc++-v3/ChangeLog | 6 ++++ .../inserters_arithmetic/char/hexfloat.cc | 1 - 6 files changed, 47 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5ed1111f9bd..36e8aa8b511 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-01-12 Rainer Orth + + PR target/40411 + * config/sol2.h (STARTFILE_ARCH_SPEC): Don't use with -shared or + -symbolic. + Use values-Xc.o for -pedantic. + Link with values-xpg4.o for C90, values-xpg6.o otherwise. + 2018-01-12 Martin Liska PR ipa/83054 diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h index 1681313b0cd..f296cf5731c 100644 --- a/gcc/config/sol2.h +++ b/gcc/config/sol2.h @@ -169,9 +169,34 @@ along with GCC; see the file COPYING3. If not see #undef SUPPORTS_INIT_PRIORITY #define SUPPORTS_INIT_PRIORITY HAVE_INITFINI_ARRAY_SUPPORT +/* Solaris libc and libm implement multiple behaviours for various + interfaces that have changed over the years in different versions of the + C standard. The behaviour is controlled by linking corresponding + values-*.o objects. Each of these objects contain alternate definitions + of one or more variables that the libraries use to select which + conflicting behaviour they should exhibit. There are two sets of these + objects, values-X*.o and values-xpg*.o. + + The values-X[ac].o objects set the variable _lib_version. The Studio C + compilers use values-Xc.o with either -Xc or (since Studio 12.6) + -pedantic to select strictly conformant ISO C behaviour, otherwise + values-Xa.o. + + The values-xpg[46].o objects define either or both __xpg[46] variables, + selecting XPG4 mode (__xpg4) and conforming C99/SUSv3 behavior (__xpg6). + + Since GCC 5, gcc defaults to -std=gnu11 or higher, so we link + values-xpg6.o to get C99 semantics. Besides, most of the runtime + libraries always require C99 semantics. + + Since only one instance of _lib_version and __xpg[46] takes effekt (the + first in ld.so.1's search path), we only link the values-*.o files into + executable programs. */ #undef STARTFILE_ARCH_SPEC -#define STARTFILE_ARCH_SPEC "%{ansi:values-Xc.o%s} \ - %{!ansi:values-Xa.o%s}" +#define STARTFILE_ARCH_SPEC \ + "%{!shared:%{!symbolic: \ + %{pedantic:values-Xc.o%s; :values-Xa.o%s} \ + %{std=c90|std=gnu90:values-xpg4.o%s; :values-xpg6.o%s}}}" #if defined(HAVE_LD_PIE) && defined(HAVE_SOLARIS_CRTS) #define STARTFILE_CRTBEGIN_SPEC "%{static:crtbegin.o%s; \ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fa0c2f1b0ed..017281df3d2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-01-12 Rainer Orth + + PR libfortran/67412 + * gfortran.dg/execute_command_line_2.f90: Remove dg-xfail-run-if + on *-*-solaris2.10. + 2018-01-12 Rainer Orth * lib/target-supports.exp (check_effective_target_branch_cost): diff --git a/gcc/testsuite/gfortran.dg/execute_command_line_2.f90 b/gcc/testsuite/gfortran.dg/execute_command_line_2.f90 index 3e34f322f07..5a4e9cc7b82 100644 --- a/gcc/testsuite/gfortran.dg/execute_command_line_2.f90 +++ b/gcc/testsuite/gfortran.dg/execute_command_line_2.f90 @@ -1,5 +1,4 @@ ! { dg-do run } -! { dg-xfail-run-if "PR libfortran/67412" { *-*-solaris2.10 } } ! ! Check that EXECUTE_COMMAND_LINE handles invalid command lines appropriately ! diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 46908d32ef6..01963be85b5 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2018-01-12 Rainer Orth + + PR libstdc++/64054 + * testsuite/27_io/basic_ostream/inserters_arithmetic/char/hexfloat.cc: + Remove dg-xfail-run-if. + 2018-01-10 François Dumont * include/bits/forward_list.h diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/hexfloat.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/hexfloat.cc index 7c1dde9eb66..f71551b397e 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/hexfloat.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_arithmetic/char/hexfloat.cc @@ -1,6 +1,5 @@ // { dg-do run { target c++11 } } // { dg-require-string-conversions "" } -// { dg-xfail-run-if "PR libstdc++/64054" { *-*-solaris* } } // { dg-xfail-run-if "broken long double IO" { newlib_broken_long_double_io } } // 2014-03-27 Rüdiger Sonderfeld