1107590Sobrien/* Definitions for Linux for S/390.
2169689Skan   Copyright (C) 1999, 2000, 2001, 2002, 2004, 2005, 2006
3169689Skan   Free Software Foundation, Inc.
4107590Sobrien   Contributed by Hartmut Penner (hpenner@de.ibm.com) and
5107590Sobrien                  Ulrich Weigand (uweigand@de.ibm.com).
6107590Sobrien
7132718SkanThis file is part of GCC.
8107590Sobrien
9132718SkanGCC is free software; you can redistribute it and/or modify it under
10132718Skanthe terms of the GNU General Public License as published by the Free
11132718SkanSoftware Foundation; either version 2, or (at your option) any later
12132718Skanversion.
13107590Sobrien
14132718SkanGCC is distributed in the hope that it will be useful, but WITHOUT ANY
15132718SkanWARRANTY; without even the implied warranty of MERCHANTABILITY or
16132718SkanFITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
17132718Skanfor more details.
18107590Sobrien
19107590SobrienYou should have received a copy of the GNU General Public License
20132718Skanalong with GCC; see the file COPYING.  If not, write to the Free
21169689SkanSoftware Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
22169689Skan02110-1301, USA.  */
23107590Sobrien
24107590Sobrien#ifndef _LINUX_H
25107590Sobrien#define _LINUX_H
26107590Sobrien
27107590Sobrien/* Target specific version string.  */
28107590Sobrien
29107590Sobrien#ifdef DEFAULT_TARGET_64BIT
30107590Sobrien#undef  TARGET_VERSION
31107590Sobrien#define TARGET_VERSION fprintf (stderr, " (Linux for zSeries)");
32107590Sobrien#else
33107590Sobrien#undef  TARGET_VERSION
34107590Sobrien#define TARGET_VERSION fprintf (stderr, " (Linux for S/390)");
35107590Sobrien#endif
36107590Sobrien
37107590Sobrien
38107590Sobrien/* Target specific type definitions.  */
39107590Sobrien
40107590Sobrien/* ??? Do we really want long as size_t on 31-bit?  */
41107590Sobrien#undef  SIZE_TYPE
42107590Sobrien#define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "long unsigned int")
43107590Sobrien#undef  PTRDIFF_TYPE
44107590Sobrien#define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int")
45107590Sobrien
46107590Sobrien#undef  WCHAR_TYPE
47107590Sobrien#define WCHAR_TYPE "int"
48107590Sobrien#undef  WCHAR_TYPE_SIZE
49107590Sobrien#define WCHAR_TYPE_SIZE 32
50107590Sobrien
51107590Sobrien
52107590Sobrien/* Target specific preprocessor settings.  */
53107590Sobrien
54117395Skan#define TARGET_OS_CPP_BUILTINS()		\
55117395Skan  do						\
56117395Skan    {						\
57132718Skan      LINUX_TARGET_OS_CPP_BUILTINS();		\
58117395Skan    }						\
59117395Skan  while (0)
60107590Sobrien
61107590Sobrien
62107590Sobrien/* Target specific assembler settings.  */
63107590Sobrien
64107590Sobrien#undef  ASM_SPEC
65132718Skan#define ASM_SPEC "%{m31&m64}%{mesa&mzarch}%{march=*}"
66107590Sobrien
67107590Sobrien
68107590Sobrien/* Target specific linker settings.  */
69107590Sobrien
70117395Skan#ifdef DEFAULT_TARGET_64BIT
71117395Skan#define MULTILIB_DEFAULTS { "m64" }
72117395Skan#else
73117395Skan#define MULTILIB_DEFAULTS { "m31" }
74117395Skan#endif
75117395Skan
76169689Skan#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
77169689Skan#define GLIBC_DYNAMIC_LINKER64 "/lib/ld64.so.1"
78169689Skan
79132718Skan#undef  LINK_SPEC
80132718Skan#define LINK_SPEC \
81132718Skan  "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
82107590Sobrien   %{shared:-shared} \
83107590Sobrien   %{!shared: \
84107590Sobrien      %{static:-static} \
85107590Sobrien      %{!static: \
86107590Sobrien	%{rdynamic:-export-dynamic} \
87132718Skan	%{!dynamic-linker: \
88169689Skan          %{m31:-dynamic-linker " LINUX_DYNAMIC_LINKER32 "} \
89169689Skan          %{m64:-dynamic-linker " LINUX_DYNAMIC_LINKER64 "}}}}"
90107590Sobrien
91169689Skan#define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}"
92107590Sobrien
93132718Skan#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
94107590Sobrien
95169689Skan#define MD_UNWIND_SUPPORT "config/s390/linux-unwind.h"
96107590Sobrien
97169689Skan#ifdef TARGET_LIBC_PROVIDES_SSP
98169689Skan/* s390 glibc provides __stack_chk_guard in 0x14(tp),
99169689Skan   s390x glibc provides it at 0x28(tp).  */
100169689Skan#define TARGET_THREAD_SSP_OFFSET        (TARGET_64BIT ? 0x28 : 0x14)
101169689Skan#endif
102107590Sobrien
103169689Skan/* Define if long doubles should be mangled as 'g'.  */
104169689Skan#define TARGET_ALTERNATE_LONG_DOUBLE_MANGLING
105169689Skan
106107590Sobrien#endif
107