1/* Definitions of target machine for GNU compiler, for HP PA-RISC
2   Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005
3   Free Software Foundation, Inc.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GCC is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING.  If not, write to
19the Free Software Foundation, 51 Franklin Street, Fifth Floor,
20Boston, MA 02110-1301, USA.  */
21
22/* GCC always defines __STDC__.  HP C++ compilers don't define it.  This
23   causes trouble when sys/stdsyms.h is included.  As a work around,
24   we define __STDC_EXT__.  A similar situation exists with respect to
25   the definition of __cplusplus.  We define _INCLUDE_LONGLONG
26   to prevent nlist.h from defining __STDC_32_MODE__ (no longlong
27   support).  We define __STDCPP__ to get certain system headers
28   (notably assert.h) to assume standard preprocessor behavior in C++.  */
29#undef TARGET_OS_CPP_BUILTINS
30#define TARGET_OS_CPP_BUILTINS()					\
31  do									\
32    {									\
33	builtin_assert ("system=hpux");					\
34	builtin_assert ("system=unix");					\
35	builtin_define ("__hp9000s800");				\
36	builtin_define ("__hp9000s800__");				\
37	builtin_define ("__hpux");					\
38	builtin_define ("__hpux__");					\
39	builtin_define ("__unix");					\
40	builtin_define ("__unix__");					\
41	if (c_dialect_cxx ())						\
42	  {								\
43	    builtin_define ("_HPUX_SOURCE");				\
44	    builtin_define ("_INCLUDE_LONGLONG");			\
45	    builtin_define ("__STDC_EXT__");				\
46	    builtin_define ("__STDCPP__");				\
47	  }								\
48	else								\
49	  {								\
50	    if (!flag_iso)						\
51	      {								\
52		builtin_define ("_HPUX_SOURCE");			\
53		if (preprocessing_trad_p ())				\
54		  {							\
55		    builtin_define ("hp9000s800");			\
56		    builtin_define ("hppa");				\
57		    builtin_define ("hpux");				\
58		    builtin_define ("unix");				\
59		    builtin_define ("__CLASSIC_C__");			\
60		    builtin_define ("_PWB");				\
61		    builtin_define ("PWB");				\
62		  }							\
63		else							\
64		  builtin_define ("__STDC_EXT__");			\
65	      }								\
66	  }								\
67	if (!TARGET_64BIT)						\
68	  builtin_define ("_ILP32");					\
69	if (flag_pa_unix >= 1995 && !flag_iso)				\
70	  {								\
71	    builtin_define ("_XOPEN_UNIX");				\
72	    builtin_define ("_XOPEN_SOURCE_EXTENDED");			\
73	  }								\
74	if (TARGET_HPUX_11_11)						\
75	  {								\
76	    if (flag_pa_unix >= 1998)					\
77	      {								\
78		if (flag_isoc94 || flag_isoc99 || c_dialect_cxx()	\
79		    || !flag_iso)					\
80		  builtin_define ("_INCLUDE__STDC_A1_SOURCE");		\
81		if (!flag_iso)						\
82		  builtin_define ("_INCLUDE_XOPEN_SOURCE_500");		\
83	      }								\
84	    else if (flag_isoc94 || flag_isoc99 || c_dialect_cxx ())	\
85	      warning (0, "-munix=98 option required for C89 "		\
86		       "Amendment 1 features.\n");			\
87	  }								\
88	if (TARGET_SIO)							\
89	  builtin_define ("_SIO");					\
90	else								\
91	  {								\
92	    builtin_define ("__hp9000s700");				\
93	    builtin_define ("__hp9000s700__");				\
94	    builtin_define ("_WSIO");					\
95	  }								\
96    }									\
97  while (0)
98
99#undef CPP_SPEC
100#define CPP_SPEC \
101  "%{mt|pthread:-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L}"
102/* aCC defines also -DRWSTD_MULTI_THREAD, -DRW_MULTI_THREAD.  These
103   affect only aCC's C++ library (Rogue Wave-derived) which we do not
104   use, and they violate the user's name space.  */
105
106/* We can debug dynamically linked executables on hpux11; we also
107   want dereferencing of a NULL pointer to cause a SEGV.  */
108#undef LINK_SPEC
109#define LINK_SPEC \
110  "%{!shared:%{p:-L/lib/libp -L/usr/lib/libp %{!static:\
111     %nWarning: consider linking with `-static' as system libraries with\n\
112     %n  profiling support are only provided in archive format}}}\
113   %{!shared:%{pg:-L/lib/libp -L/usr/lib/libp %{!static:\
114     %nWarning: consider linking with `-static' as system libraries with\n\
115     %n  profiling support are only provided in archive format}}}\
116   -z %{mlinker-opt:-O} %{!shared:-u main -u __gcc_plt_call}\
117   %{static:-a archive} %{shared:-b}"
118
119/* hpux 11 has posix threads.  */
120#undef LIB_SPEC
121#define LIB_SPEC \
122  "%{!shared:\
123     %{mt|pthread:-lpthread} -lc \
124     %{static:%{!nolibdld:-a shared -ldld -a archive -lpthread -lc}}}"
125
126#undef STARTFILE_SPEC
127#define STARTFILE_SPEC \
128  "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O%s}%{!p:crt0%O%s}} \
129     %{!munix=93:unix95%O%s}}"
130
131/* Under hpux11, the normal location of the `ld' and `as' programs is the
132   /usr/ccs/bin directory.  */
133
134#ifndef CROSS_COMPILE
135#undef MD_EXEC_PREFIX
136#define MD_EXEC_PREFIX "/usr/ccs/bin/"
137#endif
138
139/* Under hpux11 the normal location of the various *crt*.o files is
140   the /usr/ccs/lib directory.  However, the profiling files are in
141   /opt/langtools/lib.  */
142
143#ifndef CROSS_COMPILE
144#undef MD_STARTFILE_PREFIX
145#define MD_STARTFILE_PREFIX "/usr/ccs/lib/"
146#define MD_STARTFILE_PREFIX_1 "/opt/langtools/lib/"
147#endif
148
149/* hpux11 has the new HP assembler.  It's still lousy, but it's a whole lot
150   better than the assembler shipped with older versions of hpux.  */
151#undef NEW_HP_ASSEMBLER
152#define NEW_HP_ASSEMBLER 1
153
154/* Make GCC agree with types.h.  */
155#undef SIZE_TYPE
156#undef PTRDIFF_TYPE
157
158#define SIZE_TYPE "long unsigned int"
159#define PTRDIFF_TYPE "long int"
160
161/* HP-UX 11.0 and above provides initialization and finalization function
162   support from linker command line.  We don't need to invoke __main to run
163   constructors.  We also don't need chatr to determine the dependencies of
164   dynamically linked executables and shared libraries.  */
165#undef LDD_SUFFIX
166#undef PARSE_LDD_OUTPUT
167#undef HAS_INIT_SECTION
168#define HAS_INIT_SECTION 1
169#undef LD_INIT_SWITCH
170#define LD_INIT_SWITCH "+init"
171#undef LD_FINI_SWITCH
172#define LD_FINI_SWITCH "+fini"
173
174/* The HP-UX 11.X SOM linker (ld32) can successfully link shared libraries
175   with secondary definition (weak) symbols.  */
176#undef TARGET_SOM_SDEF
177#define TARGET_SOM_SDEF 1
178