]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/config/sol2.h
sol2-c.c (solaris_register_pragmas): Use c_register_pragma_with_expansion.
[thirdparty/gcc.git] / gcc / config / sol2.h
index 1ff6308329b3fef6c7b9db7357e87940ff28598c..1aa6aa84f44d8151358818c01774f835b7552944 100644 (file)
@@ -1,6 +1,6 @@
 /* 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 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -72,6 +72,11 @@ Boston, MA 02111-1307, USA.  */
            builtin_define ("_LARGEFILE64_SOURCE=1");   \
            builtin_define ("__EXTENSIONS__");          \
          }                                             \
+       if (flag_pic)                                   \
+         {                                             \
+           builtin_define ("__PIC__");                 \
+           builtin_define ("__pic__");                 \
+         }                                             \
        TARGET_SUB_OS_CPP_BUILTINS();                   \
     } while (0)
 
@@ -148,6 +153,12 @@ Boston, MA 02111-1307, USA.  */
    %(link_arch) \
    %{Qy:} %{!Qn:-Qy}"
 
+/* 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 +173,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 +180,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 +216,35 @@ __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 }
+
+/* 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)
+
+/* Register the Solaris-specific #pragma directives.  */
+#define REGISTER_TARGET_PRAGMAS() solaris_register_pragmas ()
+
+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