oops - omitted in previous delta
[official-gcc.git] / gcc / config / pa / pa64-hpux.h
blob2df1615dd545129ff98d03fdd23257f202867dc4
1 /* Definitions of target machine for GNU compiler, for HPs running
2 HPUX using the 64bit runtime model.
3 Copyright (C) 1999, 2000 Free Software Foundation, Inc.
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
22 /* We can debug dynamically linked executables on hpux11; we also
23 want dereferencing of a NULL pointer to cause a SEGV. */
24 #undef LINK_SPEC
25 #define LINK_SPEC \
26 "-E %{mlinker-opt:-O} %{!shared:-u main} %{static:-a archive} %{shared:-shared}"
28 /* Like the default, except no -lg. */
29 #undef LIB_SPEC
30 #define LIB_SPEC \
31 "%{!shared:\
32 %{!p:\
33 %{!pg:\
34 %{!threads:-lc}\
35 %{threads:-lcma -lc_r}}\
36 %{p: -L/lib/libp/ -lc}\
37 %{pg: -L/lib/libp/ -lc}}} /usr/lib/pa20_64/milli.a"
39 /* Under hpux11, the normal location of the `ld' and `as' programs is the
40 /usr/ccs/bin directory. */
42 #ifndef CROSS_COMPILE
43 #undef MD_EXEC_PREFIX
44 #define MD_EXEC_PREFIX "/opt/langtools/bin"
45 #endif
47 /* Under hpux11 the normal location of the various *crt*.o files is the
48 /usr/ccs/lib directory. */
50 #ifndef CROSS_COMPILE
51 #undef MD_STARTFILE_PREFIX
52 #define MD_STARTFILE_PREFIX "/opt/langtools/lib/pa20_64/"
53 #endif
55 /* hpux11 has the new HP assembler. It's still lousy, but it's a whole lot
56 better than the assembler shipped with older versions of hpux. */
57 #undef NEW_HP_ASSEMBLER
58 #define NEW_HP_ASSEMBLER 1
60 #undef ASM_FILE_START
61 #define ASM_FILE_START(FILE) \
62 do { \
63 if (TARGET_64BIT) \
64 fputs("\t.LEVEL 2.0w\n", FILE); \
65 else if (TARGET_PA_20) \
66 fputs("\t.LEVEL 2.0\n", FILE); \
67 else if (TARGET_PA_11) \
68 fputs("\t.LEVEL 1.1\n", FILE); \
69 else \
70 fputs("\t.LEVEL 1.0\n", FILE); \
71 if (profile_flag)\
72 fprintf (FILE, "\t.IMPORT _mcount, CODE\n");\
73 if (write_symbols != NO_DEBUG) \
74 output_file_directive ((FILE), main_input_filename); \
75 } while (0)
77 /* It looks like DWARF2 will be the easiest debug format to handle on this
78 platform. */
79 #define OBJECT_FORMAT_ELF
80 #define DWARF2_DEBUGGING_INFO
81 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG
82 /* This isn't quite ready yet. I'm seeing it mess up some line
83 tables. For example, we're getting lines starting/ending at
84 impossible addresses. */
85 #define DWARF2_ASM_LINE_DEBUG_INFO 1
88 /* The rest of this file is copied from the generic svr4.h. One day we
89 would like to simply include svr4.h instead of copying all these
90 definitions. */
92 /* Support const sections and the ctors and dtors sections for g++.
93 Note that there appears to be two different ways to support const
94 sections at the moment. You can either #define the symbol
95 READONLY_DATA_SECTION (giving it some code which switches to the
96 readonly data section) or else you can #define the symbols
97 EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
98 SELECT_RTX_SECTION. We do both here just to be on the safe side. */
100 #define USE_CONST_SECTION 1
102 #define CONST_SECTION_ASM_OP "\t.section\t.rodata"
104 /* On svr4, we *do* have support for the .init and .fini sections, and we
105 can put stuff in there to be executed before and after `main'. We let
106 crtstuff.c and other files know this by defining the following symbols.
107 The definitions say how to change sections to the .init and .fini
108 sections. This is the same for all known svr4 assemblers. */
110 /* ??? For the time being, we aren't using init sections. */
111 #if 0
112 #define INIT_SECTION_ASM_OP "\t.section\t.init"
113 #define FINI_SECTION_ASM_OP "\t.section\t.fini"
114 #endif
116 /* A default list of other sections which we might be "in" at any given
117 time. For targets that use additional sections (e.g. .tdesc) you
118 should override this definition in the target-specific file which
119 includes this file. */
121 #undef EXTRA_SECTIONS
122 #define EXTRA_SECTIONS in_const
124 /* A default list of extra section function definitions. For targets
125 that use additional sections (e.g. .tdesc) you should override this
126 definition in the target-specific file which includes this file. */
128 #undef EXTRA_SECTION_FUNCTIONS
129 #define EXTRA_SECTION_FUNCTIONS \
130 CONST_SECTION_FUNCTION
133 #define READONLY_DATA_SECTION() const_section ()
135 #define CONST_SECTION_FUNCTION \
136 void \
137 const_section () \
139 if (!USE_CONST_SECTION) \
140 text_section(); \
141 else if (in_section != in_const) \
143 fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \
144 in_section = in_const; \
148 /* Switch into a generic section. */
149 #define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section
151 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
152 #define UNIQUE_SECTION(DECL,RELOC) \
153 do { \
154 int len; \
155 char *name, *string, *prefix; \
157 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \
159 if (! DECL_ONE_ONLY (DECL)) \
161 prefix = "."; \
162 if (TREE_CODE (DECL) == FUNCTION_DECL) \
163 prefix = ".text."; \
164 else if (DECL_READONLY_SECTION (DECL, RELOC)) \
165 prefix = ".rodata."; \
166 else \
167 prefix = ".data."; \
169 else if (TREE_CODE (DECL) == FUNCTION_DECL) \
170 prefix = ".gnu.linkonce.t."; \
171 else if (DECL_READONLY_SECTION (DECL, RELOC)) \
172 prefix = ".gnu.linkonce.r."; \
173 else \
174 prefix = ".gnu.linkonce.d."; \
176 len = strlen (name) + strlen (prefix); \
177 string = alloca (len + 1); \
178 sprintf (string, "%s%s", prefix, name); \
180 DECL_SECTION_NAME (DECL) = build_string (len, string); \
181 } while (0)
183 #define INT_ASM_OP "\t.dword\t"
185 /* Define the strings used for the special svr4 .type and .size directives.
186 These strings generally do not vary from one system running svr4 to
187 another, but if a given system (e.g. m88k running svr) needs to use
188 different pseudo-op names for these, they may be overridden in the
189 file which includes this one. */
191 #define TYPE_ASM_OP "\t.type\t"
192 #define SIZE_ASM_OP "\t.size\t"
194 /* This is how we tell the assembler that a symbol is weak. */
196 #define ASM_WEAKEN_LABEL(FILE,NAME) \
197 do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
198 fputc ('\n', FILE); } while (0)
200 /* The following macro defines the format used to output the second
201 operand of the .type assembler directive. Different svr4 assemblers
202 expect various different forms for this operand. The one given here
203 is just a default. You may need to override it in your machine-
204 specific tm.h file (depending upon the particulars of your assembler). */
206 #define TYPE_OPERAND_FMT "@%s"
208 /* Write the extra assembler code needed to declare a function's result.
209 Most svr4 assemblers don't require any special declaration of the
210 result value, but there are exceptions. */
212 #ifndef ASM_DECLARE_RESULT
213 #define ASM_DECLARE_RESULT(FILE, RESULT)
214 #endif