svr3.h revision 117395
1169689Skan/* Operating system specific defines to be used when targeting GCC for 2169689Skan generic System V Release 3 system. 3169689Skan Copyright (C) 1991, 1996, 2000, 2002 Free Software Foundation, Inc. 4169689Skan Contributed by Ron Guilmette (rfg@monkeys.com). 5169689Skan 6169689SkanThis file is part of GNU CC. 7169689Skan 8169689SkanGNU CC is free software; you can redistribute it and/or modify 9169689Skanit under the terms of the GNU General Public License as published by 10169689Skanthe Free Software Foundation; either version 2, or (at your option) 11169689Skanany later version. 12169689Skan 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 20the Free Software Foundation, 59 Temple Place - Suite 330, 21Boston, MA 02111-1307, USA. 22 23 To use this file, make up a file with a name like: 24 25 ?????svr3.h 26 27 where ????? is replaced by the name of the basic hardware that you 28 are targeting for. Then, in the file ?????svr3.h, put something 29 like: 30 31 #include "?????.h" 32 #include "svr3.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 -DSVR3. You should 37 probably override that in your target-specific ?????svr3.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 42/* Define a symbol indicating that we are using svr3.h. */ 43#define USING_SVR3_H 44 45/* Define a symbol so that libgcc* can know what sort of operating 46 environment and assembler syntax we are targeting for. */ 47#define SVR3_target 48 49/* Cpp, assembler, linker, library, and startfile spec's. */ 50 51/* You should redefine CPP_PREDEFINES in any file which includes this one. 52 The definition should be appropriate for the type of target system 53 involved, and it should include any -A (assertion) options which are 54 appropriate for the given target system. */ 55 56#undef CPP_PREDEFINES 57 58/* Output at beginning of assembler file. */ 59/* The .file command should always begin the output. */ 60 61#undef ASM_FILE_START 62#define ASM_FILE_START(FILE) \ 63 do { output_file_directive ((FILE), main_input_filename); \ 64 if (optimize) { ASM_FILE_START_1 (FILE); } \ 65 } while (0) 66 67/* By default, do nothing: a few machines support .optim, but not most. */ 68#undef ASM_FILE_START_1 69#define ASM_FILE_START_1(FILE) 70 71/* This says how to output an assembler line 72 to define a global common symbol. */ 73/* We don't use ROUNDED because the standard compiler doesn't, 74 and the linker gives error messages if a common symbol 75 has more than one length value. */ 76 77#undef ASM_OUTPUT_COMMON 78#define ASM_OUTPUT_COMMON(FILE, NAME, SIZE, ROUNDED) \ 79( fputs (".comm ", (FILE)), \ 80 assemble_name ((FILE), (NAME)), \ 81 fprintf ((FILE), ",%u\n", (SIZE))) 82 83/* This says how to output an assembler line 84 to define a local common symbol. */ 85 86/* Note that using bss_section here caused errors 87 in building shared libraries on system V.3. */ 88#undef ASM_OUTPUT_LOCAL 89#define ASM_OUTPUT_LOCAL(FILE, NAME, SIZE, ROUNDED) \ 90 do { \ 91 int align = exact_log2 (ROUNDED); \ 92 if (align > 2) align = 2; \ 93 data_section (); \ 94 ASM_OUTPUT_ALIGN ((FILE), align == -1 ? 2 : align); \ 95 ASM_OUTPUT_LABEL ((FILE), (NAME)); \ 96 fprintf ((FILE), "\t.set .,.+%u\n", (ROUNDED)); \ 97 } while (0) 98 99#if 0 /* For now, let's leave these machine-specific. */ 100/* Use crt1.o as a startup file and crtn.o as a closing file. */ 101 102#define STARTFILE_SPEC \ 103 "%{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}" 104 105#ifdef CROSS_COMPILE 106#define LIB_SPEC "-lc crtn.o%s" 107#else 108#define LIB_SPEC "%{p:-L/usr/lib/libp}%{pg:-L/usr/lib/libp} -lc crtn.o%s" 109#endif 110 111/* Special flags for the linker. I don't know what they do. */ 112 113#define LINK_SPEC "%{T*} %{z:-lm}" 114#endif 115 116/* Output #ident as a .ident. */ 117 118#undef ASM_OUTPUT_IDENT 119#define ASM_OUTPUT_IDENT(FILE, NAME) \ 120 fprintf (FILE, "\t.ident \"%s\"\n", NAME); 121 122/* Use periods rather than dollar signs in special g++ assembler names. */ 123 124#define NO_DOLLAR_IN_LABEL 125 126/* Implicit library calls should use memcpy, not bcopy, etc. */ 127 128#define TARGET_MEM_FUNCTIONS 129 130/* System V Release 3 uses COFF debugging info. */ 131 132#define SDB_DEBUGGING_INFO 1 133 134/* We don't want to output DBX debugging information. */ 135 136#undef DBX_DEBUGGING_INFO 137 138/* Define the actual types of some ANSI-mandated types. These 139 definitions should work for most SVR3 systems. */ 140 141#undef SIZE_TYPE 142#define SIZE_TYPE "unsigned int" 143 144#undef PTRDIFF_TYPE 145#define PTRDIFF_TYPE "int" 146 147#undef WCHAR_TYPE 148#define WCHAR_TYPE "long int" 149 150#undef WCHAR_TYPE_SIZE 151#define WCHAR_TYPE_SIZE BITS_PER_WORD 152 153/* The prefix to add to user-visible assembler symbols. 154 155 For System V Release 3 the convention is to prepend a leading 156 underscore onto user-level symbol names. */ 157 158#undef USER_LABEL_PREFIX 159#define USER_LABEL_PREFIX "_" 160 161/* This is how to output an internal numbered label where 162 PREFIX is the class of label and NUM is the number within the class. 163 164 For most svr3 systems, the convention is that any symbol which begins 165 with a period is not put into the linker symbol table by the assembler. */ 166 167#undef ASM_OUTPUT_INTERNAL_LABEL 168#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ 169 asm_fprintf (FILE, "%0L%s%d:\n", PREFIX, NUM) 170 171/* This is how to store into the string LABEL 172 the symbol_ref name of an internal numbered label where 173 PREFIX is the class of label and NUM is the number within the class. 174 This is suitable for output with `assemble_name'. 175 176 For most svr3 systems, the convention is that any symbol which begins 177 with a period is not put into the linker symbol table by the assembler. */ 178 179#undef ASM_GENERATE_INTERNAL_LABEL 180#define ASM_GENERATE_INTERNAL_LABEL(LABEL,PREFIX,NUM) \ 181 sprintf (LABEL, "*%s%s%ld", LOCAL_LABEL_PREFIX, PREFIX, (long)(NUM)) 182 183/* We want local labels to start with period if made with asm_fprintf. */ 184#undef LOCAL_LABEL_PREFIX 185#define LOCAL_LABEL_PREFIX "." 186 187/* Support const sections and the ctors and dtors sections for g++. */ 188 189/* Define a few machine-specific details of the implementation of 190 constructors. 191 192 The __CTORS_LIST__ goes in the .init section. Define CTOR_LIST_BEGIN 193 and CTOR_LIST_END to contribute to the .init section an instruction to 194 push a word containing 0 (or some equivalent of that). 195 196 Define TARGET_ASM_CONSTRUCTOR to push the address of the constructor. */ 197 198#define INIT_SECTION_ASM_OP "\t.section\t.init" 199#define FINI_SECTION_ASM_OP "\t.section .fini,\"x\"" 200#define DTORS_SECTION_ASM_OP FINI_SECTION_ASM_OP 201 202/* CTOR_LIST_BEGIN and CTOR_LIST_END are machine-dependent 203 because they push on the stack. */ 204 205#ifndef STACK_GROWS_DOWNWARD 206 207/* Constructor list on stack is in reverse order. Go to the end of the 208 list and go backwards to call constructors in the right order. */ 209#define DO_GLOBAL_CTORS_BODY \ 210do { \ 211 func_ptr *p, *beg = alloca (0); \ 212 for (p = beg; *p; p++) \ 213 ; \ 214 while (p != beg) \ 215 (*--p) (); \ 216} while (0) 217 218#else 219 220/* Constructor list on stack is in correct order. Just call them. */ 221#define DO_GLOBAL_CTORS_BODY \ 222do { \ 223 func_ptr *p, *beg = alloca (0); \ 224 for (p = beg; *p; ) \ 225 (*p++) (); \ 226} while (0) 227 228#endif /* STACK_GROWS_DOWNWARD */ 229 230#undef EXTRA_SECTIONS 231#define EXTRA_SECTIONS in_init, in_fini 232 233#undef EXTRA_SECTION_FUNCTIONS 234#define EXTRA_SECTION_FUNCTIONS \ 235 INIT_SECTION_FUNCTION \ 236 FINI_SECTION_FUNCTION 237 238#define INIT_SECTION_FUNCTION \ 239void \ 240init_section () \ 241{ \ 242 if (in_section != in_init) \ 243 { \ 244 fprintf (asm_out_file, "%s\n", INIT_SECTION_ASM_OP); \ 245 in_section = in_init; \ 246 } \ 247} 248 249#define FINI_SECTION_FUNCTION \ 250void \ 251fini_section () \ 252{ \ 253 if (in_section != in_fini) \ 254 { \ 255 fprintf (asm_out_file, "%s\n", FINI_SECTION_ASM_OP); \ 256 in_section = in_fini; \ 257 } \ 258} 259