diff options
-rw-r--r-- | gcc/ChangeLog | 52 | ||||
-rw-r--r-- | gcc/config.gcc | 14 | ||||
-rw-r--r-- | gcc/config/i386/sol2-bi.h | 109 | ||||
-rw-r--r-- | gcc/config/i386/sol2.h | 101 | ||||
-rw-r--r-- | gcc/config/i386/t-sol2 (renamed from gcc/config/i386/t-sol2-64) | 0 | ||||
-rw-r--r-- | gcc/config/sol2-10.h | 24 | ||||
-rw-r--r-- | gcc/config/sol2-bi.h | 135 | ||||
-rw-r--r-- | gcc/config/sol2.h | 149 | ||||
-rw-r--r-- | gcc/config/sparc/sol2.h | 32 | ||||
-rw-r--r-- | gcc/config/sparc/t-sol2 (renamed from gcc/config/sparc/t-sol2-64) | 0 |
10 files changed, 264 insertions, 352 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5b771ea..704dfc1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,55 @@ +2014-04-30 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * config/sol2-10.h (TARGET_LIBC_HAS_FUNCTION): Move ... + * config/sol2.h: ... here. + * config/sol2-10.h: Remove. + + * config/sol2-bi.h (WCHAR_TYPE, WCHAR_TYPE_SIZE, WINT_TYPE) + (WINT_TYPE_SIZE, MULTILIB_DEFAULTS, DEF_ARCH32_SPEC) + (DEF_ARCH64_SPEC, ASM_CPU_DEFAULT_SPEC, LINK_ARCH64_SPEC_BASE) + (LINK_ARCH64_SPEC, ARCH_DEFAULT_EMULATION, TARGET_LD_EMULATION) + (LINK_ARCH_SPEC, SUBTARGET_EXTRA_SPECS): Move ... + * config/sol2.h: ... here. + (SECTION_NAME_FORMAT): Don't redefine. + (STARTFILE_ARCH32_SPEC): Rename to ... + (STARTFILE_ARCH_SPEC): ... this. + (ASM_OUTPUT_ALIGNED_COMMON): Move ... + * config/sparc/sol2.h: ... here. + (SECTION_NAME_FORMAT): Don't undef. + * config/i386/sol2.h (ASM_CPU_DEFAULT_SPEC) + (SUBTARGET_EXTRA_SPECS): Remove. + * config/sparc/sol2.h (ASM_CPU_DEFAULT_SPEC): Remove. + + * config/i386/sol2-bi.h (TARGET_SUBTARGET_DEFAULT) + (MD_STARTFILE_PREFIX): Remove. + (SUBTARGET_OPTIMIZATION_OPTIONS, ASM_CPU32_DEFAULT_SPEC) + (ASM_CPU64_DEFAULT_SPEC, ASM_CPU_SPEC, ASM_SPEC, DEFAULT_ARCH32_P) + (ARCH64_SUBDIR, ARCH32_EMULATION, ARCH64_EMULATION) + (ASM_COMMENT_START, JUMP_TABLES_IN_TEXT_SECTION) + (ASM_OUTPUT_DWARF_PCREL, ASM_OUTPUT_ALIGNED_COMMON) + (USE_IX86_FRAME_POINTER, USE_X86_64_FRAME_POINTER): Move ... + * config/i386/sol2.h: ... here. + (TARGET_SUBTARGET_DEFAULT, SIZE_TYPE, PTRDIFF_TYPE): Remove. + * config/i386/sol2-bi.h: Remove. + * config/sol2.h (MD_STARTFILE_PREFIX): Remove. + (LINK_ARCH32_SPEC_BASE): Remove /usr/ccs/lib/libp, /usr/ccs/lib. + + * config/i386/t-sol2-64: Rename to ... + * config/i386/t-sol2: ... this. + * config/sparc/t-sol2-64: Rename to ... + * config/sparc/t-sol2: ... this. + + * config.gcc (*-*-solaris2*): Split sol2_tm_file into + sol2_tm_file_head, sol2_tm_file_tail. + Include ${cpu_type}/sol2.h before sol2.h. + Remove sol2-10.h. + (i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*): Include + i386/x86-64.h between sol2_tm_file_head and sol2_tm_file_tail. + Remove i386/sol2-bi.h, sol2-bi.h from tm_file. + Reflect i386/t-sol2-64 renaming. + (sparc*-*-solaris2*): Remove sol2-bi.h from tm_file. + Reflect sparc/t-sol2-64 renaming. + 2014-04-30 Richard Biener <rguenther@suse.de> * passes.c (execute_function_todo): Move TODO_verify_stmts diff --git a/gcc/config.gcc b/gcc/config.gcc index 92f8a94..81205ff 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -808,8 +808,9 @@ case ${target} in *-*-solaris2*) # i?86-*-solaris2* needs to insert headers between cpu default and # Solaris 2 specific ones. - sol2_tm_file="dbxelf.h elfos.h ${cpu_type}/sysv4.h sol2.h ${cpu_type}/sol2.h" - sol2_tm_file="${sol2_tm_file} sol2-10.h" + sol2_tm_file_head="dbxelf.h elfos.h ${cpu_type}/sysv4.h" + sol2_tm_file_tail="${cpu_type}/sol2.h sol2.h" + sol2_tm_file="${sol2_tm_file_head} ${sol2_tm_file_tail}" use_gcc_stdint=wrap if test x$gnu_ld = xyes; then tm_file="usegld.h ${tm_file}" @@ -1515,14 +1516,13 @@ i[34567]86-*-rtems*) tmake_file="${tmake_file} i386/t-rtems" ;; i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*) - tm_file="${tm_file} i386/unix.h i386/att.h ${sol2_tm_file}" # Set default arch_32 to pentium4, tune_32 to generic like the other # i386 targets, although config.guess defaults to i386-pc-solaris2*. with_arch_32=${with_arch_32:-pentium4} with_tune_32=${with_tune_32:-generic} - tm_file="${tm_file} i386/x86-64.h i386/sol2-bi.h sol2-bi.h" + tm_file="${tm_file} i386/unix.h i386/att.h ${sol2_tm_file_head} i386/x86-64.h ${sol2_tm_file_tail}" tm_defines="${tm_defines} TARGET_BI_ARCH=1" - tmake_file="$tmake_file i386/t-sol2-64" + tmake_file="$tmake_file i386/t-sol2" need_64bit_isa=yes if test x$with_cpu = x; then if test x$with_cpu_64 = x; then @@ -2661,7 +2661,7 @@ sparc-*-netbsdelf*) tmake_file="${tmake_file} sparc/t-sparc" ;; sparc*-*-solaris2*) - tm_file="sparc/biarch64.h ${tm_file} ${sol2_tm_file} sol2-bi.h sparc/tso.h" + tm_file="sparc/biarch64.h ${tm_file} ${sol2_tm_file} sparc/tso.h" case ${target} in sparc64-*-* | sparcv9-*-*) tm_file="sparc/default-64.h ${tm_file}" @@ -2670,7 +2670,7 @@ sparc*-*-solaris2*) test x$with_cpu != x || with_cpu=v9 ;; esac - tmake_file="${tmake_file} sparc/t-sparc sparc/t-sol2-64" + tmake_file="${tmake_file} sparc/t-sparc sparc/t-sol2" ;; sparc-wrs-vxworks) tm_file="${tm_file} elfos.h sparc/sysv4.h vx-common.h vxworks.h sparc/vxworks.h" diff --git a/gcc/config/i386/sol2-bi.h b/gcc/config/i386/sol2-bi.h deleted file mode 100644 index 66d1780..0000000 --- a/gcc/config/i386/sol2-bi.h +++ /dev/null @@ -1,109 +0,0 @@ -/* Definitions of target machine for GCC, for bi-arch Solaris 2/x86. - Copyright (C) 2004-2014 Free Software Foundation, Inc. - Contributed by CodeSourcery, LLC. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -/* Override i386/sol2.h version: return 8-byte vectors in MMX registers if - possible, matching Sun Studio 12 Update 1+ compilers and other x86 - targets. */ -#undef TARGET_SUBTARGET_DEFAULT -#define TARGET_SUBTARGET_DEFAULT \ - (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) - -#define SUBTARGET_OPTIMIZATION_OPTIONS \ - { OPT_LEVELS_1_PLUS, OPT_momit_leaf_frame_pointer, NULL, 1 } - -/* GNU as understands --32 and --64, but the native Solaris - assembler requires -xarch=generic or -xarch=generic64 instead. */ -#ifdef USE_GAS -#define ASM_CPU32_DEFAULT_SPEC "--32" -#define ASM_CPU64_DEFAULT_SPEC "--64" -#else -#define ASM_CPU32_DEFAULT_SPEC "-xarch=generic" -#define ASM_CPU64_DEFAULT_SPEC "-xarch=generic64" -#endif - -#undef ASM_CPU_SPEC -#define ASM_CPU_SPEC "%(asm_cpu_default)" - -/* Don't let i386/x86-64.h override i386/sol2.h version. Still cannot use - -K PIC with the Solaris 10+ assembler, it gives many warnings: - Absolute relocation is used for symbol "<symbol>" */ -#undef ASM_SPEC -#define ASM_SPEC ASM_SPEC_BASE - -/* We do not need to search a special directory for startup files. */ -#undef MD_STARTFILE_PREFIX - -#define DEFAULT_ARCH32_P !TARGET_64BIT_DEFAULT - -#define ARCH64_SUBDIR "amd64" - -#ifdef USE_GLD -/* Since binutils 2.21, GNU ld supports new *_sol2 emulations to strictly - follow the Solaris 2 ABI. Prefer them if present. */ -#ifdef HAVE_LD_SOL2_EMULATION -#define ARCH32_EMULATION "elf_i386_sol2" -#define ARCH64_EMULATION "elf_x86_64_sol2" -#else -#define ARCH32_EMULATION "elf_i386" -#define ARCH64_EMULATION "elf_x86_64" -#endif -#endif - -#undef ASM_COMMENT_START -#define ASM_COMMENT_START "/" - -/* The native Solaris assembler can't calculate the difference between - symbols in different sections, which causes problems for -fPIC jump - tables in .rodata. */ -#ifndef HAVE_AS_IX86_DIFF_SECT_DELTA -#undef JUMP_TABLES_IN_TEXT_SECTION -#define JUMP_TABLES_IN_TEXT_SECTION 1 - -/* The native Solaris assembler cannot handle the SYMBOL-. syntax, but - requires SYMBOL@rel/@rel64 instead. */ -#define ASM_OUTPUT_DWARF_PCREL(FILE, SIZE, LABEL) \ - do { \ - fputs (integer_asm_op (SIZE, FALSE), FILE); \ - assemble_name (FILE, LABEL); \ - fputs (SIZE == 8 ? "@rel64" : "@rel", FILE); \ - } while (0) -#endif - -/* As in sol2.h, override the default from i386/x86-64.h to work around - Sun as TLS bug. */ -#undef ASM_OUTPUT_ALIGNED_COMMON -#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ - do \ - { \ - if (TARGET_SUN_TLS \ - && in_section \ - && ((in_section->common.flags & SECTION_TLS) == SECTION_TLS)) \ - switch_to_section (bss_section); \ - x86_elf_aligned_common (FILE, NAME, SIZE, ALIGN); \ - } \ - while (0) - -#define USE_IX86_FRAME_POINTER 1 -#define USE_X86_64_FRAME_POINTER 1 - -#undef NO_PROFILE_COUNTERS - -#undef MCOUNT_NAME -#define MCOUNT_NAME "_mcount" diff --git a/gcc/config/i386/sol2.h b/gcc/config/i386/sol2.h index 6676941..9c3a6f4 100644 --- a/gcc/config/i386/sol2.h +++ b/gcc/config/i386/sol2.h @@ -18,12 +18,8 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>. */ -/* Augment i386/unix.h version to return 8-byte vectors in memory, matching - Sun Studio compilers until version 12, the only ones supported on - Solaris 9. */ -#undef TARGET_SUBTARGET_DEFAULT -#define TARGET_SUBTARGET_DEFAULT \ - (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_VECT8_RETURNS) +#define SUBTARGET_OPTIMIZATION_OPTIONS \ + { OPT_LEVELS_1_PLUS, OPT_momit_leaf_frame_pointer, NULL, 1 } /* Old versions of the Solaris assembler can not handle the difference of labels in different sections, so force DW_EH_PE_datarel if so. */ @@ -50,27 +46,46 @@ along with GCC; see the file COPYING3. If not see #undef TARGET_SUN_TLS #define TARGET_SUN_TLS 1 -#undef SIZE_TYPE -#define SIZE_TYPE "unsigned int" - -#undef PTRDIFF_TYPE -#define PTRDIFF_TYPE "int" - /* Solaris 2/Intel as chokes on #line directives before Solaris 10. */ #undef CPP_SPEC #define CPP_SPEC "%{,assembler-with-cpp:-P} %(cpp_subtarget)" -#define ASM_CPU_DEFAULT_SPEC "" +/* GNU as understands --32 and --64, but the native Solaris + assembler requires -xarch=generic or -xarch=generic64 instead. */ +#ifdef USE_GAS +#define ASM_CPU32_DEFAULT_SPEC "--32" +#define ASM_CPU64_DEFAULT_SPEC "--64" +#else +#define ASM_CPU32_DEFAULT_SPEC "-xarch=generic" +#define ASM_CPU64_DEFAULT_SPEC "-xarch=generic64" +#endif + +#undef ASM_CPU_SPEC +#define ASM_CPU_SPEC "%(asm_cpu_default)" -#define ASM_CPU_SPEC "" - -/* Don't include ASM_PIC_SPEC. While the Solaris 9 assembler accepts - -K PIC, it gives many warnings: - R_386_32 relocation is used for symbol "<symbol>" +/* Don't include ASM_PIC_SPEC. While the Solaris 10+ assembler accepts -K PIC, + it gives many warnings: + Absolute relocation is used for symbol "<symbol>" GNU as doesn't recognize -K at all. */ #undef ASM_SPEC #define ASM_SPEC ASM_SPEC_BASE +#define DEFAULT_ARCH32_P !TARGET_64BIT_DEFAULT + +#define ARCH64_SUBDIR "amd64" + +#ifdef USE_GLD +/* Since binutils 2.21, GNU ld supports new *_sol2 emulations to strictly + follow the Solaris 2 ABI. Prefer them if present. */ +#ifdef HAVE_LD_SOL2_EMULATION +#define ARCH32_EMULATION "elf_i386_sol2" +#define ARCH64_EMULATION "elf_x86_64_sol2" +#else +#define ARCH32_EMULATION "elf_i386" +#define ARCH64_EMULATION "elf_x86_64" +#endif +#endif + #undef ENDFILE_SPEC #define ENDFILE_SPEC \ "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ @@ -84,23 +99,39 @@ along with GCC; see the file COPYING3. If not see { "asm_cpu", ASM_CPU_SPEC }, \ { "asm_cpu_default", ASM_CPU_DEFAULT_SPEC }, \ -#undef SUBTARGET_EXTRA_SPECS -#define SUBTARGET_EXTRA_SPECS \ - { "startfile_arch", STARTFILE_ARCH_SPEC }, \ - { "link_arch", LINK_ARCH_SPEC }, \ - SUBTARGET_CPU_EXTRA_SPECS - /* Register the Solaris-specific #pragma directives. */ #define REGISTER_SUBTARGET_PRAGMAS() solaris_register_pragmas () #undef LOCAL_LABEL_PREFIX #define LOCAL_LABEL_PREFIX "." +/* The Solaris 10 FCS as doesn't accept "#" comments, while later versions + do. */ +#undef ASM_COMMENT_START +#define ASM_COMMENT_START "/" + /* The 32-bit Solaris assembler does not support .quad. Do not use it. */ #ifndef HAVE_AS_IX86_QUAD #undef ASM_QUAD #endif +/* The native Solaris assembler can't calculate the difference between + symbols in different sections, which causes problems for -fPIC jump + tables in .rodata. */ +#ifndef HAVE_AS_IX86_DIFF_SECT_DELTA +#undef JUMP_TABLES_IN_TEXT_SECTION +#define JUMP_TABLES_IN_TEXT_SECTION 1 + +/* The native Solaris assembler cannot handle the SYMBOL-. syntax, but + requires SYMBOL@rel/@rel64 instead. */ +#define ASM_OUTPUT_DWARF_PCREL(FILE, SIZE, LABEL) \ + do { \ + fputs (integer_asm_op (SIZE, FALSE), FILE); \ + assemble_name (FILE, LABEL); \ + fputs (SIZE == 8 ? "@rel64" : "@rel", FILE); \ + } while (0) +#endif + /* The Solaris assembler wants a .local for non-exported aliases. */ #define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET) \ do { \ @@ -148,6 +179,20 @@ along with GCC; see the file COPYING3. If not see while (0) #endif /* !USE_GAS */ +/* As in sparc/sol2.h, override the default from i386/x86-64.h to work + around Sun as TLS bug. */ +#undef ASM_OUTPUT_ALIGNED_COMMON +#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ + do \ + { \ + if (TARGET_SUN_TLS \ + && in_section \ + && ((in_section->common.flags & SECTION_TLS) == SECTION_TLS)) \ + switch_to_section (bss_section); \ + x86_elf_aligned_common (FILE, NAME, SIZE, ALIGN); \ + } \ + while (0) + /* Output a simple call for .init/.fini. */ #define ASM_OUTPUT_CALL(FILE, FN) \ do \ @@ -174,6 +219,14 @@ along with GCC; see the file COPYING3. If not see #define DTORS_SECTION_ASM_OP "\t.section\t.dtors, \"aw\"" #endif +#define USE_IX86_FRAME_POINTER 1 +#define USE_X86_64_FRAME_POINTER 1 + +#undef NO_PROFILE_COUNTERS + +#undef MCOUNT_NAME +#define MCOUNT_NAME "_mcount" + /* We do not need NT_VERSION notes. */ #undef X86_FILE_START_VERSION_DIRECTIVE #define X86_FILE_START_VERSION_DIRECTIVE false diff --git a/gcc/config/i386/t-sol2-64 b/gcc/config/i386/t-sol2 index 4e70f0b..4e70f0b 100644 --- a/gcc/config/i386/t-sol2-64 +++ b/gcc/config/i386/t-sol2 diff --git a/gcc/config/sol2-10.h b/gcc/config/sol2-10.h deleted file mode 100644 index 4488a40..0000000 --- a/gcc/config/sol2-10.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Operating system specific defines to be used when targeting GCC for any - Solaris 2 system starting from Solaris 10. - Copyright (C) 2006-2014 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -/* Solaris 10 has the float and long double forms of math functions. - We redefine this hook so the version from elfos.h header won't be used. */ -#undef TARGET_LIBC_HAS_FUNCTION -#define TARGET_LIBC_HAS_FUNCTION default_libc_has_function diff --git a/gcc/config/sol2-bi.h b/gcc/config/sol2-bi.h deleted file mode 100644 index fdb2a28..0000000 --- a/gcc/config/sol2-bi.h +++ /dev/null @@ -1,135 +0,0 @@ -/* Definitions of target machine for GCC, for bi-arch Solaris 2. - Copyright (C) 2011-2014 Free Software Foundation, Inc. - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License as published by the Free - Software Foundation; either version 3, or (at your option) any later - version. - - GCC is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - Under Section 7 of GPL version 3, you are granted additional - permissions described in the GCC Runtime Library Exception, version - 3.1, as published by the Free Software Foundation. - - You should have received a copy of the GNU General Public License and - a copy of the GCC Runtime Library Exception along with this program; - see the files COPYING3 and COPYING.RUNTIME respectively. If not, see - <http://www.gnu.org/licenses/>. */ - -/* wchar_t is called differently in <wchar.h> for 32 and 64-bit - compilations. This is called for by SCD 2.4.1, p. 6-83, Figure 6-65 - (32-bit) and p. 6P-10, Figure 6.38 (64-bit). */ - -#undef WCHAR_TYPE -#define WCHAR_TYPE (TARGET_64BIT ? "int" : "long int") - -#undef WCHAR_TYPE_SIZE -#define WCHAR_TYPE_SIZE 32 - -/* Same for wint_t. See SCD 2.4.1, p. 6-83, Figure 6-66 (32-bit). There's - no corresponding 64-bit definition, but this is what Solaris 8 - <iso/wchar_iso.h> uses. */ - -#undef WINT_TYPE -#define WINT_TYPE (TARGET_64BIT ? "int" : "long int") - -#undef WINT_TYPE_SIZE -#define WINT_TYPE_SIZE 32 - -#if DEFAULT_ARCH32_P -#define MULTILIB_DEFAULTS { "m32" } -#else -#define MULTILIB_DEFAULTS { "m64" } -#endif - -#if DEFAULT_ARCH32_P -#define DEF_ARCH32_SPEC(__str) "%{!m64:" __str "}" -#define DEF_ARCH64_SPEC(__str) "%{m64:" __str "}" -#else -#define DEF_ARCH32_SPEC(__str) "%{m32:" __str "}" -#define DEF_ARCH64_SPEC(__str) "%{!m32:" __str "}" -#endif - -#undef ASM_CPU_DEFAULT_SPEC -#define ASM_CPU_DEFAULT_SPEC \ -(DEFAULT_ARCH32_P ? "\ -%{m64:" ASM_CPU64_DEFAULT_SPEC "} \ -%{!m64:" ASM_CPU32_DEFAULT_SPEC "} \ -" : "\ -%{m32:" ASM_CPU32_DEFAULT_SPEC "} \ -%{!m32:" ASM_CPU64_DEFAULT_SPEC "} \ -") - -/* This should be the same as LINK_ARCH32_SPEC_BASE, except with - ARCH64_SUBDIR appended to the paths and /usr/ccs/lib is no longer - necessary. */ -#undef LINK_ARCH64_SPEC_BASE -#define LINK_ARCH64_SPEC_BASE \ - "%{G:-G} \ - %{YP,*} \ - %{R*} \ - %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp/" ARCH64_SUBDIR ":%R/lib/" ARCH64_SUBDIR ":%R/usr/lib/" ARCH64_SUBDIR "} \ - %{!p:%{!pg:-Y P,%R/lib/" ARCH64_SUBDIR ":%R/usr/lib/" ARCH64_SUBDIR "}}}" - -#undef LINK_ARCH64_SPEC -#ifndef USE_GLD -/* FIXME: Used to be SPARC-only. Not SPARC-specfic but for the model name! */ -#define LINK_ARCH64_SPEC \ - "%{mcmodel=medlow:-M /usr/lib/ld/" ARCH64_SUBDIR "/map.below4G} " \ - LINK_ARCH64_SPEC_BASE -#else -#define LINK_ARCH64_SPEC LINK_ARCH64_SPEC_BASE -#endif - -#ifdef USE_GLD -#if DEFAULT_ARCH32_P -#define ARCH_DEFAULT_EMULATION ARCH32_EMULATION -#else -#define ARCH_DEFAULT_EMULATION ARCH64_EMULATION -#endif -#define TARGET_LD_EMULATION "%{m32:-m " ARCH32_EMULATION "}" \ - "%{m64:-m " ARCH64_EMULATION "}" \ - "%{!m32:%{!m64:-m " ARCH_DEFAULT_EMULATION "}} " -#else -#define TARGET_LD_EMULATION "" -#endif - -#undef LINK_ARCH_SPEC -#if DISABLE_MULTILIB -#if DEFAULT_ARCH32_P -#define LINK_ARCH_SPEC TARGET_LD_EMULATION " \ -%{m32:%(link_arch32)} \ -%{m64:%edoes not support multilib} \ -%{!m32:%{!m64:%(link_arch_default)}} \ -" -#else -#define LINK_ARCH_SPEC TARGET_LD_EMULATION " \ -%{m32:%edoes not support multilib} \ -%{m64:%(link_arch64)} \ -%{!m32:%{!m64:%(link_arch_default)}} \ -" -#endif -#else -#define LINK_ARCH_SPEC TARGET_LD_EMULATION " \ -%{m32:%(link_arch32)} \ -%{m64:%(link_arch64)} \ -%{!m32:%{!m64:%(link_arch_default)}}" -#endif - -#define LINK_ARCH_DEFAULT_SPEC \ -(DEFAULT_ARCH32_P ? LINK_ARCH32_SPEC : LINK_ARCH64_SPEC) - -#undef SUBTARGET_EXTRA_SPECS -#define SUBTARGET_EXTRA_SPECS \ - { "startfile_arch", STARTFILE_ARCH_SPEC }, \ - { "link_arch32", LINK_ARCH32_SPEC }, \ - { "link_arch64", LINK_ARCH64_SPEC }, \ - { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \ - { "link_arch", LINK_ARCH_SPEC }, \ - SUBTARGET_CPU_EXTRA_SPECS diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h index a21c953..d88de37 100644 --- a/gcc/config/sol2.h +++ b/gcc/config/sol2.h @@ -21,20 +21,25 @@ along with GCC; see the file COPYING3. If not see /* We are compiling for Solaris 2 now. */ #define TARGET_SOLARIS 1 -/* Solaris 2 (at least as of 2.5.1) uses a 32-bit wchar_t. */ +/* wchar_t is called differently in <wchar.h> for 32 and 64-bit + compilations. This is called for by SCD 2.4.1, p. 6-83, Figure 6-65 + (32-bit) and p. 6P-10, Figure 6.38 (64-bit). */ + #undef WCHAR_TYPE -#define WCHAR_TYPE "long int" +#define WCHAR_TYPE (TARGET_64BIT ? "int" : "long int") #undef WCHAR_TYPE_SIZE -#define WCHAR_TYPE_SIZE BITS_PER_WORD +#define WCHAR_TYPE_SIZE 32 + +/* Same for wint_t. See SCD 2.4.1, p. 6-83, Figure 6-66 (32-bit). There's + no corresponding 64-bit definition, but this is what Solaris 8 + <iso/wchar_iso.h> uses. */ -/* Solaris 2 uses a wint_t different from the default. This is required - by the SCD 2.4.1, p. 6-83, Figure 6-66. */ -#undef WINT_TYPE -#define WINT_TYPE "long int" +#undef WINT_TYPE +#define WINT_TYPE (TARGET_64BIT ? "int" : "long int") -#undef WINT_TYPE_SIZE -#define WINT_TYPE_SIZE BITS_PER_WORD +#undef WINT_TYPE_SIZE +#define WINT_TYPE_SIZE 32 #define SIG_ATOMIC_TYPE "int" @@ -103,6 +108,19 @@ along with GCC; see the file COPYING3. If not see solaris_override_options (); \ } while (0) +#if DEFAULT_ARCH32_P +#define MULTILIB_DEFAULTS { "m32" } +#else +#define MULTILIB_DEFAULTS { "m64" } +#endif + +#if DEFAULT_ARCH32_P +#define DEF_ARCH32_SPEC(__str) "%{!m64:" __str "}" +#define DEF_ARCH64_SPEC(__str) "%{m64:" __str "}" +#else +#define DEF_ARCH32_SPEC(__str) "%{m32:" __str "}" +#define DEF_ARCH64_SPEC(__str) "%{!m32:" __str "}" +#endif /* It's safe to pass -s always, even if -g is not used. Those options are handled by both Sun as and GNU as. */ @@ -111,6 +129,16 @@ along with GCC; see the file COPYING3. If not see #define ASM_PIC_SPEC " %{fpic|fpie|fPIC|fPIE:-K PIC}" +#undef ASM_CPU_DEFAULT_SPEC +#define ASM_CPU_DEFAULT_SPEC \ +(DEFAULT_ARCH32_P ? "\ +%{m64:" ASM_CPU64_DEFAULT_SPEC "} \ +%{!m64:" ASM_CPU32_DEFAULT_SPEC "} \ +" : "\ +%{m32:" ASM_CPU32_DEFAULT_SPEC "} \ +%{!m32:" ASM_CPU64_DEFAULT_SPEC "} \ +") + #undef LIB_SPEC #define LIB_SPEC \ "%{!symbolic:\ @@ -120,17 +148,11 @@ along with GCC; see the file COPYING3. If not see #ifndef CROSS_DIRECTORY_STRUCTURE #undef MD_EXEC_PREFIX #define MD_EXEC_PREFIX "/usr/ccs/bin/" - -#undef MD_STARTFILE_PREFIX -#define MD_STARTFILE_PREFIX "/usr/ccs/lib/" #endif -#undef STARTFILE_ARCH32_SPEC -#define STARTFILE_ARCH32_SPEC "%{ansi:values-Xc.o%s} \ - %{!ansi:values-Xa.o%s}" - #undef STARTFILE_ARCH_SPEC -#define STARTFILE_ARCH_SPEC STARTFILE_ARCH32_SPEC +#define STARTFILE_ARCH_SPEC "%{ansi:values-Xc.o%s} \ + %{!ansi:values-Xa.o%s}" /* We don't use the standard svr4 STARTFILE_SPEC because it's wrong for us. */ #undef STARTFILE_SPEC @@ -153,14 +175,78 @@ along with GCC; see the file COPYING3. If not see "%{G:-G} \ %{YP,*} \ %{R*} \ - %{!YP,*:%{p|pg:-Y P,%R/usr/ccs/lib/libp:%R/usr/lib/libp:%R/usr/ccs/lib:%R/lib:%R/usr/lib} \ - %{!p:%{!pg:-Y P,%R/usr/ccs/lib:%R/lib:%R/usr/lib}}}" + %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp%R/lib:%R/usr/lib} \ + %{!p:%{!pg:-Y P,%R/lib:%R/usr/lib}}}" #undef LINK_ARCH32_SPEC #define LINK_ARCH32_SPEC LINK_ARCH32_SPEC_BASE +/* This should be the same as LINK_ARCH32_SPEC_BASE, except with + ARCH64_SUBDIR appended to the paths. */ +#undef LINK_ARCH64_SPEC_BASE +#define LINK_ARCH64_SPEC_BASE \ + "%{G:-G} \ + %{YP,*} \ + %{R*} \ + %{!YP,*:%{p|pg:-Y P,%R/usr/lib/libp/" ARCH64_SUBDIR ":%R/lib/" ARCH64_SUBDIR ":%R/usr/lib/" ARCH64_SUBDIR "} \ + %{!p:%{!pg:-Y P,%R/lib/" ARCH64_SUBDIR ":%R/usr/lib/" ARCH64_SUBDIR "}}}" + +#undef LINK_ARCH64_SPEC +#ifndef USE_GLD +/* FIXME: Used to be SPARC-only. Not SPARC-specfic but for the model name! */ +#define LINK_ARCH64_SPEC \ + "%{mcmodel=medlow:-M /usr/lib/ld/" ARCH64_SUBDIR "/map.below4G} " \ + LINK_ARCH64_SPEC_BASE +#else +#define LINK_ARCH64_SPEC LINK_ARCH64_SPEC_BASE +#endif + +#ifdef USE_GLD +#if DEFAULT_ARCH32_P +#define ARCH_DEFAULT_EMULATION ARCH32_EMULATION +#else +#define ARCH_DEFAULT_EMULATION ARCH64_EMULATION +#endif +#define TARGET_LD_EMULATION "%{m32:-m " ARCH32_EMULATION "}" \ + "%{m64:-m " ARCH64_EMULATION "}" \ + "%{!m32:%{!m64:-m " ARCH_DEFAULT_EMULATION "}} " +#else +#define TARGET_LD_EMULATION "" +#endif + #undef LINK_ARCH_SPEC -#define LINK_ARCH_SPEC LINK_ARCH32_SPEC +#if DISABLE_MULTILIB +#if DEFAULT_ARCH32_P +#define LINK_ARCH_SPEC TARGET_LD_EMULATION " \ +%{m32:%(link_arch32)} \ +%{m64:%edoes not support multilib} \ +%{!m32:%{!m64:%(link_arch_default)}} \ +" +#else +#define LINK_ARCH_SPEC TARGET_LD_EMULATION " \ +%{m32:%edoes not support multilib} \ +%{m64:%(link_arch64)} \ +%{!m32:%{!m64:%(link_arch_default)}} \ +" +#endif +#else +#define LINK_ARCH_SPEC TARGET_LD_EMULATION " \ +%{m32:%(link_arch32)} \ +%{m64:%(link_arch64)} \ +%{!m32:%{!m64:%(link_arch_default)}}" +#endif + +#define LINK_ARCH_DEFAULT_SPEC \ +(DEFAULT_ARCH32_P ? LINK_ARCH32_SPEC : LINK_ARCH64_SPEC) + +#undef SUBTARGET_EXTRA_SPECS +#define SUBTARGET_EXTRA_SPECS \ + { "startfile_arch", STARTFILE_ARCH_SPEC }, \ + { "link_arch32", LINK_ARCH32_SPEC }, \ + { "link_arch64", LINK_ARCH64_SPEC }, \ + { "link_arch_default", LINK_ARCH_DEFAULT_SPEC }, \ + { "link_arch", LINK_ARCH_SPEC }, \ + SUBTARGET_CPU_EXTRA_SPECS /* C++11 programs need -lrt for nanosleep. */ #define TIME_LIBRARY "rt" @@ -235,7 +321,9 @@ along with GCC; see the file COPYING3. If not see #define TARGET_CXX_DECL_MANGLING_CONTEXT solaris_cxx_decl_mangling_context /* Solaris/x86 as and gas support unquoted section names. */ +#ifndef SECTION_NAME_FORMAT #define SECTION_NAME_FORMAT "%s" +#endif /* This is how to declare the size of a function. For Solaris, we output any .init or .fini entries here. */ @@ -249,23 +337,6 @@ along with GCC; see the file COPYING3. If not see } \ while (0) -/* Solaris as has a bug: a .common directive in .tbss or .tdata section - behaves as .tls_common rather than normal non-TLS .common. */ -#undef ASM_OUTPUT_ALIGNED_COMMON -#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ - do \ - { \ - if (TARGET_SUN_TLS \ - && in_section \ - && ((in_section->common.flags & SECTION_TLS) == SECTION_TLS)) \ - switch_to_section (bss_section); \ - fprintf ((FILE), "%s", COMMON_ASM_OP); \ - assemble_name ((FILE), (NAME)); \ - fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", \ - (SIZE), (ALIGN) / BITS_PER_UNIT); \ - } \ - while (0) - #ifndef USE_GAS #undef TARGET_ASM_ASSEMBLE_VISIBILITY #define TARGET_ASM_ASSEMBLE_VISIBILITY solaris_assemble_visibility @@ -291,8 +362,10 @@ along with GCC; see the file COPYING3. If not see #define TARGET_POSIX_IO +/* Solaris 10 has the float and long double forms of math functions. + We redefine this hook so the version from elfos.h header won't be used. */ #undef TARGET_LIBC_HAS_FUNCTION -#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function +#define TARGET_LIBC_HAS_FUNCTION default_libc_has_function extern GTY(()) tree solaris_pending_aligns; extern GTY(()) tree solaris_pending_inits; diff --git a/gcc/config/sparc/sol2.h b/gcc/config/sparc/sol2.h index b50a937..2fcdc85 100644 --- a/gcc/config/sparc/sol2.h +++ b/gcc/config/sparc/sol2.h @@ -109,8 +109,6 @@ along with GCC; see the file COPYING3. If not see #define CPP_CPU64_DEFAULT_SPEC "" #undef ASM_CPU32_DEFAULT_SPEC #define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plus" -#undef ASM_CPU_DEFAULT_SPEC -#define ASM_CPU_DEFAULT_SPEC ASM_CPU32_DEFAULT_SPEC #endif #if TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc @@ -120,8 +118,6 @@ along with GCC; see the file COPYING3. If not see #define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plusa" #undef ASM_CPU64_DEFAULT_SPEC #define ASM_CPU64_DEFAULT_SPEC "-xarch=v9a" -#undef ASM_CPU_DEFAULT_SPEC -#define ASM_CPU_DEFAULT_SPEC ASM_CPU32_DEFAULT_SPEC #endif #if TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc3 @@ -131,8 +127,6 @@ along with GCC; see the file COPYING3. If not see #define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plusb" #undef ASM_CPU64_DEFAULT_SPEC #define ASM_CPU64_DEFAULT_SPEC "-xarch=v9b" -#undef ASM_CPU_DEFAULT_SPEC -#define ASM_CPU_DEFAULT_SPEC ASM_CPU32_DEFAULT_SPEC #endif #if TARGET_CPU_DEFAULT == TARGET_CPU_niagara @@ -142,8 +136,6 @@ along with GCC; see the file COPYING3. If not see #define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plusb" #undef ASM_CPU64_DEFAULT_SPEC #define ASM_CPU64_DEFAULT_SPEC "-xarch=v9b" -#undef ASM_CPU_DEFAULT_SPEC -#define ASM_CPU_DEFAULT_SPEC ASM_CPU32_DEFAULT_SPEC #endif #if TARGET_CPU_DEFAULT == TARGET_CPU_niagara2 @@ -153,8 +145,6 @@ along with GCC; see the file COPYING3. If not see #define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plusb" #undef ASM_CPU64_DEFAULT_SPEC #define ASM_CPU64_DEFAULT_SPEC "-xarch=v9b" -#undef ASM_CPU_DEFAULT_SPEC -#define ASM_CPU_DEFAULT_SPEC ASM_CPU32_DEFAULT_SPEC #endif #if TARGET_CPU_DEFAULT == TARGET_CPU_niagara3 @@ -164,8 +154,6 @@ along with GCC; see the file COPYING3. If not see #define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plus" AS_NIAGARA3_FLAG #undef ASM_CPU64_DEFAULT_SPEC #define ASM_CPU64_DEFAULT_SPEC "-xarch=v9" AS_NIAGARA3_FLAG -#undef ASM_CPU_DEFAULT_SPEC -#define ASM_CPU_DEFAULT_SPEC ASM_CPU32_DEFAULT_SPEC #endif #if TARGET_CPU_DEFAULT == TARGET_CPU_niagara4 @@ -175,8 +163,6 @@ along with GCC; see the file COPYING3. If not see #define ASM_CPU32_DEFAULT_SPEC AS_SPARC32_FLAG AS_NIAGARA4_FLAG #undef ASM_CPU64_DEFAULT_SPEC #define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG AS_NIAGARA4_FLAG -#undef ASM_CPU_DEFAULT_SPEC -#define ASM_CPU_DEFAULT_SPEC ASM_CPU32_DEFAULT_SPEC #endif #undef CPP_CPU_SPEC @@ -361,6 +347,23 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); } \ while (0) +/* Solaris as has a bug: a .common directive in .tbss or .tdata section + behaves as .tls_common rather than normal non-TLS .common. */ +#undef ASM_OUTPUT_ALIGNED_COMMON +#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ + do \ + { \ + if (TARGET_SUN_TLS \ + && in_section \ + && ((in_section->common.flags & SECTION_TLS) == SECTION_TLS)) \ + switch_to_section (bss_section); \ + fprintf ((FILE), "%s", COMMON_ASM_OP); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ","HOST_WIDE_INT_PRINT_UNSIGNED",%u\n", \ + (SIZE), (ALIGN) / BITS_PER_UNIT); \ + } \ + while (0) + #ifndef USE_GAS /* This is how to output an assembler line that says to advance the location counter to a multiple of 2**LOG bytes using the @@ -376,7 +379,6 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); /* Sun as requires doublequoted section names on SPARC. While GNU as supports that, too, we prefer the standard variant. */ -#undef SECTION_NAME_FORMAT #define SECTION_NAME_FORMAT "\"%s\"" #endif /* !USE_GAS */ diff --git a/gcc/config/sparc/t-sol2-64 b/gcc/config/sparc/t-sol2 index ec7e4eb..ec7e4eb 100644 --- a/gcc/config/sparc/t-sol2-64 +++ b/gcc/config/sparc/t-sol2 |