diff gcc/config/s390/linux.h @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents f6334be47118
children 84e7813d76e9
line wrap: on
line diff
--- a/gcc/config/s390/linux.h	Sun Aug 21 07:07:55 2011 +0900
+++ b/gcc/config/s390/linux.h	Fri Oct 27 22:46:09 2017 +0900
@@ -1,6 +1,5 @@
 /* Definitions for Linux for S/390.
-   Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2010
-   Free Software Foundation, Inc.
+   Copyright (C) 1999-2017 Free Software Foundation, Inc.
    Contributed by Hartmut Penner (hpenner@de.ibm.com) and
                   Ulrich Weigand (uweigand@de.ibm.com).
 
@@ -23,22 +22,14 @@
 #ifndef _LINUX_H
 #define _LINUX_H
 
-/* Target specific version string.  */
-
-#ifdef DEFAULT_TARGET_64BIT
-#undef  TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (Linux for zSeries)");
-#else
-#undef  TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (Linux for S/390)");
-#endif
-
-
 /* Target specific type definitions.  */
 
-/* ??? Do we really want long as size_t on 31-bit?  */
+/* For 31 bit our size type differs from most other targets (where it
+   is "unsigned int").  The difference tends to cause trouble e.g.:
+   Glibc BZ #16712, GCC BZ #79358 but cannot be changed due to ABI
+   issues.  */
 #undef  SIZE_TYPE
-#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "long unsigned int")
+#define SIZE_TYPE "long unsigned int"
 #undef  PTRDIFF_TYPE
 #define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
 
@@ -53,15 +44,25 @@
 #define TARGET_OS_CPP_BUILTINS()		\
   do						\
     {						\
-      LINUX_TARGET_OS_CPP_BUILTINS();		\
+      GNU_USER_TARGET_OS_CPP_BUILTINS();	\
     }						\
   while (0)
 
 
 /* Target specific assembler settings.  */
-
+/* Rewrite -march=arch* options to the original CPU name in order to
+   make it work with older binutils.  */
 #undef  ASM_SPEC
-#define ASM_SPEC "%{m31&m64}%{mesa&mzarch}%{march=*}"
+#define ASM_SPEC					\
+  "%{m31&m64}%{mesa&mzarch}%{march=z*}"			\
+  "%{march=arch3:-march=g5}"				\
+  "%{march=arch5:-march=z900}"				\
+  "%{march=arch6:-march=z990}"				\
+  "%{march=arch7:-march=z9-ec}"				\
+  "%{march=arch8:-march=z10}"				\
+  "%{march=arch9:-march=z196}"				\
+  "%{march=arch10:-march=zEC12}"			\
+  "%{march=arch11:-march=z13}"
 
 
 /* Target specific linker settings.  */
@@ -81,17 +82,16 @@
    %{shared:-shared} \
    %{!shared: \
       %{static:-static} \
-      %{!static: \
+      %{!static:%{!static-pie: \
 	%{rdynamic:-export-dynamic} \
-	%{m31:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "} \
-	%{m64:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}"
+	%{m31:-dynamic-linker " GNU_USER_DYNAMIC_LINKER32 "} \
+	%{m64:-dynamic-linker " GNU_USER_DYNAMIC_LINKER64 "}}}} \
+   %{static-pie:-static -pie --no-dynamic-linker -z text}"
 
 #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
 
 #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
 
-#define MD_UNWIND_SUPPORT "config/s390/linux-unwind.h"
-
 #ifdef TARGET_LIBC_PROVIDES_SSP
 /* s390 glibc provides __stack_chk_guard in 0x14(tp),
    s390x glibc provides it at 0x28(tp).  */
@@ -101,4 +101,13 @@
 /* Define if long doubles should be mangled as 'g'.  */
 #define TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
 
+#undef TARGET_LIBC_HAS_FUNCTION
+#define TARGET_LIBC_HAS_FUNCTION gnu_libc_has_function
+
+/* Uninitialized common symbols in non-PIE executables, even with
+   strong definitions in dependent shared libraries, will resolve
+   to COPY relocated symbol in the executable.  See PR65780.  */
+#undef TARGET_BINDS_LOCAL_P
+#define TARGET_BINDS_LOCAL_P default_binds_local_p_2
+
 #endif