150397Sobrien/* Operating system specific defines to be used when targeting GCC for
250397Sobrien   generic System V Release 3 system.
3169689Skan   Copyright (C) 1991, 1996, 2000, 2002, 2004 Free Software Foundation, Inc.
450397Sobrien   Contributed by Ron Guilmette (rfg@monkeys.com).
518334Speter
6132718SkanThis file is part of GCC.
718334Speter
8132718SkanGCC is free software; you can redistribute it and/or modify
918334Speterit under the terms of the GNU General Public License as published by
1018334Speterthe Free Software Foundation; either version 2, or (at your option)
1118334Speterany later version.
1218334Speter
13132718SkanGCC is distributed in the hope that it will be useful,
1418334Speterbut WITHOUT ANY WARRANTY; without even the implied warranty of
1518334SpeterMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1618334SpeterGNU General Public License for more details.
1718334Speter
1818334SpeterYou should have received a copy of the GNU General Public License
19132718Skanalong with GCC; see the file COPYING.  If not, write to
20169689Skanthe Free Software Foundation, 51 Franklin Street, Fifth Floor,
21169689SkanBoston, MA 02110-1301, USA. */
2218334Speter
2318334Speter/* Define a symbol indicating that we are using svr3.h.  */
2418334Speter#define USING_SVR3_H
2518334Speter
2618334Speter/* Define a symbol so that libgcc* can know what sort of operating
2718334Speter   environment and assembler syntax we are targeting for.  */
2818334Speter#define SVR3_target
2918334Speter
30132718Skan/* Assembler, linker, library, and startfile spec's.  */
3118334Speter
3218334Speter/* The .file command should always begin the output.  */
33132718Skan#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
3418334Speter
3518334Speter/* This says how to output an assembler line
3618334Speter   to define a global common symbol.  */
3718334Speter/* We don't use ROUNDED because the standard compiler doesn't,
3818334Speter   and the linker gives error messages if a common symbol
3918334Speter   has more than one length value.  */
4018334Speter
4118334Speter#undef ASM_OUTPUT_COMMON
4218334Speter#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED)  \
4318334Speter( fputs (".comm ", (FILE)),			\
4418334Speter  assemble_name ((FILE), (NAME)),		\
45132718Skan  fprintf ((FILE), ",%lu\n", (unsigned long)(SIZE)))
4618334Speter
4718334Speter/* This says how to output an assembler line
4818334Speter   to define a local common symbol.  */
4918334Speter
5018334Speter/* Note that using bss_section here caused errors
5118334Speter   in building shared libraries on system V.3.  */
5218334Speter#undef ASM_OUTPUT_LOCAL
5318334Speter#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED)	\
5418334Speter  do {							\
5518334Speter    int align = exact_log2 (ROUNDED);			\
5618334Speter    if (align > 2) align = 2;				\
57169689Skan    switch_to_section (data_section);			\
5818334Speter    ASM_OUTPUT_ALIGN ((FILE), align == -1 ? 2 : align);	\
5918334Speter    ASM_OUTPUT_LABEL ((FILE), (NAME));			\
60132718Skan    fprintf ((FILE), "\t.set .,.+%u\n", (int)(ROUNDED));	\
6118334Speter  } while (0)
6218334Speter
6318334Speter/* Output #ident as a .ident.  */
6418334Speter
6590075Sobrien#undef  ASM_OUTPUT_IDENT
6618334Speter#define ASM_OUTPUT_IDENT(FILE, NAME) \
6718334Speter  fprintf (FILE, "\t.ident \"%s\"\n", NAME);
6818334Speter
6918334Speter/* Use periods rather than dollar signs in special g++ assembler names.  */
7018334Speter
7118334Speter#define NO_DOLLAR_IN_LABEL
7218334Speter
7318334Speter/* System V Release 3 uses COFF debugging info.  */
7418334Speter
75117395Skan#define SDB_DEBUGGING_INFO 1
7618334Speter
7718334Speter/* We don't want to output DBX debugging information.  */
7818334Speter
7918334Speter#undef DBX_DEBUGGING_INFO
8018334Speter
8118334Speter/* Define the actual types of some ANSI-mandated types.  These
8218334Speter   definitions should work for most SVR3 systems.  */
8318334Speter
8418334Speter#undef SIZE_TYPE
8518334Speter#define SIZE_TYPE "unsigned int"
8618334Speter
8718334Speter#undef PTRDIFF_TYPE
8818334Speter#define PTRDIFF_TYPE "int"
8918334Speter
9018334Speter#undef WCHAR_TYPE
9118334Speter#define WCHAR_TYPE "long int"
9218334Speter
9318334Speter#undef WCHAR_TYPE_SIZE
9418334Speter#define WCHAR_TYPE_SIZE BITS_PER_WORD
9518334Speter
9650397Sobrien/* The prefix to add to user-visible assembler symbols.
9718334Speter
9818334Speter   For System V Release 3 the convention is to prepend a leading
9918334Speter   underscore onto user-level symbol names.  */
10018334Speter
10150397Sobrien#undef USER_LABEL_PREFIX
10250397Sobrien#define USER_LABEL_PREFIX "_"
10318334Speter
10418334Speter/* This is how to store into the string LABEL
10518334Speter   the symbol_ref name of an internal numbered label where
10618334Speter   PREFIX is the class of label and NUM is the number within the class.
10718334Speter   This is suitable for output with `assemble_name'.
10818334Speter
10918334Speter   For most svr3 systems, the convention is that any symbol which begins
11018334Speter   with a period is not put into the linker symbol table by the assembler.  */
11118334Speter
11218334Speter#undef ASM_GENERATE_INTERNAL_LABEL
11318334Speter#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM)	\
11490075Sobrien  sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long)(NUM))
11518334Speter
11618334Speter/* We want local labels to start with period if made with asm_fprintf.  */
11718334Speter#undef LOCAL_LABEL_PREFIX
11818334Speter#define LOCAL_LABEL_PREFIX "."
11918334Speter
120117395Skan/* Support const sections and the ctors and dtors sections for g++.  */
12118334Speter
12218334Speter/* Define a few machine-specific details of the implementation of
12318334Speter   constructors.
12418334Speter
12518334Speter   The __CTORS_LIST__ goes in the .init section.  Define CTOR_LIST_BEGIN
12618334Speter   and CTOR_LIST_END to contribute to the .init section an instruction to
12718334Speter   push a word containing 0 (or some equivalent of that).
12818334Speter
12990075Sobrien   Define TARGET_ASM_CONSTRUCTOR to push the address of the constructor.  */
13018334Speter
13190075Sobrien#define INIT_SECTION_ASM_OP     "\t.section\t.init"
13290075Sobrien#define FINI_SECTION_ASM_OP     "\t.section .fini,\"x\""
13318334Speter#define DTORS_SECTION_ASM_OP    FINI_SECTION_ASM_OP
13418334Speter
13518334Speter/* CTOR_LIST_BEGIN and CTOR_LIST_END are machine-dependent
13618334Speter   because they push on the stack.  */
13718334Speter
13818334Speter#ifndef STACK_GROWS_DOWNWARD
13918334Speter
14018334Speter/* Constructor list on stack is in reverse order.  Go to the end of the
14118334Speter   list and go backwards to call constructors in the right order.  */
14218334Speter#define DO_GLOBAL_CTORS_BODY					\
14318334Speterdo {								\
14418334Speter  func_ptr *p, *beg = alloca (0);				\
14518334Speter  for (p = beg; *p; p++)					\
14618334Speter    ;								\
14718334Speter  while (p != beg)						\
14818334Speter    (*--p) ();							\
14918334Speter} while (0)
15018334Speter
15118334Speter#else
15218334Speter
15318334Speter/* Constructor list on stack is in correct order.  Just call them.  */
15418334Speter#define DO_GLOBAL_CTORS_BODY					\
15518334Speterdo {								\
15618334Speter  func_ptr *p, *beg = alloca (0);				\
15718334Speter  for (p = beg; *p; )						\
15818334Speter    (*p++) ();							\
15918334Speter} while (0)
16018334Speter
16118334Speter#endif /* STACK_GROWS_DOWNWARD */
162