]> gcc.gnu.org Git - gcc.git/blame - gcc/config/svr4.h
* cccp.c (do_include): Recognize c:\foo as absolute path name in DOS.
[gcc.git] / gcc / config / svr4.h
CommitLineData
71df9112
RK
1/* Operating system specific defines to be used when targeting GCC for some
2 generic System V Release 4 system.
43238b97 3 Copyright (C) 1991, 1994, 1995 Free Software Foundation, Inc.
71df9112 4 Contributed by Ron Guilmette (rfg@segfault.us.com).
2a2ab3f9
JVA
5
6This file is part of GNU CC.
7
8GNU CC is free software; you can redistribute it and/or modify
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
13GNU CC is distributed in the hope that it will be useful,
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
19along with GNU CC; see the file COPYING. If not, write to
0af195cf
RK
20the Free Software Foundation, 59 Temple Place - Suite 330,
21Boston, MA 02111-1307, USA.
2a2ab3f9
JVA
22
23 To use this file, make up a file with a name like:
24
25 ?????svr4.h
26
27 where ????? is replaced by the name of the basic hardware that you
28 are targeting for. Then, in the file ?????svr4.h, put something
29 like:
30
31 #include "?????.h"
32 #include "svr4.h"
33
34 followed by any really system-specific defines (or overrides of
35 defines) which you find that you need. For example, CPP_PREDEFINES
36 is defined here with only the defined -Dunix and -DSVR4. You should
37 probably override that in your target-specific ?????svr4.h file
38 with a set of defines that includes these, but also contains an
39 appropriate define for the type of hardware that you are targeting.
40*/
41
16ff428b
TW
42/* Define a symbol indicating that we are using svr4.h. */
43#define USING_SVR4_H
44
2a2ab3f9
JVA
45/* For the sake of libgcc2.c, indicate target supports atexit. */
46#define HAVE_ATEXIT
47
48/* Cpp, assembler, linker, library, and startfile spec's. */
49
50/* This defines which switch letters take arguments. On svr4, most of
51 the normal cases (defined in gcc.c) apply, and we also have -h* and
52 -z* options (for the linker). Note however that there is no such
53 thing as a -T option for svr4. */
54
55#define SWITCH_TAKES_ARG(CHAR) \
56 ( (CHAR) == 'D' \
57 || (CHAR) == 'U' \
58 || (CHAR) == 'o' \
59 || (CHAR) == 'e' \
60 || (CHAR) == 'u' \
61 || (CHAR) == 'I' \
62 || (CHAR) == 'm' \
63 || (CHAR) == 'L' \
64 || (CHAR) == 'A' \
65 || (CHAR) == 'h' \
66 || (CHAR) == 'z')
67
68/* This defines which multi-letter switches take arguments. On svr4,
69 there are no such switches except those implemented by GCC itself. */
70
71#define WORD_SWITCH_TAKES_ARG(STR) \
3b39b94f
ILT
72 (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \
73 && strcmp (STR, "Tdata") && strcmp (STR, "Ttext") \
74 && strcmp (STR, "Tbss"))
2a2ab3f9
JVA
75
76/* You should redefine CPP_PREDEFINES in any file which includes this one.
77 The definition should be appropriate for the type of target system
78 involved, and it should include any -A (assertion) options which are
79 appropriate for the given target system. */
80#undef CPP_PREDEFINES
81
82/* Provide an ASM_SPEC appropriate for svr4. Here we try to support as
83 many of the specialized svr4 assembler options as seems reasonable,
84 given that there are certain options which we can't (or shouldn't)
85 support directly due to the fact that they conflict with other options
86 for other svr4 tools (e.g. ld) or with other options for GCC itself.
87 For example, we don't support the -o (output file) or -R (remove
88 input file) options because GCC already handles these things. We
89 also don't support the -m (run m4) option for the assembler because
90 that conflicts with the -m (produce load map) option of the svr4
91 linker. We do however allow passing arbitrary options to the svr4
92 assembler via the -Wa, option.
93
94 Note that gcc doesn't allow a space to follow -Y in a -Ym,* or -Yd,*
95 option.
96*/
97
98#undef ASM_SPEC
99#define ASM_SPEC \
100 "%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}"
101
102/* svr4 assemblers need the `-' (indicating input from stdin) to come after
103 the -o option (and its argument) for some reason. If we try to put it
104 before the -o option, the assembler will try to read the file named as
105 the output file in the -o option as an input file (after it has already
106 written some stuff to it) and the binary stuff contained therein will
107 cause totally confuse the assembler, resulting in many spurious error
108 messages. */
109
110#undef ASM_FINAL_SPEC
111#define ASM_FINAL_SPEC "%{pipe:-}"
112
93639b52
RS
113/* Under svr4, the normal location of the `ld' and `as' programs is the
114 /usr/ccs/bin directory. */
115
116#undef MD_EXEC_PREFIX
117#define MD_EXEC_PREFIX "/usr/ccs/bin/"
118
2a2ab3f9
JVA
119/* Under svr4, the normal location of the various *crt*.o files is the
120 /usr/ccs/lib directory. */
121
122#undef MD_STARTFILE_PREFIX
123#define MD_STARTFILE_PREFIX "/usr/ccs/lib/"
124
b4ac57ab 125/* Provide a LIB_SPEC appropriate for svr4. Here we tack on the default
68d69835
JM
126 standard C library (unless we are building a shared library). */
127
128#undef LIB_SPEC
129#define LIB_SPEC "%{!shared:%{!symbolic:-lc}}"
130
131/* Provide a LIBGCC_SPEC appropriate for svr4. We also want to exclude
132 libgcc when -symbolic. */
133
134#undef LIBGCC_SPEC
135#define LIBGCC_SPEC "%{!shared:%{!symbolic:-lgcc}}"
136
137/* Provide an ENDFILE_SPEC appropriate for svr4. Here we tack on our own
138 magical crtend.o file (see crtstuff.c) which provides part of the
139 support for getting C++ file-scope static object constructed before
2a2ab3f9
JVA
140 entering `main', followed by the normal svr3/svr4 "finalizer" file,
141 which is either `gcrtn.o' or `crtn.o'. */
142
68d69835
JM
143#undef ENDFILE_SPEC
144#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o}%{!pg:crtn.o%s}"
2a2ab3f9
JVA
145
146/* Provide a LINK_SPEC appropriate for svr4. Here we provide support
147 for the special GCC options -static, -shared, and -symbolic which
148 allow us to link things in one of these three modes by applying the
149 appropriate combinations of options at link-time. We also provide
150 support here for as many of the other svr4 linker options as seems
151 reasonable, given that some of them conflict with options for other
152 svr4 tools (e.g. the assembler). In particular, we do support the
153 -h*, -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*,
154 -l*, -o*, -r, -s, -u*, and -L* options are directly supported
155 by gcc.c itself. We don't directly support the -m (generate load
156 map) option because that conflicts with the -m (run m4) option of
157 the svr4 assembler. We also don't directly support the svr4 linker's
158 -I* or -M* options because these conflict with existing GCC options.
159 We do however allow passing arbitrary options to the svr4 linker
160 via the -Wl, option. We don't support the svr4 linker's -a option
161 at all because it is totally useless and because it conflicts with
162 GCC's own -a option.
163
164 Note that gcc doesn't allow a space to follow -Y in a -YP,* option.
165
166 When the -G link option is used (-shared and -symbolic) a final link is
167 not being done. */
168
169#undef LINK_SPEC
b4ac57ab
RS
170#define LINK_SPEC "%{h*} %{V} %{v:%{!V:-V}} \
171 %{b} %{Wl,*:%*} \
2a2ab3f9 172 %{static:-dn -Bstatic} \
f6b54ae8
JM
173 %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \
174 %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \
b4ac57ab 175 %{G:-G} \
2a2ab3f9
JVA
176 %{YP,*} \
177 %{!YP,*:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \
178 %{!p:-Y P,/usr/ccs/lib:/usr/lib}} \
179 %{Qy:} %{!Qn:-Qy}"
180
181/* Gcc automatically adds in one of the files /usr/ccs/lib/values-Xc.o,
182 /usr/ccs/lib/values-Xa.o, or /usr/ccs/lib/values-Xt.o for each final
183 link step (depending upon the other gcc options selected, such as
184 -traditional and -ansi). These files each contain one (initialized)
185 copy of a special variable called `_lib_version'. Each one of these
186 files has `_lib_version' initialized to a different (enum) value.
187 The SVR4 library routines query the value of `_lib_version' at run
188 to decide how they should behave. Specifically, they decide (based
189 upon the value of `_lib_version') if they will act in a strictly ANSI
b4ac57ab 190 conforming manner or not.
2a2ab3f9
JVA
191*/
192
193#undef STARTFILE_SPEC
194#define STARTFILE_SPEC "%{!shared: \
195 %{!symbolic: \
68d69835
JM
196 %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}}\
197 %{pg:gcrti.o%s}%{!pg:crti.o%s} \
198 %{ansi:values-Xc.o%s} \
199 %{!ansi: \
200 %{traditional:values-Xt.o%s} \
201 %{!traditional:values-Xa.o%s}} \
202 crtbegin.o%s"
2a2ab3f9 203
b4ac57ab 204/* Attach a special .ident directive to the end of the file to identify
2a2ab3f9 205 the version of GCC which compiled this code. The format of the
b4ac57ab 206 .ident string is patterned after the ones produced by native svr4
2a2ab3f9
JVA
207 C compilers. */
208
dd452eba
CH
209#define IDENT_ASM_OP ".ident"
210
2a2ab3f9
JVA
211#define ASM_FILE_END(FILE) \
212do { \
dd452eba
CH
213 fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n", \
214 IDENT_ASM_OP, version_string); \
2a2ab3f9
JVA
215 } while (0)
216
217/* Allow #sccs in preprocessor. */
218
219#define SCCS_DIRECTIVE
220
221/* Output #ident as a .ident. */
222
223#define ASM_OUTPUT_IDENT(FILE, NAME) \
dd452eba 224 fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
2a2ab3f9
JVA
225
226/* Use periods rather than dollar signs in special g++ assembler names. */
227
228#define NO_DOLLAR_IN_LABEL
229
230/* Writing `int' for a bitfield forces int alignment for the structure. */
231
232#define PCC_BITFIELD_TYPE_MATTERS 1
233
234/* Implicit library calls should use memcpy, not bcopy, etc. */
235
236#define TARGET_MEM_FUNCTIONS
237
fc416d5b
RS
238/* Handle #pragma weak and #pragma pack. */
239
240#define HANDLE_SYSV_PRAGMA
241
2a2ab3f9
JVA
242/* System V Release 4 uses DWARF debugging info. */
243
244#define DWARF_DEBUGGING_INFO
245
246/* The numbers used to denote specific machine registers in the System V
247 Release 4 DWARF debugging information are quite likely to be totally
248 different from the numbers used in BSD stabs debugging information
249 for the same kind of target machine. Thus, we undefine the macro
250 DBX_REGISTER_NUMBER here as an extra inducement to get people to
251 provide proper machine-specific definitions of DBX_REGISTER_NUMBER
252 (which is also used to provide DWARF registers numbers in dwarfout.c)
253 in their tm.h files which include this file. */
254
255#undef DBX_REGISTER_NUMBER
256
136bfcb3
ILT
257/* gas on SVR4 supports the use of .stabs. Permit -gstabs to be used
258 in general, although it will only work when using gas. */
259
260#define DBX_DEBUGGING_INFO
261
262/* Use DWARF debugging info by default. */
263
ab72fb3b 264#ifndef PREFERRED_DEBUGGING_TYPE
136bfcb3 265#define PREFERRED_DEBUGGING_TYPE DWARF_DEBUG
ab72fb3b 266#endif
136bfcb3
ILT
267
268/* Make LBRAC and RBRAC addresses relative to the start of the
269 function. The native Solaris stabs debugging format works this
270 way, gdb expects it, and it reduces the number of relocation
271 entries. */
272
273#define DBX_BLOCKS_FUNCTION_RELATIVE 1
274
275/* When using stabs, gcc2_compiled must be a stabs entry, not an
f6ab52f8
RK
276 ordinary symbol, or gdb won't see it. The stabs entry must be
277 before the N_SO in order for gdb to find it. */
136bfcb3
ILT
278
279#define ASM_IDENTIFY_GCC(FILE) \
280do \
281 { \
282 if (write_symbols != DBX_DEBUG) \
283 fputs ("gcc2_compiled.:\n", FILE); \
f6ab52f8 284 else \
136bfcb3
ILT
285 fputs ("\t.stabs\t\"gcc2_compiled.\", 0x3c, 0, 0, 0\n", FILE); \
286 } \
287while (0)
288
289/* Like block addresses, stabs line numbers are relative to the
290 current function. */
291
292#define ASM_OUTPUT_SOURCE_LINE(file, line) \
293do \
294 { \
295 static int sym_lineno = 1; \
4925e137
PB
296 fprintf (file, ".stabn 68,0,%d,.LM%d-", \
297 line, sym_lineno); \
298 assemble_name (file, \
299 XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\
300 fprintf (file, "\n.LM%d:\n", sym_lineno); \
136bfcb3
ILT
301 sym_lineno += 1; \
302 } \
303while (0)
304
305/* In order for relative line numbers to work, we must output the
306 stabs entry for the function name first. */
307
308#define DBX_FUNCTION_FIRST
309
71df9112
RK
310/* Generate a blank trailing N_SO to mark the end of the .o file, since
311 we can't depend upon the linker to mark .o file boundaries with
312 embedded stabs. */
313
314#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \
315 fprintf (FILE, \
316 "\t.text\n\t.stabs \"\",%d,0,0,.Letext\n.Letext:\n", N_SO)
317
2a2ab3f9
JVA
318/* Define the actual types of some ANSI-mandated types. (These
319 definitions should work for most SVR4 systems). */
320
321#undef SIZE_TYPE
322#define SIZE_TYPE "unsigned int"
323
324#undef PTRDIFF_TYPE
325#define PTRDIFF_TYPE "int"
326
327#undef WCHAR_TYPE
328#define WCHAR_TYPE "long int"
329
330#undef WCHAR_TYPE_SIZE
331#define WCHAR_TYPE_SIZE BITS_PER_WORD
332
1474c150
RS
333/* This causes trouble, because it requires the host machine
334 to support ANSI C. */
335/* #define MULTIBYTE_CHARS */
b3865ca9 336
2a2ab3f9 337#undef ASM_BYTE_OP
01e2750c
RS
338#define ASM_BYTE_OP ".byte"
339
340#undef SET_ASM_OP
341#define SET_ASM_OP ".set"
2a2ab3f9
JVA
342
343/* This is how to begin an assembly language file. Most svr4 assemblers want
344 at least a .file directive to come first, and some want to see a .version
345 directive come right after that. Here we just establish a default
346 which generates only the .file directive. If you need a .version
347 directive for any specific target, you should override this definition
348 in the target-specific file which includes this one. */
349
350#undef ASM_FILE_START
351#define ASM_FILE_START(FILE) \
352 output_file_directive ((FILE), main_input_filename)
353
354/* This is how to allocate empty space in some section. The .zero
355 pseudo-op is used for this on most svr4 assemblers. */
356
55ee1b03
RS
357#define SKIP_ASM_OP ".zero"
358
2a2ab3f9 359#undef ASM_OUTPUT_SKIP
55ee1b03
RS
360#define ASM_OUTPUT_SKIP(FILE,SIZE) \
361 fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE))
2a2ab3f9
JVA
362
363/* This is how to output a reference to a user-level label named NAME.
364 `assemble_name' uses this.
365
366 For System V Release 4 the convention is *not* to prepend a leading
367 underscore onto user-level symbol names. */
368
369#undef ASM_OUTPUT_LABELREF
370#define ASM_OUTPUT_LABELREF(FILE,NAME) fprintf (FILE, "%s", NAME)
371
55ee1b03
RS
372/* This is how to output an internal numbered label where
373 PREFIX is the class of label and NUM is the number within the class.
374
55ee1b03 375 For most svr4 systems, the convention is that any symbol which begins
4b69d2a3 376 with a period is not put into the linker symbol table by the assembler. */
55ee1b03
RS
377
378#undef ASM_OUTPUT_INTERNAL_LABEL
379#define ASM_OUTPUT_INTERNAL_LABEL(FILE, PREFIX, NUM) \
380do { \
4b69d2a3 381 fprintf (FILE, ".%s%d:\n", PREFIX, NUM); \
55ee1b03
RS
382} while (0)
383
384/* This is how to store into the string LABEL
385 the symbol_ref name of an internal numbered label where
386 PREFIX is the class of label and NUM is the number within the class.
387 This is suitable for output with `assemble_name'.
388
55ee1b03 389 For most svr4 systems, the convention is that any symbol which begins
4b69d2a3 390 with a period is not put into the linker symbol table by the assembler. */
55ee1b03
RS
391
392#undef ASM_GENERATE_INTERNAL_LABEL
393#define ASM_GENERATE_INTERNAL_LABEL(LABEL, PREFIX, NUM) \
394do { \
4b69d2a3 395 sprintf (LABEL, "*.%s%d", PREFIX, NUM); \
55ee1b03
RS
396} while (0)
397
13d39dbc 398/* Output the label which precedes a jumptable. Note that for all svr4
dd452eba
CH
399 systems where we actually generate jumptables (which is to say every
400 svr4 target except i386, where we use casesi instead) we put the jump-
401 tables into the .rodata section and since other stuff could have been
402 put into the .rodata section prior to any given jumptable, we have to
403 make sure that the location counter for the .rodata section gets pro-
404 perly re-aligned prior to the actual beginning of the jump table. */
405
406#define ALIGN_ASM_OP ".align"
407
207cdd07
RS
408#ifndef ASM_OUTPUT_BEFORE_CASE_LABEL
409#define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
410 ASM_OUTPUT_ALIGN ((FILE), 2);
411#endif
412
dd452eba
CH
413#undef ASM_OUTPUT_CASE_LABEL
414#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) \
415 do { \
207cdd07 416 ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE) \
dd452eba
CH
417 ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); \
418 } while (0)
419
2a2ab3f9
JVA
420/* The standard SVR4 assembler seems to require that certain builtin
421 library routines (e.g. .udiv) be explicitly declared as .globl
422 in each assembly file where they are referenced. */
423
424#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
425 ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0))
426
427/* This says how to output assembler code to declare an
428 uninitialized external linkage data object. Under SVR4,
429 the linker seems to want the alignment of data objects
430 to depend on their types. We do exactly that here. */
431
55ee1b03
RS
432#define COMMON_ASM_OP ".comm"
433
2a2ab3f9
JVA
434#undef ASM_OUTPUT_ALIGNED_COMMON
435#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
436do { \
55ee1b03 437 fprintf ((FILE), "\t%s\t", COMMON_ASM_OP); \
2a2ab3f9
JVA
438 assemble_name ((FILE), (NAME)); \
439 fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \
440} while (0)
441
442/* This says how to output assembler code to declare an
443 uninitialized internal linkage data object. Under SVR4,
444 the linker seems to want the alignment of data objects
445 to depend on their types. We do exactly that here. */
446
4b69d2a3 447#define LOCAL_ASM_OP ".local"
2a2ab3f9
JVA
448
449#undef ASM_OUTPUT_ALIGNED_LOCAL
450#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
451do { \
4b69d2a3
RS
452 fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP); \
453 assemble_name ((FILE), (NAME)); \
454 fprintf ((FILE), "\n"); \
455 ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
2a2ab3f9
JVA
456} while (0)
457
458/* This is the pseudo-op used to generate a 32-bit word of data with a
459 specific value in some section. This is the same for all known svr4
460 assemblers. */
461
b3865ca9 462#define INT_ASM_OP ".long"
2a2ab3f9
JVA
463
464/* This is the pseudo-op used to generate a contiguous sequence of byte
465 values from a double-quoted string WITHOUT HAVING A TERMINATING NUL
466 AUTOMATICALLY APPENDED. This is the same for most svr4 assemblers. */
467
468#undef ASCII_DATA_ASM_OP
469#define ASCII_DATA_ASM_OP ".ascii"
470
471/* Support const sections and the ctors and dtors sections for g++.
472 Note that there appears to be two different ways to support const
473 sections at the moment. You can either #define the symbol
474 READONLY_DATA_SECTION (giving it some code which switches to the
475 readonly data section) or else you can #define the symbols
476 EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
477 SELECT_RTX_SECTION. We do both here just to be on the safe side. */
478
479#define USE_CONST_SECTION 1
480
b3865ca9 481#define CONST_SECTION_ASM_OP ".section\t.rodata"
2a2ab3f9 482
68d69835
JM
483/* Define the pseudo-ops used to switch to the .ctors and .dtors sections.
484
485 Note that we want to give these sections the SHF_WRITE attribute
486 because these sections will actually contain data (i.e. tables of
487 addresses of functions in the current root executable or shared library
488 file) and, in the case of a shared library, the relocatable addresses
489 will have to be properly resolved/relocated (and then written into) by
490 the dynamic linker when it actually attaches the given shared library
491 to the executing process. (Note that on SVR4, you may wish to use the
492 `-z text' option to the ELF linker, when building a shared library, as
493 an additional check that you are doing everything right. But if you do
494 use the `-z text' option when building a shared library, you will get
495 errors unless the .ctors and .dtors sections are marked as writable
496 via the SHF_WRITE attribute.) */
497
498#define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\""
499#define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\""
500
501/* On svr4, we *do* have support for the .init and .fini sections, and we
502 can put stuff in there to be executed before and after `main'. We let
503 crtstuff.c and other files know this by defining the following symbols.
504 The definitions say how to change sections to the .init and .fini
505 sections. This is the same for all known svr4 assemblers. */
2a2ab3f9 506
b3865ca9 507#define INIT_SECTION_ASM_OP ".section\t.init"
68d69835 508#define FINI_SECTION_ASM_OP ".section\t.fini"
2a2ab3f9
JVA
509
510/* A default list of other sections which we might be "in" at any given
511 time. For targets that use additional sections (e.g. .tdesc) you
512 should override this definition in the target-specific file which
513 includes this file. */
514
515#undef EXTRA_SECTIONS
516#define EXTRA_SECTIONS in_const, in_ctors, in_dtors
517
518/* A default list of extra section function definitions. For targets
519 that use additional sections (e.g. .tdesc) you should override this
520 definition in the target-specific file which includes this file. */
521
522#undef EXTRA_SECTION_FUNCTIONS
523#define EXTRA_SECTION_FUNCTIONS \
524 CONST_SECTION_FUNCTION \
525 CTORS_SECTION_FUNCTION \
526 DTORS_SECTION_FUNCTION
527
528#define READONLY_DATA_SECTION() const_section ()
529
a35f176b 530extern void text_section ();
2a2ab3f9
JVA
531
532#define CONST_SECTION_FUNCTION \
533void \
534const_section () \
535{ \
536 if (!USE_CONST_SECTION) \
537 text_section(); \
538 else if (in_section != in_const) \
539 { \
540 fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \
541 in_section = in_const; \
542 } \
543}
544
545#define CTORS_SECTION_FUNCTION \
546void \
547ctors_section () \
548{ \
549 if (in_section != in_ctors) \
550 { \
55ee1b03 551 fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \
2a2ab3f9
JVA
552 in_section = in_ctors; \
553 } \
554}
555
556#define DTORS_SECTION_FUNCTION \
557void \
558dtors_section () \
559{ \
560 if (in_section != in_dtors) \
561 { \
55ee1b03 562 fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \
2a2ab3f9
JVA
563 in_section = in_dtors; \
564 } \
565}
566
5748cda9 567/* Switch into a generic section.
fa42ea02 568 This is currently only used to support section attributes.
5748cda9 569
fa42ea02
RM
570 We make the section read-only and executable for a function decl,
571 read-only for a const data decl, and writable for a non-const data decl. */
bbff0169 572#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \
fa42ea02 573 fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \
c0318c99
RK
574 (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
575 (DECL) && TREE_READONLY (DECL) ? "a" : "aw")
fa42ea02 576
5748cda9 577
2a2ab3f9
JVA
578/* A C statement (sans semicolon) to output an element in the table of
579 global constructors. */
580#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
581 do { \
582 ctors_section (); \
b3865ca9 583 fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
2a2ab3f9
JVA
584 assemble_name (FILE, NAME); \
585 fprintf (FILE, "\n"); \
586 } while (0)
587
588/* A C statement (sans semicolon) to output an element in the table of
589 global destructors. */
590#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
591 do { \
592 dtors_section (); \
b3865ca9 593 fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
2a2ab3f9
JVA
594 assemble_name (FILE, NAME); \
595 fprintf (FILE, "\n"); \
596 } while (0)
597
598/* A C statement or statements to switch to the appropriate
599 section for output of DECL. DECL is either a `VAR_DECL' node
600 or a constant of some sort. RELOC indicates whether forming
601 the initial value of DECL requires link-time relocations. */
602
603#define SELECT_SECTION(DECL,RELOC) \
604{ \
605 if (TREE_CODE (DECL) == STRING_CST) \
606 { \
607 if (! flag_writable_strings) \
608 const_section (); \
609 else \
610 data_section (); \
611 } \
612 else if (TREE_CODE (DECL) == VAR_DECL) \
613 { \
614 if ((flag_pic && RELOC) \
ed8969fa
JW
615 || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
616 || !DECL_INITIAL (DECL) \
617 || (DECL_INITIAL (DECL) != error_mark_node \
618 && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
2a2ab3f9
JVA
619 data_section (); \
620 else \
621 const_section (); \
622 } \
623 else \
624 const_section (); \
625}
626
627/* A C statement or statements to switch to the appropriate
628 section for output of RTX in mode MODE. RTX is some kind
629 of constant in RTL. The argument MODE is redundant except
630 in the case of a `const_int' rtx. Currently, these always
631 go into the const section. */
632
633#undef SELECT_RTX_SECTION
634#define SELECT_RTX_SECTION(MODE,RTX) const_section()
635
636/* Define the strings used for the special svr4 .type and .size directives.
637 These strings generally do not vary from one system running svr4 to
638 another, but if a given system (e.g. m88k running svr) needs to use
639 different pseudo-op names for these, they may be overridden in the
640 file which includes this one. */
641
b3865ca9
RS
642#define TYPE_ASM_OP ".type"
643#define SIZE_ASM_OP ".size"
daefd78b
JM
644
645/* This is how we tell the assembler that a symbol is weak. */
646
647#define ASM_WEAKEN_LABEL(FILE,NAME) \
648 do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
649 fputc ('\n', FILE); } while (0)
2a2ab3f9
JVA
650
651/* The following macro defines the format used to output the second
652 operand of the .type assembler directive. Different svr4 assemblers
653 expect various different forms for this operand. The one given here
654 is just a default. You may need to override it in your machine-
655 specific tm.h file (depending upon the particulars of your assembler). */
656
657#define TYPE_OPERAND_FMT "@%s"
658
55ee1b03
RS
659/* Write the extra assembler code needed to declare a function's result.
660 Most svr4 assemblers don't require any special declaration of the
661 result value, but there are exceptions. */
662
663#ifndef ASM_DECLARE_RESULT
664#define ASM_DECLARE_RESULT(FILE, RESULT)
665#endif
666
2a2ab3f9
JVA
667/* These macros generate the special .type and .size directives which
668 are used to set the corresponding fields of the linker symbol table
55ee1b03
RS
669 entries in an ELF object file under SVR4. These macros also output
670 the starting labels for the relevant functions/objects. */
2a2ab3f9 671
55ee1b03
RS
672/* Write the extra assembler code needed to declare a function properly.
673 Some svr4 assemblers need to also have something extra said about the
674 function's return value. We allow for that here. */
2a2ab3f9
JVA
675
676#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
677 do { \
b3865ca9 678 fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
2a2ab3f9
JVA
679 assemble_name (FILE, NAME); \
680 putc (',', FILE); \
681 fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
682 putc ('\n', FILE); \
55ee1b03 683 ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
2a2ab3f9
JVA
684 ASM_OUTPUT_LABEL(FILE, NAME); \
685 } while (0)
686
687/* Write the extra assembler code needed to declare an object properly. */
688
689#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
690 do { \
b3865ca9 691 fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
2a2ab3f9
JVA
692 assemble_name (FILE, NAME); \
693 putc (',', FILE); \
694 fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
695 putc ('\n', FILE); \
a35f176b 696 size_directive_output = 0; \
86615a62 697 if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
2a2ab3f9 698 { \
a35f176b 699 size_directive_output = 1; \
b3865ca9 700 fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
2a2ab3f9 701 assemble_name (FILE, NAME); \
86615a62 702 fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
2a2ab3f9
JVA
703 } \
704 ASM_OUTPUT_LABEL(FILE, NAME); \
705 } while (0)
706
a35f176b
RS
707/* Output the size directive for a decl in rest_of_decl_compilation
708 in the case where we did not do so before the initializer.
709 Once we find the error_mark_node, we know that the value of
710 size_directive_output was set
711 by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
712
713#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
714do { \
715 char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
716 if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
717 && ! AT_END && TOP_LEVEL \
718 && DECL_INITIAL (DECL) == error_mark_node \
719 && !size_directive_output) \
720 { \
8b2e2b2f 721 size_directive_output = 1; \
a35f176b
RS
722 fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
723 assemble_name (FILE, name); \
724 fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
725 } \
726 } while (0)
727
2a2ab3f9
JVA
728/* This is how to declare the size of a function. */
729
730#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
731 do { \
732 if (!flag_inhibit_size_directive) \
733 { \
734 char label[256]; \
735 static int labelno; \
736 labelno++; \
737 ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \
738 ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \
b3865ca9 739 fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
2a2ab3f9
JVA
740 assemble_name (FILE, (FNAME)); \
741 fprintf (FILE, ","); \
742 assemble_name (FILE, label); \
743 fprintf (FILE, "-"); \
252043ee 744 assemble_name (FILE, (FNAME)); \
2a2ab3f9
JVA
745 putc ('\n', FILE); \
746 } \
747 } while (0)
748
749/* A table of bytes codes used by the ASM_OUTPUT_ASCII and
750 ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table
751 corresponds to a particular byte value [0..255]. For any
752 given byte value, if the value in the corresponding table
753 position is zero, the given character can be output directly.
754 If the table value is 1, the byte must be output as a \ooo
755 octal escape. If the tables value is anything else, then the
756 byte value should be output as a \ followed by the value
757 in the table. Note that we can use standard UN*X escape
758 sequences for many control characters, but we don't use
759 \a to represent BEL because some svr4 assemblers (e.g. on
cfb8776e
MM
760 the i386) don't know about that. Also, we don't use \v
761 since some versions of gas, such as 2.2 did not accept it. */
2a2ab3f9
JVA
762
763#define ESCAPES \
cfb8776e 764"\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
2a2ab3f9
JVA
765\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
766\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\
767\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\
768\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
769\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
770\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
771\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
772
773/* Some svr4 assemblers have a limit on the number of characters which
774 can appear in the operand of a .string directive. If your assembler
775 has such a limitation, you should define STRING_LIMIT to reflect that
776 limit. Note that at least some svr4 assemblers have a limit on the
777 actual number of bytes in the double-quoted string, and that they
b4ac57ab 778 count each character in an escape sequence as one byte. Thus, an
2a2ab3f9
JVA
779 escape sequence like \377 would count as four bytes.
780
781 If your target assembler doesn't support the .string directive, you
782 should define this to zero.
783*/
784
785#define STRING_LIMIT ((unsigned) 256)
786
787#define STRING_ASM_OP ".string"
788
789/* The routine used to output NUL terminated strings. We use a special
790 version of this for most svr4 targets because doing so makes the
791 generated assembly code more compact (and thus faster to assemble)
792 as well as more readable, especially for targets like the i386
793 (where the only alternative is to output character sequences as
794 comma separated lists of numbers). */
795
796#define ASM_OUTPUT_LIMITED_STRING(FILE, STR) \
797 do \
798 { \
799 register unsigned char *_limited_str = (unsigned char *) (STR); \
800 register unsigned ch; \
801 fprintf ((FILE), "\t%s\t\"", STRING_ASM_OP); \
802 for (; ch = *_limited_str; _limited_str++) \
803 { \
804 register int escape; \
805 switch (escape = ESCAPES[ch]) \
806 { \
807 case 0: \
808 putc (ch, (FILE)); \
809 break; \
810 case 1: \
811 fprintf ((FILE), "\\%03o", ch); \
812 break; \
813 default: \
814 putc ('\\', (FILE)); \
815 putc (escape, (FILE)); \
816 break; \
817 } \
818 } \
819 fprintf ((FILE), "\"\n"); \
820 } \
821 while (0)
822
823/* The routine used to output sequences of byte values. We use a special
824 version of this for most svr4 targets because doing so makes the
825 generated assembly code more compact (and thus faster to assemble)
826 as well as more readable. Note that if we find subparts of the
827 character sequence which end with NUL (and which are shorter than
828 STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING. */
829
830#undef ASM_OUTPUT_ASCII
831#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \
832 do \
833 { \
834 register unsigned char *_ascii_bytes = (unsigned char *) (STR); \
835 register unsigned char *limit = _ascii_bytes + (LENGTH); \
836 register unsigned bytes_in_chunk = 0; \
837 for (; _ascii_bytes < limit; _ascii_bytes++) \
838 { \
839 register unsigned char *p; \
840 if (bytes_in_chunk >= 60) \
841 { \
842 fprintf ((FILE), "\"\n"); \
843 bytes_in_chunk = 0; \
844 } \
845 for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \
846 continue; \
847 if (p < limit && (p - _ascii_bytes) <= STRING_LIMIT) \
848 { \
849 if (bytes_in_chunk > 0) \
850 { \
851 fprintf ((FILE), "\"\n"); \
852 bytes_in_chunk = 0; \
853 } \
854 ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes); \
855 _ascii_bytes = p; \
856 } \
857 else \
858 { \
859 register int escape; \
860 register unsigned ch; \
861 if (bytes_in_chunk == 0) \
862 fprintf ((FILE), "\t%s\t\"", ASCII_DATA_ASM_OP); \
863 switch (escape = ESCAPES[ch = *_ascii_bytes]) \
864 { \
865 case 0: \
866 putc (ch, (FILE)); \
867 bytes_in_chunk++; \
868 break; \
869 case 1: \
870 fprintf ((FILE), "\\%03o", ch); \
871 bytes_in_chunk += 4; \
872 break; \
873 default: \
874 putc ('\\', (FILE)); \
875 putc (escape, (FILE)); \
876 bytes_in_chunk += 2; \
877 break; \
878 } \
879 } \
880 } \
881 if (bytes_in_chunk > 0) \
882 fprintf ((FILE), "\"\n"); \
883 } \
884 while (0)
68d69835
JM
885
886/* All SVR4 targets use the ELF object file format. */
887#define OBJECT_FORMAT_ELF
b9431ba2
DE
888
889/* The maximum alignment which the object file format can support.
890 ELF doesn't have a limit, but we've got to override the default
891 (which is BIGGEST_ALIGNMENT). */
892#define MAX_OFILE_ALIGNMENT 0x10000
This page took 0.354641 seconds and 5 git commands to generate.