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)
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. */
26 "-E %{mlinker-opt:-O} %{!shared:-u main} %{static:-a archive} %{shared:-shared}"
28 /* Like the default, except no -lg. */
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. */
44 #define MD_EXEC_PREFIX "/opt/langtools/bin"
47 /* Under hpux11 the normal location of the various *crt*.o files is the
48 /usr/ccs/lib directory. */
51 #undef MD_STARTFILE_PREFIX
52 #define MD_STARTFILE_PREFIX "/opt/langtools/lib/pa20_64/"
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
61 #define ASM_FILE_START(FILE) \
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); \
70 fputs("\t.LEVEL 1.0\n", FILE); \
72 fprintf (FILE, "\t.IMPORT _mcount, CODE\n");\
73 if (write_symbols != NO_DEBUG) \
74 output_file_directive ((FILE), main_input_filename); \
77 /* It looks like DWARF2 will be the easiest debug format to handle on this
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
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. */
112 #define INIT_SECTION_ASM_OP "\t.section\t.init"
113 #define FINI_SECTION_ASM_OP "\t.section\t.fini"
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 \
139 if (!USE_CONST_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) \
156 const char *prefix, \
157 *const name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL));\
159 if (! DECL_ONE_ONLY (DECL)) \
162 if (TREE_CODE (DECL) == FUNCTION_DECL) \
164 else if (DECL_READONLY_SECTION (DECL, RELOC)) \
165 prefix = ".rodata."; \
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."; \
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); \
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)