|
|
1.1 ! root 1: /* Definitions for Intel 386 running system V. ! 2: Copyright (C) 1988 Free Software Foundation, Inc. ! 3: ! 4: This file is part of GNU CC. ! 5: ! 6: GNU CC is free software; you can redistribute it and/or modify ! 7: it under the terms of the GNU General Public License as published by ! 8: the Free Software Foundation; either version 2, or (at your option) ! 9: any later version. ! 10: ! 11: GNU CC is distributed in the hope that it will be useful, ! 12: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: GNU General Public License for more details. ! 15: ! 16: You should have received a copy of the GNU General Public License ! 17: along with GNU CC; see the file COPYING. If not, write to ! 18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 19: ! 20: ! 21: #include "i386.h" ! 22: ! 23: /* Use default settings for system V.3. */ ! 24: ! 25: #include "svr3.h" ! 26: ! 27: /* Use the ATT assembler syntax. ! 28: This overrides at least one macro (ASM_OUTPUT_LABELREF) from svr3.h. */ ! 29: ! 30: #include "att386.h" ! 31: ! 32: /* By default, target has a 80387. */ ! 33: ! 34: #define TARGET_DEFAULT 1 ! 35: ! 36: /* Use crt1.o as a startup file and crtn.o as a closing file. */ ! 37: ! 38: #define STARTFILE_SPEC \ ! 39: "%{pg:gcrt1.o%s}%{!pg:%{posix:%{p:mcrtp1.o%s}%{!p:crtp1.o%s}}%{!posix:%{p:mcrt1.o%s}%{!p:crt1.o%s}}} crtbegin.o%s\ ! 40: %{p:-L/usr/lib/libp}%{pg:-L/usr/lib/libp}" ! 41: ! 42: #define LIB_SPEC "%{posix:-lcposix} %{shlib:-lc_s} -lc crtend.o%s crtn.o%s" ! 43: ! 44: /* Specify predefined symbols in preprocessor. */ ! 45: ! 46: #define CPP_PREDEFINES "-Dunix -Di386" ! 47: ! 48: #define CPP_SPEC "%{posix:-D_POSIX_SOURCE}" ! 49: ! 50: /* Writing `int' for a bitfield forces int alignment for the structure. */ ! 51: ! 52: #define PCC_BITFIELD_TYPE_MATTERS 1 ! 53: ! 54: /* Don't write a `.optim' pseudo; this assembler doesn't handle them. */ ! 55: ! 56: #undef ASM_FILE_START_1 ! 57: #define ASM_FILE_START_1(FILE) ! 58: ! 59: /* Machines that use the AT&T assembler syntax ! 60: also return floating point values in an FP register. */ ! 61: /* Define how to find the value returned by a function. ! 62: VALTYPE is the data type of the value (as a tree). ! 63: If the precise function being called is known, FUNC is its FUNCTION_DECL; ! 64: otherwise, FUNC is 0. */ ! 65: ! 66: #define VALUE_REGNO(MODE) \ ! 67: (((MODE) == SFmode || (MODE) == DFmode) ? FIRST_FLOAT_REG : 0) ! 68: ! 69: /* 1 if N is a possible register number for a function value. */ ! 70: ! 71: #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0 || (N)== FIRST_FLOAT_REG) ! 72: ! 73: #if 0 /* This symbol is expected to exist only on BSD, ! 74: and besides, it describes the host rather than the target. ! 75: It certainly does not belong here. */ ! 76: #ifndef MAXPATHLEN ! 77: #define MAXPATHLEN 1024 ! 78: #endif ! 79: #endif ! 80: ! 81: /* longjmp may fail to restore the registers if called from the same ! 82: function that called setjmp. To compensate, the compiler avoids ! 83: putting variables in registers in functions that use both setjmp ! 84: and longjmp. */ ! 85: ! 86: #define NON_SAVING_SETJMP \ ! 87: (current_function_calls_setjmp && current_function_calls_longjmp) ! 88: ! 89: /* longjmp may fail to restore the stack pointer if the saved frame ! 90: pointer is the same as the caller's frame pointer. Requiring a frame ! 91: pointer in any function that calls setjmp or longjmp avoids this ! 92: problem, unless setjmp and longjmp are called from the same function. ! 93: Since a frame pointer will be required in such a function, it is OK ! 94: that the stack pointer is not restored. */ ! 95: ! 96: #undef FRAME_POINTER_REQUIRED ! 97: #define FRAME_POINTER_REQUIRED \ ! 98: (current_function_calls_setjmp || current_function_calls_longjmp) ! 99: ! 100: /* Define a few machine-specific details ! 101: of the implementation of constructors. ! 102: ! 103: CTORS_SECTION_ASM_OP should be defined to concatenate ! 104: the macro INIT_SECTION_ASM_OP, a newline, and a push instruction ! 105: to push a word containing 0 (or some equivalent of that). ! 106: ! 107: ASM_OUTPUT_CONSTRUCTOR should be defined ! 108: to push the address of the constructor. */ ! 109: ! 110: #undef INIT_SECTION_ASM_OP ! 111: #define INIT_SECTION_ASM_OP ".section .init,\"x\"" ! 112: ! 113: #define CTORS_SECTION_ASM_OP \ ! 114: INIT_SECTION_ASM_OP "\n" \ ! 115: "\tpushl $0\n\t" \ ! 116: DATA_SECTION_ASM_OP ! 117: /* The reason we end with DATA_SECTION_ASM_OP is to prevent the ! 118: initial and final table elements (see crtstuff.c) from getting into ! 119: the .init section and causing a crash. */ ! 120: ! 121: #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ ! 122: do { \ ! 123: init_section (); \ ! 124: fprintf (FILE, "\tpushl $"); \ ! 125: assemble_name (FILE, NAME); \ ! 126: fprintf (FILE, "\n"); \ ! 127: } while (0)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.