]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/ia64/hpux.h
Daily bump.
[thirdparty/gcc.git] / gcc / config / ia64 / hpux.h
CommitLineData
7e5b9908 1/* Definitions of target machine GNU compiler. IA-64 version.
c58b209a 2 Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
7e5b9908
SE
3 Contributed by Steve Ellcey <sje@cup.hp.com> and
4 Reva Cuthbertson <reva@cup.hp.com>
5
3bed2930 6This file is part of GCC.
7e5b9908 7
3bed2930 8GCC is free software; you can redistribute it and/or modify
7e5b9908
SE
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2, or (at your option)
11any later version.
12
3bed2930 13GCC is distributed in the hope that it will be useful,
7e5b9908
SE
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
3bed2930 19along with GCC; see the file COPYING. If not, write to
7e5b9908
SE
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA. */
22
243a7070
DB
23/* This macro is a C statement to print on `stderr' a string describing the
24 particular machine description choice. */
25
26#define TARGET_VERSION fprintf (stderr, " (IA-64) HP-UX");
27
57016b47 28/* Target OS builtins. */
57016b47
SE
29#define TARGET_OS_CPP_BUILTINS() \
30do { \
31 builtin_assert("system=hpux"); \
32 builtin_assert("system=posix"); \
33 builtin_assert("system=unix"); \
34 builtin_define_std("hpux"); \
35 builtin_define_std("unix"); \
36 builtin_define("__IA64__"); \
37 builtin_define("_LONGLONG"); \
38 builtin_define("_UINT128_T"); \
04df6730 39 if (c_dialect_cxx () || !flag_iso) \
57016b47
SE
40 { \
41 builtin_define("_HPUX_SOURCE"); \
42 builtin_define("__STDC_EXT__"); \
43 } \
44} while (0)
7e5b9908 45
7e2055ec
ZW
46#undef CPP_SPEC
47#define CPP_SPEC \
48 "%{mt|pthread:-D_REENTRANT -D_THREAD_SAFE -D_POSIX_C_SOURCE=199506L}"
49/* aCC defines also -DRWSTD_MULTI_THREAD, -DRW_MULTI_THREAD. These
50 affect only aCC's C++ library (Rogue Wave-derived) which we do not
51 use, and they violate the user's name space. */
52
5b8fcab6
DB
53#undef ASM_EXTRA_SPEC
54#define ASM_EXTRA_SPEC "%{milp32:-milp32} %{mlp64:-mlp64}"
7e5b9908
SE
55
56#undef ENDFILE_SPEC
57
58#undef STARTFILE_SPEC
40ad65d0
SE
59#define STARTFILE_SPEC "%{!shared:%{static:crt0%O%s}}"
60
7e5b9908 61#undef LINK_SPEC
40ad65d0
SE
62#define LINK_SPEC \
63 "+Accept TypeMismatch \
64 %{shared:-b} \
65 %{!shared: \
66 -u main \
67 %{static:-noshared}}"
7e5b9908
SE
68
69#undef LIB_SPEC
40ad65d0
SE
70#define LIB_SPEC \
71 "%{!shared: \
7e2055ec 72 %{mt|pthread:-lpthread} \
40ad65d0
SE
73 %{p:%{!mlp64:-L/usr/lib/hpux32/libp} \
74 %{mlp64:-L/usr/lib/hpux64/libp} -lprof} \
75 %{pg:%{!mlp64:-L/usr/lib/hpux32/libp} \
76 %{mlp64:-L/usr/lib/hpux64/libp} -lgprof} \
77 %{!symbolic:-lc}}"
78
79#ifndef CROSS_COMPILE
80#undef LIBGCC_SPEC
81#define LIBGCC_SPEC \
82 "%{shared-libgcc:%{!mlp64:-lgcc_s_hpux32}%{mlp64:-lgcc_s_hpux64} -lgcc} \
83 %{!shared-libgcc:-lgcc}"
84#endif
7e5b9908 85
6dd12198
SE
86#undef SUBTARGET_SWITCHES
87#define SUBTARGET_SWITCHES \
88 { "ilp32", MASK_ILP32, "Generate ILP32 code" }, \
89 { "lp64", -MASK_ILP32, "Generate LP64 code" },
90
91/* A C expression whose value is zero if pointers that need to be extended
92 from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and
93 greater then zero if they are zero-extended and less then zero if the
94 ptr_extend instruction should be used. */
95
96#define POINTERS_EXTEND_UNSIGNED -1
97
7e5b9908
SE
98#define JMP_BUF_SIZE (8 * 76)
99
7e5b9908 100#undef TARGET_DEFAULT
5429802d 101#define TARGET_DEFAULT (MASK_DWARF2_ASM | MASK_BIG_ENDIAN | MASK_ILP32)
0d7839da
SE
102
103/* This needs to be set to force structure arguments with a single
104 field to be treated as structures and not as the type of their
105 field. Without this a structure with a single char will be
106 returned just like a char variable and that is wrong on HP-UX
3870df96
SE
107 IA64. */
108
109#define MEMBER_TYPE_FORCES_BLK(FIELD, MODE) (TREE_CODE (TREE_TYPE (FIELD)) != REAL_TYPE || (MODE == TFmode && !INTEL_EXTENDED_IEEE_FORMAT))
0d7839da 110
68bb91b1
SE
111/* ASM_OUTPUT_EXTERNAL_LIBCALL defaults to just a globalize_label call,
112 but that doesn't put out the @function type information which causes
113 shared library problems. */
114
115#undef ASM_OUTPUT_EXTERNAL_LIBCALL
116#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
117do { \
118 (*targetm.asm_out.globalize_label) (FILE, XSTR (FUN, 0)); \
119 ASM_OUTPUT_TYPE_DIRECTIVE (FILE, XSTR (FUN, 0), "function"); \
120} while (0)
121
0d7839da
SE
122#undef FUNCTION_ARG_PADDING
123#define FUNCTION_ARG_PADDING(MODE, TYPE) \
124 ia64_hpux_function_arg_padding ((MODE), (TYPE))
125
126#undef PAD_VARARGS_DOWN
127#define PAD_VARARGS_DOWN (!AGGREGATE_TYPE_P (type))
34c1864f 128
c58b209a
NB
129#define REGISTER_TARGET_PRAGMAS() \
130 c_register_pragma (0, "builtin", ia64_hpux_handle_builtin_pragma)
686f3bf0
SE
131
132/* Tell ia64.c that we are using the HP linker and we should delay output of
133 function extern declarations so that we don't output them for functions
134 which are never used (and may not be defined). */
135
136#undef TARGET_HPUX_LD
137#define TARGET_HPUX_LD 1
138
7e2055ec
ZW
139/* The HPUX dynamic linker objects to weak symbols with no
140 definitions, so do not use them in gthr-posix.h. */
141#define GTHREAD_USE_WEAK 0
142
686f3bf0
SE
143/* Put out the needed function declarations at the end. */
144
a5fe455b 145#define TARGET_ASM_FILE_END ia64_hpux_file_end
b64ddb88
SE
146
147#undef CTORS_SECTION_ASM_OP
148#define CTORS_SECTION_ASM_OP "\t.section\t.init_array,\t\"aw\",\"init_array\""
149
150#undef DTORS_SECTION_ASM_OP
151#define DTORS_SECTION_ASM_OP "\t.section\t.fini_array,\t\"aw\",\"fini_array\""
152
74487c57
MM
153/* The init_array/fini_array technique does not permit the use of
154 initialization priorities. */
155#define SUPPORTS_INIT_PRIORITY 0
156
b64ddb88
SE
157#undef READONLY_DATA_SECTION_ASM_OP
158#define READONLY_DATA_SECTION_ASM_OP "\t.section\t.rodata,\t\"a\",\t\"progbits\""
159
160#undef DATA_SECTION_ASM_OP
161#define DATA_SECTION_ASM_OP "\t.section\t.data,\t\"aw\",\t\"progbits\""
162
163#undef SDATA_SECTION_ASM_OP
164#define SDATA_SECTION_ASM_OP "\t.section\t.sdata,\t\"asw\",\t\"progbits\""
165
166#undef BSS_SECTION_ASM_OP
167#define BSS_SECTION_ASM_OP "\t.section\t.bss,\t\"aw\",\t\"nobits\""
168
169#undef SBSS_SECTION_ASM_OP
170#define SBSS_SECTION_ASM_OP "\t.section\t.sbss,\t\"asw\",\t\"nobits\""
171
172#undef TEXT_SECTION_ASM_OP
173#define TEXT_SECTION_ASM_OP "\t.section\t.text,\t\"ax\",\t\"progbits\""
6ca86a1a
RH
174
175/* It is illegal to have relocations in shared segments on HPUX.
176 Pretend flag_pic is always set. */
177#undef TARGET_ASM_SELECT_SECTION
178#define TARGET_ASM_SELECT_SECTION ia64_rwreloc_select_section
179#undef TARGET_ASM_UNIQUE_SECTION
180#define TARGET_ASM_UNIQUE_SECTION ia64_rwreloc_unique_section
181#undef TARGET_ASM_SELECT_RTX_SECTION
182#define TARGET_ASM_SELECT_RTX_SECTION ia64_rwreloc_select_rtx_section
1e1bd14e
RH
183#undef TARGET_SECTION_TYPE_FLAGS
184#define TARGET_SECTION_TYPE_FLAGS ia64_rwreloc_section_type_flags
9959901c
RS
185
186/* ia64 HPUX has the float and long double forms of math functions. */
187#undef TARGET_C99_FUNCTIONS
188#define TARGET_C99_FUNCTIONS 1
189