]> gcc.gnu.org Git - gcc.git/blame - gcc/config/pa/pa64-hpux.h
Move constructor/destructor handling into target hooks.
[gcc.git] / gcc / config / pa / pa64-hpux.h
CommitLineData
a7e184fc
AM
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.
4
5This file is part of GNU CC.
6
7GNU CC 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
12GNU CC 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 GNU CC; see the file COPYING. If not, write to
19the Free Software Foundation, 59 Temple Place - Suite 330,
20Boston, MA 02111-1307, USA. */
21
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}"
27
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"
38
39/* Under hpux11, the normal location of the `ld' and `as' programs is the
40 /usr/ccs/bin directory. */
41
42#ifndef CROSS_COMPILE
43#undef MD_EXEC_PREFIX
44#define MD_EXEC_PREFIX "/opt/langtools/bin"
45#endif
46
47/* Under hpux11 the normal location of the various *crt*.o files is the
48 /usr/ccs/lib directory. */
49
50#ifndef CROSS_COMPILE
51#undef MD_STARTFILE_PREFIX
52#define MD_STARTFILE_PREFIX "/opt/langtools/lib/pa20_64/"
53#endif
54
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
59
60#undef ASM_FILE_START
61#define ASM_FILE_START(FILE) \
62do { \
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)
76
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
86
87
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. */
91
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. */
99
100#define USE_CONST_SECTION 1
101
102#define CONST_SECTION_ASM_OP "\t.section\t.rodata"
103
a7e184fc
AM
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. */
109
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
115
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. */
120
121#undef EXTRA_SECTIONS
2cc07db4 122#define EXTRA_SECTIONS in_const
a7e184fc
AM
123
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. */
127
128#undef EXTRA_SECTION_FUNCTIONS
129#define EXTRA_SECTION_FUNCTIONS \
2cc07db4
RH
130 CONST_SECTION_FUNCTION
131
a7e184fc
AM
132
133#define READONLY_DATA_SECTION() const_section ()
134
135#define CONST_SECTION_FUNCTION \
136void \
137const_section () \
138{ \
139 if (!USE_CONST_SECTION) \
140 text_section(); \
141 else if (in_section != in_const) \
142 { \
143 fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \
144 in_section = in_const; \
145 } \
146}
147
7c262518
RH
148/* Switch into a generic section. */
149#define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section
a7e184fc
AM
150
151#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
a7e184fc
AM
152#define UNIQUE_SECTION(DECL,RELOC) \
153do { \
154 int len; \
155 char *name, *string, *prefix; \
156 \
157 name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \
158 \
159 if (! DECL_ONE_ONLY (DECL)) \
160 { \
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."; \
168 } \
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."; \
175 \
176 len = strlen (name) + strlen (prefix); \
177 string = alloca (len + 1); \
178 sprintf (string, "%s%s", prefix, name); \
179 \
180 DECL_SECTION_NAME (DECL) = build_string (len, string); \
181} while (0)
182
183#define INT_ASM_OP "\t.dword\t"
a7e184fc
AM
184
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. */
190
191#define TYPE_ASM_OP "\t.type\t"
192#define SIZE_ASM_OP "\t.size\t"
193
194/* This is how we tell the assembler that a symbol is weak. */
195
196#define ASM_WEAKEN_LABEL(FILE,NAME) \
197 do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
198 fputc ('\n', FILE); } while (0)
199
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). */
205
206#define TYPE_OPERAND_FMT "@%s"
207
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. */
211
212#ifndef ASM_DECLARE_RESULT
213#define ASM_DECLARE_RESULT(FILE, RESULT)
214#endif
This page took 0.112097 seconds and 5 git commands to generate.