Mercurial > hg > CbC > CbC_gcc
diff gcc/config/sol2.h @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
line wrap: on
line diff
--- a/gcc/config/sol2.h Fri Oct 27 22:46:09 2017 +0900 +++ b/gcc/config/sol2.h Thu Oct 25 07:37:49 2018 +0900 @@ -1,6 +1,6 @@ /* Operating system specific defines to be used when targeting GCC for any Solaris 2 system. - Copyright (C) 2002-2017 Free Software Foundation, Inc. + Copyright (C) 2002-2018 Free Software Foundation, Inc. This file is part of GCC. @@ -113,6 +113,7 @@ builtin_define ("_XOPEN_SOURCE=600"); \ builtin_define ("_LARGEFILE_SOURCE=1"); \ builtin_define ("_LARGEFILE64_SOURCE=1"); \ + builtin_define ("_FILE_OFFSET_BITS=64"); \ builtin_define ("__EXTENSIONS__"); \ } \ TARGET_SUB_OS_CPP_BUILTINS(); \ @@ -169,9 +170,37 @@ #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. Since -pedantic is a diagnostic option only in GCC, we + need to specifiy the -std=c* options and -std=iso9899:199409. We + traditionally include -ansi, which affects C and C++, and also -std=c++* + for consistency. + + 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: \ + %{ansi|std=c*|std=iso9899\\:199409: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; \ @@ -205,8 +234,8 @@ /* We don't use the standard svr4 STARTFILE_SPEC because it's wrong for us. */ #undef STARTFILE_SPEC #ifdef HAVE_SOLARIS_CRTS -/* Since Solaris 11.x and Solaris 12, the OS delivers crt1.o, crti.o, and - crtn.o, with a hook for compiler-dependent stuff like profile handling. */ +/* Since Solaris 11.4, the OS delivers crt1.o, crti.o, and crtn.o, with a hook + for compiler-dependent stuff like profile handling. */ #define STARTFILE_SPEC "%{!shared:%{!symbolic: \ crt1.o%s \ %{p:%e-p is not supported; \ @@ -394,9 +423,6 @@ produce the same format. */ #define NM_FLAGS "-png" -/* The system headers under Solaris 2 are C++-aware since 2.0. */ -#define NO_IMPLICIT_EXTERN_C - #define STDC_0_IN_SYSTEM_HEADERS 1 /* Support Solaris-specific format checking for cmn_err. */ @@ -406,8 +432,8 @@ /* #pragma init and #pragma fini are implemented on top of init and fini attributes. */ #define SOLARIS_ATTRIBUTE_TABLE \ - { "init", 0, 0, true, false, false, NULL, false }, \ - { "fini", 0, 0, true, false, false, NULL, false } + { "init", 0, 0, true, false, false, false, NULL, NULL }, \ + { "fini", 0, 0, true, false, false, false, NULL, NULL } /* Solaris-specific #pragmas are implemented on top of attributes. Hook in the bits from config/sol2.c. */