From 8269de5462d7c05231a3aab0f5ae337aa4bfa364 Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Wed, 27 Mar 2013 21:54:01 +0100 Subject: [PATCH] cygwin-stdint.h: Add support for cygwin x64 target. * config/i386/cygwin-stdint.h: Add support for cygwin x64 target. * config/i386/t-cygwin-w64: New file. * config/i386/cygwin-w64.h: New file. * config/i386/cygwin.h (EXTRA_OS_CPP_BUILTINS): Extend and add support for x64-cygwin target. (CPP_SPEC): Likewise. (CXX_WRAP_SPEC_LIST): Undefine before define. (LIBGCJ_SONAME): Use 15 as version. From-SVN: r197168 --- gcc/ChangeLog | 11 +++++ gcc/config/i386/cygwin-stdint.h | 34 +++++++++++++- gcc/config/i386/cygwin-w64.h | 83 +++++++++++++++++++++++++++++++++ gcc/config/i386/cygwin.h | 15 ++++-- gcc/config/i386/t-cygwin-w64 | 3 ++ 5 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 gcc/config/i386/cygwin-w64.h create mode 100644 gcc/config/i386/t-cygwin-w64 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 26d1be8b1eb..e3998013587 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2013-03-27 Kai Tietz + + * config/i386/cygwin-stdint.h: Add support for cygwin x64 target. + * config/i386/t-cygwin-w64: New file. + * config/i386/cygwin-w64.h: New file. + * config/i386/cygwin.h (EXTRA_OS_CPP_BUILTINS): Extend + and add support for x64-cygwin target. + (CPP_SPEC): Likewise. + (CXX_WRAP_SPEC_LIST): Undefine before define. + (LIBGCJ_SONAME): Use 15 as version. + 2013-03-27 Richard Biener PR tree-optimization/56716 diff --git a/gcc/config/i386/cygwin-stdint.h b/gcc/config/i386/cygwin-stdint.h index f8c04a8a15b..2dc207b5e45 100644 --- a/gcc/config/i386/cygwin-stdint.h +++ b/gcc/config/i386/cygwin-stdint.h @@ -24,39 +24,71 @@ along with GCC; see the file COPYING3. If not see #define INT8_TYPE "signed char" #define INT16_TYPE "short int" #define INT32_TYPE "int" +#ifdef __x86_64__ +#define INT64_TYPE "long int" +#else #define INT64_TYPE "long long int" +#endif #define UINT8_TYPE "unsigned char" #define UINT16_TYPE "short unsigned int" #define UINT32_TYPE "unsigned int" +#ifdef __x86_64__ +#define UINT64_TYPE "long unsigned int" +#else #define UINT64_TYPE "long long unsigned int" +#endif /* Minimum-width integer types */ #define INT_LEAST8_TYPE "signed char" #define INT_LEAST16_TYPE "short int" #define INT_LEAST32_TYPE "int" +#ifdef __x86_64__ +#define INT_LEAST64_TYPE "long int" +#else #define INT_LEAST64_TYPE "long long int" +#endif #define UINT_LEAST8_TYPE "unsigned char" #define UINT_LEAST16_TYPE "short unsigned int" #define UINT_LEAST32_TYPE "unsigned int" +#ifdef __x86_64__ +#define UINT_LEAST64_TYPE "long unsigned int" +#else #define UINT_LEAST64_TYPE "long long unsigned int" +#endif /* Fastest minimum-width integer types */ #define INT_FAST8_TYPE "signed char" +#ifdef __x86_64__ +#define INT_FAST16_TYPE "long int" +#define INT_FAST32_TYPE "long int" +#define INT_FAST64_TYPE "long int" +#else #define INT_FAST16_TYPE "int" #define INT_FAST32_TYPE "int" #define INT_FAST64_TYPE "long long int" +#endif #define UINT_FAST8_TYPE "unsigned char" +#ifdef __x86_64__ +#define UINT_FAST16_TYPE "long unsigned int" +#define UINT_FAST32_TYPE "long unsigned int" +#define UINT_FAST64_TYPE "long unsigned int" +#else #define UINT_FAST16_TYPE "unsigned int" #define UINT_FAST32_TYPE "unsigned int" #define UINT_FAST64_TYPE "long long unsigned int" +#endif /* Integer types capable of holding object pointers */ +#ifdef __x86_64__ +#define INTPTR_TYPE "long int" +#define UINTPTR_TYPE "long unsigned int" +#else #define INTPTR_TYPE "int" #define UINTPTR_TYPE "unsigned int" - +#endif diff --git a/gcc/config/i386/cygwin-w64.h b/gcc/config/i386/cygwin-w64.h new file mode 100644 index 00000000000..e39ace98ea0 --- /dev/null +++ b/gcc/config/i386/cygwin-w64.h @@ -0,0 +1,83 @@ +/* Operating system specific defines to be used when targeting GCC for + hosting on Windows 32/64 via Cygwin runtime, using GNU tools and + the Windows API Library. + Copyright (C) 2013 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 +. */ + +/* Enable multilib. */ + +#undef ASM_SPEC +#define ASM_SPEC "%{m32:--32} %{m64:--64}" + +/* To implement C++ function replacement we always wrap the cxx + malloc-like operators. See N2800 #17.6.4.6 [replacement.functions] */ +#undef CXX_WRAP_SPEC_LIST +#define CXX_WRAP_SPEC_LIST " \ + --wrap _Znwm \ + --wrap _Znam \ + --wrap _ZdlPv \ + --wrap _ZdaPv \ + --wrap _ZnwmRKSt9nothrow_t \ + --wrap _ZnamRKSt9nothrow_t \ + --wrap _ZdlPvRKSt9nothrow_t \ + --wrap _ZdaPvRKSt9nothrow_t \ +" + +#undef SPEC_32 +#undef SPEC_64 +#define SPEC_32 "m32" +#define SPEC_64 "!m32" + +#undef SUB_LINK_ENTRY32 +#undef SUB_LINK_ENTRY64 +#define SUB_LINK_ENTRY32 "-e __cygwin_dll_entry@12" +#define SUB_LINK_ENTRY64 "-e _cygwin_dll_entry" + +#undef SUB_LINK_SPEC +#undef SUB_LINK_ENTRY +#define SUB_LINK_SPEC "%{" SPEC_64 ":-m i386pep} %{" SPEC_32 ":-m i386pe}" +#define SUB_LINK_ENTRY "%{" SPEC_64 ":" SUB_LINK_ENTRY64 "} %{" SPEC_32 ":" SUB_LINK_ENTRY32 "}" + +#undef MULTILIB_DEFAULTS +#define MULTILIB_DEFAULTS { "m64" } + +#undef LINK_SPEC +#define LINK_SPEC SUB_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: " SUB_LINK_ENTRY " --enable-auto-image-base} \ + %(shared_libgcc_undefs) \ + --dll-search-prefix=cyg -tsaware" + +/* Cygwin64 will have a 64-bit long type. */ +#undef LONG_TYPE_SIZE +#undef LONG_TYPE_SIZE +#define LONG_TYPE_SIZE (TARGET_64BIT ? 64 : 32) + +/* Override default "long long unsigned int" from cygming.h. */ +#undef SIZE_TYPE +#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int") +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") + +#undef LIBGCC_SONAME +#define LIBGCC_SONAME "cyggcc_s-seh-1.dll" diff --git a/gcc/config/i386/cygwin.h b/gcc/config/i386/cygwin.h index 7f92ada9f7c..940b113a7c4 100644 --- a/gcc/config/i386/cygwin.h +++ b/gcc/config/i386/cygwin.h @@ -18,11 +18,20 @@ You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see . */ -#define EXTRA_OS_CPP_BUILTINS() /* Nothing. */ +#define EXTRA_OS_CPP_BUILTINS() \ + do \ + { \ + builtin_define ("__CYGWIN__"); \ + if (!TARGET_CYGWIN64) \ + builtin_define ("__CYGWIN32__"); \ + builtin_define ("__unix__"); \ + builtin_define ("__unix"); \ + } \ + while (0) #undef CPP_SPEC #define CPP_SPEC "%(cpp_cpu) %{posix:-D_POSIX_SOURCE} \ - -D__CYGWIN32__ -D__CYGWIN__ %{!ansi:-Dunix} -D__unix__ -D__unix \ + %{!ansi:-Dunix} \ %{mwin32:-DWIN32 -D_WIN32 -D__WIN32 -D__WIN32__ %{!ansi:-DWINNT}} \ %{!nostdinc:%{!mno-win32:-idirafter ../include/w32api%s -idirafter ../../include/w32api%s}}\ " @@ -133,5 +142,5 @@ along with GCC; see the file COPYING3. If not see #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*/ "-13.dll" +#define LIBGCJ_SONAME "cyggcj" /*LIBGCC_EH_EXTN*/ "-15.dll" diff --git a/gcc/config/i386/t-cygwin-w64 b/gcc/config/i386/t-cygwin-w64 new file mode 100644 index 00000000000..01968fd88c3 --- /dev/null +++ b/gcc/config/i386/t-cygwin-w64 @@ -0,0 +1,3 @@ +MULTILIB_OPTIONS = m64/m32 +MULTILIB_DIRNAMES = 64 +MULTILIB_OSDIRNAMES = ../lib ../lib32