X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=blobdiff_plain;f=gcc%2Fconfig%2Fsol2.h;h=98e54e6a92c734aacba67d9b81041a88bbc4d119;hp=1ff6308329b3fef6c7b9db7357e87940ff28598c;hb=57587f17a68e9094852f9cc91297a76a219f7359;hpb=146c1b4f3b845afd53dfd6595f550000b25325c5 diff --git a/gcc/config/sol2.h b/gcc/config/sol2.h index 1ff6308329b..98e54e6a92c 100644 --- a/gcc/config/sol2.h +++ b/gcc/config/sol2.h @@ -1,12 +1,13 @@ /* Operating system specific defines to be used when targeting GCC for any Solaris 2 system. - Copyright 2002, 2003 Free Software Foundation, Inc. + Copyright 2002, 2003, 2004, 2007, 2008, 2009, 2010 + 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 2, or (at your option) +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, @@ -15,9 +16,8 @@ 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 COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +along with GCC; see the file COPYING3. If not see +. */ /* We use stabs-in-elf for debugging, because that is what the native toolchain uses. */ @@ -39,7 +39,39 @@ Boston, MA 02111-1307, USA. */ #undef WINT_TYPE_SIZE #define WINT_TYPE_SIZE BITS_PER_WORD -#define TARGET_HANDLE_PRAGMA_REDEFINE_EXTNAME 1 +#define SIG_ATOMIC_TYPE "int" + +/* ??? This definition of int8_t follows the system header but does + not conform to C99. Likewise int_fast8_t, int_least8_t. */ +#define INT8_TYPE "char" +#define INT16_TYPE "short int" +#define INT32_TYPE "int" +#define INT64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") +#define UINT8_TYPE "unsigned char" +#define UINT16_TYPE "short unsigned int" +#define UINT32_TYPE "unsigned int" +#define UINT64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") + +#define INT_LEAST8_TYPE "char" +#define INT_LEAST16_TYPE "short int" +#define INT_LEAST32_TYPE "int" +#define INT_LEAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") +#define UINT_LEAST8_TYPE "unsigned char" +#define UINT_LEAST16_TYPE "short unsigned int" +#define UINT_LEAST32_TYPE "unsigned int" +#define UINT_LEAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") + +#define INT_FAST8_TYPE "char" +#define INT_FAST16_TYPE "int" +#define INT_FAST32_TYPE "int" +#define INT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "long long int") +#define UINT_FAST8_TYPE "unsigned char" +#define UINT_FAST16_TYPE "unsigned int" +#define UINT_FAST32_TYPE "unsigned int" +#define UINT_FAST64_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "long long unsigned int") + +#define INTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "int") +#define UINTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "unsigned int") /* ??? Note: in order for -compat-bsd to work fully, we must somehow arrange to fixincludes /usr/ucbinclude @@ -47,8 +79,8 @@ Boston, MA 02111-1307, USA. */ #undef CPP_SUBTARGET_SPEC #define CPP_SUBTARGET_SPEC "\ -%{pthreads:-D_REENTRANT -D_PTHREADS} \ -%{!pthreads:%{threads:-D_REENTRANT -D_SOLARIS_THREADS}} \ +%{pthreads|pthread:-D_REENTRANT -D_PTHREADS} \ +%{!pthreads:%{!pthread:%{threads:-D_REENTRANT -D_SOLARIS_THREADS}}} \ %{compat-bsd:-iwithprefixbefore ucbinclude -I/usr/ucbinclude} \ " @@ -93,8 +125,8 @@ Boston, MA 02111-1307, USA. */ "%{compat-bsd:-lucb -lsocket -lnsl -lelf -laio} \ %{!shared:\ %{!symbolic:\ - %{pthreads:-lpthread} \ - %{!pthreads:%{threads:-lthread}} \ + %{pthreads|pthread:-lpthread} \ + %{!pthreads:%{!pthread:%{threads:-lthread}}} \ %{p|pg:-ldl} -lc}}" #undef ENDFILE_SPEC @@ -124,12 +156,12 @@ Boston, MA 02111-1307, USA. */ %{YP,*} \ %{R*} \ %{compat-bsd: \ - %{!YP,*:%{p|pg:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ - %{!p:%{!pg:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}}} \ - -R /usr/ucblib} \ + %{!YP,*:%{p|pg:-Y P,%R/usr/ucblib:%R/usr/ccs/lib/libp:%R/usr/lib/libp:%R/usr/ccs/lib:%R/usr/lib} \ + %{!p:%{!pg:-Y P,%R/usr/ucblib:%R/usr/ccs/lib:%R/usr/lib}}} \ + -R %R/usr/ucblib} \ %{!compat-bsd: \ - %{!YP,*:%{p|pg:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ - %{!p:%{!pg:-Y P,/usr/ccs/lib:/usr/lib}}}}" + %{!YP,*:%{p|pg:-Y P,%R/usr/ccs/lib/libp:%R/usr/lib/libp:%R/usr/ccs/lib:%R/usr/lib} \ + %{!p:%{!pg:-Y P,%R/usr/ccs/lib:%R/usr/lib}}}}" #undef LINK_ARCH32_SPEC #define LINK_ARCH32_SPEC LINK_ARCH32_SPEC_BASE @@ -141,13 +173,23 @@ Boston, MA 02111-1307, USA. */ #undef LINK_SPEC #define LINK_SPEC \ "%{h*} %{v:-V} \ - %{b} %{Wl,*:%*} \ + %{b} \ + %{!shared:%{!static:%{rdynamic: " RDYNAMIC_SPEC "}}} \ %{static:-dn -Bstatic} \ %{shared:-G -dy %{!mimpure-text:-z text}} \ %{symbolic:-Bsymbolic -G -dy -z text} \ %(link_arch) \ %{Qy:} %{!Qn:-Qy}" +/* With Sun ld, -rdynamic is a no-op. */ +#define RDYNAMIC_SPEC "" + +/* The Solaris linker doesn't understand constructor priorities. (The + GNU linker does support constructor priorities, so GNU ld + configuration files for Solaris override this setting.) */ +#undef SUPPORTS_INIT_PRIORITY +#define SUPPORTS_INIT_PRIORITY 0 + /* This defines which switch letters take arguments. It is as in svr4.h but with -R added. */ #undef SWITCH_TAKES_ARG @@ -162,9 +204,6 @@ Boston, MA 02111-1307, USA. */ /* * Attempt to turn on access permissions for the stack. * - * This code must be defined when compiling gcc but not when compiling - * libgcc2.a, unless we're generating code for 64-bit SPARC - * * _SC_STACK_PROT is only defined for post 2.6, but we want this code * to run always. 2.6 can change the stack protection but has no way to * query it. @@ -172,10 +211,10 @@ Boston, MA 02111-1307, USA. */ */ /* sys/mman.h is not present on some non-Solaris configurations - that use sol2.h, so TRANSFER_FROM_TRAMPOLINE must use a magic + that use sol2.h, so ENABLE_EXECUTE_STACK must use a magic number instead of the appropriate PROT_* flags. */ -#define TRANSFER_FROM_TRAMPOLINE \ +#define ENABLE_EXECUTE_STACK \ \ /* #define STACK_PROT_RWX (PROT_READ | PROT_WRITE | PROT_EXEC) */ \ \ @@ -208,3 +247,59 @@ __enable_execute_stack (void *addr) \ perror ("mprotect of trampoline code"); \ } \ } + +/* Support Solaris-specific format checking for cmn_err. */ +#define TARGET_N_FORMAT_TYPES 1 +#define TARGET_FORMAT_TYPES solaris_format_types + +/* #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 }, \ + { "fini", 0, 0, true, false, false, NULL } + +/* Solaris/x86 as and gas support the common ELF .section/.pushsection + syntax. */ +#define PUSHSECTION_FORMAT "\t.pushsection\t%s\n" + +/* This is how to declare the size of a function. For Solaris, we output + any .init or .fini entries here. */ +#undef ASM_DECLARE_FUNCTION_SIZE +#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ + do \ + { \ + if (!flag_inhibit_size_directive) \ + ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME); \ + solaris_output_init_fini (FILE, DECL); \ + } \ + while (0) + +/* Solaris 'as' has a bug: a .common directive in .tbss 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_BSS)) \ + == (SECTION_TLS | SECTION_BSS))) \ + 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 +#endif + +extern GTY(()) tree solaris_pending_aligns; +extern GTY(()) tree solaris_pending_inits; +extern GTY(()) tree solaris_pending_finis; + +/* Allow macro expansion in #pragma pack. */ +#define HANDLE_PRAGMA_PACK_WITH_EXPANSION