OSDN Git Service

* alpha/unicosmk.h (ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Fix
[pf3gnuchains/gcc-fork.git] / gcc / config / pa / pa64-hpux.h
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
5 This file is part of GNU CC.
6
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.
11
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.
16
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.  */
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) \
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)
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
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
122 #define EXTRA_SECTIONS in_const
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                                         \
130   CONST_SECTION_FUNCTION
131
132
133 #define READONLY_DATA_SECTION() const_section ()
134
135 #define CONST_SECTION_FUNCTION                                          \
136 void                                                                    \
137 const_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
148 /* Switch into a generic section.  */
149 #define TARGET_ASM_NAMED_SECTION  default_elf_asm_named_section
150
151 #define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1)
152 #define UNIQUE_SECTION(DECL,RELOC)                              \
153 do {                                                            \
154   int len;                                                      \
155   char *string;                                                 \
156   const char *prefix,                                           \
157     *const 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"
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