OSDN Git Service

Improve AGU stalls avoidance optimization.
[pf3gnuchains/gcc-fork.git] / gcc / config / i386 / cygwin.h
index 1af4880..cf17e1e 100644 (file)
@@ -1,7 +1,7 @@
 /* Operating system specific defines to be used when targeting GCC for
    hosting on Windows32, using a Unix style C library and tools.
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2007 Free Software Foundation, Inc.
+   2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -19,29 +19,24 @@ 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/>.  */
 
-#define TARGET_VERSION fprintf (stderr, " (x86 Cygwin)");
-
 #define EXTRA_OS_CPP_BUILTINS()  /* Nothing.  */
 
 #undef CPP_SPEC
 #define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} \
-  %{mno-win32:%{mno-cygwin: %emno-cygwin and mno-win32 are not compatible}} \
-  %{mno-cygwin:-D__MSVCRT__ -D__MINGW32__ %{!ansi:%{mthreads:-D_MT}}}\
-  %{!mno-cygwin:-D__CYGWIN32__ -D__CYGWIN__ %{!ansi:-Dunix} -D__unix__ -D__unix }\
-  %{mwin32|mno-cygwin:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}}\
-  %{!nostdinc:%{!mno-win32|mno-cygwin:-idirafter ../include/w32api%s -idirafter ../../include/w32api%s}}\
+  -D__CYGWIN32__ -D__CYGWIN__ %{!ansi:-Dunix} -D__unix__ -D__unix \
+  %{mwin32:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}} \
+  %{!nostdinc:%{!mno-win32:-idirafter ../include/w32api%s -idirafter ../../include/w32api%s}}\
 "
 
 #undef STARTFILE_SPEC
 #define STARTFILE_SPEC "\
-  %{shared|mdll: %{mno-cygwin:dllcrt2%O%s}}\
-  %{!shared: %{!mdll: %{!mno-cygwin:crt0%O%s} %{mno-cygwin:crt2%O%s}\
+  %{!shared: %{!mdll: crt0%O%s \
   %{pg:gcrt0%O%s}}}\
   crtbegin.o%s"
 
 #undef ENDFILE_SPEC
 #define ENDFILE_SPEC \
-  "%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}\
+  "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}\
    crtend.o%s"
 
 /* Normally, -lgcc is not needed since everything in it is in the DLL, but we
@@ -49,10 +44,24 @@ along with GCC; see the file COPYING3.  If not see
    GCC without making a new CYGWIN.DLL, so we leave it.  Profiling is handled
    by calling the init function from main.  */
 
-#undef LIBGCC_SPEC
-#define LIBGCC_SPEC \
-  "%{mno-cygwin: %{mthreads:-lmingwthrd} -lmingw32} -lgcc      \
-   %{mno-cygwin:-lmoldname -lmingwex -lmsvcrt}"
+#ifdef ENABLE_SHARED_LIBGCC
+#define SHARED_LIBGCC_SPEC " \
+ %{static|static-libgcc:-lgcc -lgcc_eh} \
+ %{!static: \
+   %{!static-libgcc: \
+     %{!shared: \
+       %{!shared-libgcc:-lgcc -lgcc_eh} \
+       %{shared-libgcc:-lgcc_s -lgcc} \
+      } \
+     %{shared:-lgcc_s -lgcc} \
+    } \
+  } "
+#else
+#define SHARED_LIBGCC_SPEC " -lgcc "
+#endif
+
+#undef REAL_LIBGCC_SPEC
+#define REAL_LIBGCC_SPEC SHARED_LIBGCC_SPEC
 
 /* We have to dynamic link to get to the system DLLs.  All of libc, libm and
    the Unix stuff is in cygwin.dll.  The import library is called
@@ -63,175 +72,50 @@ along with GCC; see the file COPYING3.  If not see
 #undef LIB_SPEC
 #define LIB_SPEC "\
   %{pg:-lgmon} \
-  %{!mno-cygwin:-lcygwin} \
-  %{mno-cygwin:%{mthreads:-lmingwthrd} -lmingw32} \
+  -lcygwin \
   %{mwindows:-lgdi32 -lcomdlg32} \
-  -luser32 -lkernel32 -ladvapi32 -lshell32"
-
-#define LINK_SPEC "\
-  %{mwindows:--subsystem windows} \
-  %{mconsole:--subsystem console} \
-  %{shared: %{mdll: %eshared and mdll are not compatible}} \
-  %{shared: --shared} %{mdll:--dll} \
-  %{static:-Bstatic} %{!static:-Bdynamic} \
-  %{shared|mdll: -e \
-    %{mno-cygwin:_DllMainCRTStartup@12} \
-    %{!mno-cygwin:__cygwin_dll_entry@12}}\
-  %{!mno-cygwin:--dll-search-prefix=cyg}"
-
-/* Allocate space for all of the machine-spec-specific stuff.
-   Allocate enough space for cygwin -> mingw32  munging plus
-   possible addition of "/mingw".  */
-
-#ifndef CYGWIN_MINGW_SUBDIR
-#define CYGWIN_MINGW_SUBDIR "/mingw"
-#endif
-#define CYGWIN_MINGW_SUBDIR_LEN (sizeof (CYGWIN_MINGW_SUBDIR) - 1)
-
-#ifdef GPLUSPLUS_INCLUDE_DIR
-char cygwin_gplusplus_include_dir[sizeof (GPLUSPLUS_INCLUDE_DIR) + 1
-                                 + (CYGWIN_MINGW_SUBDIR_LEN)]
-  = GPLUSPLUS_INCLUDE_DIR;
-#undef GPLUSPLUS_INCLUDE_DIR
-#define GPLUSPLUS_INCLUDE_DIR ((const char *) cygwin_gplusplus_include_dir)
-#ifndef GEN_CVT_ARRAY
-#define GEN_CVT_ARRAY
-#endif
-#endif
-
-#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
-char cygwin_gplusplus_tool_include_dir[sizeof (GPLUSPLUS_TOOL_INCLUDE_DIR) + 1
-                                      + CYGWIN_MINGW_SUBDIR_LEN]
-  = GPLUSPLUS_TOOL_INCLUDE_DIR;
-#undef GPLUSPLUS_TOOL_INCLUDE_DIR
-#define GPLUSPLUS_TOOL_INCLUDE_DIR ((const char *) cygwin_gplusplus_tool_include_dir)
-#ifndef GEN_CVT_ARRAY
-#define GEN_CVT_ARRAY
-#endif
-#endif
-
-#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
-char cygwin_gplusplus_backward_include_dir[sizeof (GPLUSPLUS_BACKWARD_INCLUDE_DIR)  + 1
-                                          + CYGWIN_MINGW_SUBDIR_LEN]
-  = GPLUSPLUS_BACKWARD_INCLUDE_DIR;
-#undef GPLUSPLUS_BACKWARD_INCLUDE_DIR
-#define GPLUSPLUS_BACKWARD_INCLUDE_DIR ((const char *) cygwin_gplusplus_backward_include_dir)
-#ifndef GEN_CVT_ARRAY
-#define GEN_CVT_ARRAY
-#endif
-#endif
-
-#ifdef LOCAL_INCLUDE_DIR
-char cygwin_local_include_dir[sizeof (LOCAL_INCLUDE_DIR)  + 1
-                             + CYGWIN_MINGW_SUBDIR_LEN]
-  = LOCAL_INCLUDE_DIR;
-#undef LOCAL_INCLUDE_DIR
-#define LOCAL_INCLUDE_DIR ((const char *) cygwin_local_include_dir)
-#ifndef GEN_CVT_ARRAY
-#define GEN_CVT_ARRAY
-#endif
-#endif
-
-#ifdef CROSS_INCLUDE_DIR
-char cygwin_cross_include_dir[sizeof (CROSS_INCLUDE_DIR) + 1
-                             + CYGWIN_MINGW_SUBDIR_LEN]
-  = CROSS_INCLUDE_DIR;
-#undef CROSS_INCLUDE_DIR
-#define CROSS_INCLUDE_DIR ((const char *) cygwin_cross_include_dir)
-#ifndef GEN_CVT_ARRAY
-#define GEN_CVT_ARRAY
-#endif
-#endif
+  -ladvapi32 -lshell32 -luser32 -lkernel32"
+
+/* To implement C++ function replacement we always wrap the cxx
+   malloc-like operators.  See N2800 #17.6.4.6 [replacement.functions] */
+#define CXX_WRAP_SPEC_LIST " \
+  --wrap _Znwj \
+  --wrap _Znaj \
+  --wrap _ZdlPv \
+  --wrap _ZdaPv \
+  --wrap _ZnwjRKSt9nothrow_t \
+  --wrap _ZnajRKSt9nothrow_t \
+  --wrap _ZdlPvRKSt9nothrow_t \
+  --wrap _ZdaPvRKSt9nothrow_t \
+"
 
-#ifdef TOOL_INCLUDE_DIR
-char cygwin_tool_include_dir[sizeof (TOOL_INCLUDE_DIR) + 1
-                            + CYGWIN_MINGW_SUBDIR_LEN]
-  = TOOL_INCLUDE_DIR;
-#undef TOOL_INCLUDE_DIR
-#define TOOL_INCLUDE_DIR ((const char *) cygwin_tool_include_dir)
-
-#ifndef CROSS_DIRECTORY_STRUCTURE
-#undef STANDARD_INCLUDE_DIR
-#define STANDARD_INCLUDE_DIR "/usr/include"
-char cygwin_standard_include_dir[sizeof (STANDARD_INCLUDE_DIR) + 1
-                                + CYGWIN_MINGW_SUBDIR_LEN]
-  = STANDARD_INCLUDE_DIR;
-#undef STANDARD_INCLUDE_DIR
-#define STANDARD_INCLUDE_DIR ((const char *) cygwin_standard_include_dir)
-#endif
+#if defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)
 
-#ifndef GEN_CVT_ARRAY
-#define GEN_CVT_ARRAY
-#endif
-#endif
-
-#ifndef GEN_CVT_ARRAY
-extern char *cvt_to_mingw[];
+#if USE_CYGWIN_LIBSTDCXX_WRAPPERS
+/* Default on, only explict -mno disables.  */
+#define CXX_WRAP_SPEC_OPT "!mno-use-libstdc-wrappers"
 #else
-char *cvt_to_mingw[] =
-  {
-#ifdef GPLUSPLUS_INCLUDE_DIR
-    cygwin_gplusplus_include_dir,
-#endif
-
-#ifdef GPLUSPLUS_TOOL_INCLUDE_DIR
-    cygwin_gplusplus_tool_include_dir,
+/* Default off, only explict -m enables.  */
+#define CXX_WRAP_SPEC_OPT "muse-libstdc-wrappers"
 #endif
 
-#ifdef GPLUSPLUS_BACKWARD_INCLUDE_DIR
-    cygwin_gplusplus_backward_include_dir,
-#endif
+#define CXX_WRAP_SPEC "%{" CXX_WRAP_SPEC_OPT ":" CXX_WRAP_SPEC_LIST "}"
 
-#ifdef LOCAL_INCLUDE_DIR
-    cygwin_local_include_dir,
-#endif
+#else /* !defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)  */
 
-#ifdef CROSS_INCLUDE_DIR
-    cygwin_cross_include_dir,
-#endif
+#define CXX_WRAP_SPEC ""
 
-#ifdef TOOL_INCLUDE_DIR
-    cygwin_tool_include_dir,
-#endif
-
-#ifdef STANDARD_INCLUDE_DIR
-    cygwin_standard_include_dir,
-#endif
+#endif /* ?defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS) */
 
-    NULL
-  };
-#undef GEN_CVT_ARRAY
-#endif /*GEN_CVT_ARRAY*/
-
-void mingw_scan (int, const char * const *, char **);
-#if 1
-#define GCC_DRIVER_HOST_INITIALIZATION \
-do \
-{ \
-  mingw_scan(argc, (const char * const *) argv, (char **) &spec_machine); \
-  } \
-while (0)
-#else
-#define GCC_DRIVER_HOST_INITIALIZATION \
-do \
-{ \
-  char *cprefix = concat (tooldir_base_prefix, spec_machine, \
-                         dir_separator_str, NULL); \
-  if (!IS_ABSOLUTE_PATH (cprefix)) \
-    cprefix = concat (standard_exec_prefix, spec_machine, dir_separator_str, \
-                     spec_version, dir_separator_str, tooldir_prefix, NULL); \
-  add_prefix (&exec_prefixes,\
-             concat (cprefix, "../../../../", spec_machine, "/bin/", NULL), \
-             "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); \
-  add_prefix (&exec_prefixes, cprefix, \
-             "BINUTILS", PREFIX_PRIORITY_LAST, 0, NULL); \
-  add_prefix (&startfile_prefixes,\
-             concat (standard_startfile_prefix, "w32api", NULL),\
-             "GCC", PREFIX_PRIORITY_LAST, 0, NULL);\
-  mingw_scan(argc, (const char * const *) argv, &spec_machine); \
-  } \
-while (0)
-#endif
+#define LINK_SPEC "\
+  %{mwindows:--subsystem windows} \
+  %{mconsole:--subsystem console} \
+  " CXX_WRAP_SPEC " \
+  %{shared: %{mdll: %eshared and mdll are not compatible}} \
+  %{shared: --shared} %{mdll:--dll} \
+  %{static:-Bstatic} %{!static:-Bdynamic} \
+  %{shared|mdll: --enable-auto-image-base -e __cygwin_dll_entry@12} \
+  --dll-search-prefix=cyg -tsaware"
 
 /* Binutils does not handle weak symbols from dlls correctly.  For now,
    do not use them unnecessarily in gthr-posix.h.  */
@@ -242,3 +126,15 @@ while (0)
    and the -pthread flag is not recognized.  */
 #undef GOMP_SELF_SPECS
 #define GOMP_SELF_SPECS ""
+
+/* This matches SHLIB_SONAME and SHLIB_SOVERSION in t-cygwin. */
+#if DWARF2_UNWIND_INFO
+#define LIBGCC_EH_EXTN ""
+#else
+#define LIBGCC_EH_EXTN "-sjlj"
+#endif
+#define LIBGCC_SONAME "cyggcc_s" LIBGCC_EH_EXTN "-1.dll"
+
+/* We should find a way to not have to update this manually.  */
+#define LIBGCJ_SONAME "cyggcj" /*LIBGCC_EH_EXTN*/ "-12.dll"
+