|
|
1.1 ! root 1: /* Definitions of target machine for GNU compiler for Intel 80386 ! 2: running FreeBSD. ! 3: Copyright (C) 1988, 1992, 1994 Free Software Foundation, Inc. ! 4: Contributed by Poul-Henning Kamp <[email protected]> ! 5: ! 6: This file is part of GNU CC. ! 7: ! 8: GNU CC is free software; you can redistribute it and/or modify ! 9: it under the terms of the GNU General Public License as published by ! 10: the Free Software Foundation; either version 2, or (at your option) ! 11: any later version. ! 12: ! 13: GNU CC is distributed in the hope that it will be useful, ! 14: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 15: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 16: GNU General Public License for more details. ! 17: ! 18: You should have received a copy of the GNU General Public License ! 19: along with GNU CC; see the file COPYING. If not, write to ! 20: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 21: ! 22: /* This goes away when the math-emulator is fixed */ ! 23: #define TARGET_CPU_DEFAULT 0400 /* TARGET_NO_FANCY_MATH_387 */ ! 24: ! 25: /* This is tested by i386gas.h. */ ! 26: #define YES_UNDERSCORES ! 27: ! 28: /* Don't assume anything about the header files. */ ! 29: #define NO_IMPLICIT_EXTERN_C ! 30: ! 31: #include "i386/gstabs.h" ! 32: ! 33: /* Get perform_* macros to build libgcc.a. */ ! 34: #include "i386/perform.h" ! 35: ! 36: #undef CPP_PREDEFINES ! 37: #define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__ -D__386BSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)" ! 38: ! 39: /* Like the default, except no -lg. */ ! 40: #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" ! 41: ! 42: #undef SIZE_TYPE ! 43: #define SIZE_TYPE "unsigned int" ! 44: ! 45: #undef PTRDIFF_TYPE ! 46: #define PTRDIFF_TYPE "int" ! 47: ! 48: #undef WCHAR_TYPE ! 49: #define WCHAR_TYPE "short unsigned int" ! 50: ! 51: #define WCHAR_UNSIGNED 1 ! 52: ! 53: #undef WCHAR_TYPE_SIZE ! 54: #define WCHAR_TYPE_SIZE 16 ! 55: ! 56: #define HAVE_ATEXIT ! 57: ! 58: /* There are conflicting reports about whether this system uses ! 59: a different assembler syntax. [email protected] says # is right. */ ! 60: #undef COMMENT_BEGIN ! 61: #define COMMENT_BEGIN "#" ! 62: ! 63: #undef ASM_APP_ON ! 64: #define ASM_APP_ON "#APP\n" ! 65: ! 66: #undef ASM_APP_OFF ! 67: #define ASM_APP_OFF "#NO_APP\n" ! 68: ! 69: /* The following macros are stolen from i386v4.h */ ! 70: /* These have to be defined to get PIC code correct */ ! 71: ! 72: /* This is how to output an element of a case-vector that is relative. ! 73: This is only used for PIC code. See comments by the `casesi' insn in ! 74: i386.md for an explanation of the expression this outputs. */ ! 75: ! 76: #undef ASM_OUTPUT_ADDR_DIFF_ELT ! 77: #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \ ! 78: fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) ! 79: ! 80: /* Indicate that jump tables go in the text section. This is ! 81: necessary when compiling PIC code. */ ! 82: ! 83: #define JUMP_TABLES_IN_TEXT_SECTION ! 84: ! 85: /* Don't default to pcc-struct-return, because gcc is the only compiler, and ! 86: we want to retain compatibility with older gcc versions. */ ! 87: #define DEFAULT_PCC_STRUCT_RETURN 0 ! 88: ! 89: /* Profiling routines, partially copied from i386/osfrose.h. */ ! 90: ! 91: /* Redefine this to use %eax instead of %edx. */ ! 92: #undef FUNCTION_PROFILER ! 93: #define FUNCTION_PROFILER(FILE, LABELNO) \ ! 94: { \ ! 95: if (flag_pic) \ ! 96: { \ ! 97: fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%eax\n", \ ! 98: LPREFIX, (LABELNO)); \ ! 99: fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \ ! 100: } \ ! 101: else \ ! 102: { \ ! 103: fprintf (FILE, "\tmovl $%sP%d,%%eax\n", LPREFIX, (LABELNO)); \ ! 104: fprintf (FILE, "\tcall mcount\n"); \ ! 105: } \ ! 106: } ! 107: ! 108: /* ! 109: * Some imports from svr4.h in support of shared libraries. ! 110: * Currently, we need the DECLARE_OBJECT_SIZE stuff. ! 111: */ ! 112: ! 113: /* Define the strings used for the special svr4 .type and .size directives. ! 114: These strings generally do not vary from one system running svr4 to ! 115: another, but if a given system (e.g. m88k running svr) needs to use ! 116: different pseudo-op names for these, they may be overridden in the ! 117: file which includes this one. */ ! 118: ! 119: #define TYPE_ASM_OP ".type" ! 120: #define SIZE_ASM_OP ".size" ! 121: #define WEAK_ASM_OP ".weak" ! 122: ! 123: /* The following macro defines the format used to output the second ! 124: operand of the .type assembler directive. Different svr4 assemblers ! 125: expect various different forms for this operand. The one given here ! 126: is just a default. You may need to override it in your machine- ! 127: specific tm.h file (depending upon the particulars of your assembler). */ ! 128: ! 129: #define TYPE_OPERAND_FMT "@%s" ! 130: ! 131: /* Write the extra assembler code needed to declare a function's result. ! 132: Most svr4 assemblers don't require any special declaration of the ! 133: result value, but there are exceptions. */ ! 134: ! 135: #ifndef ASM_DECLARE_RESULT ! 136: #define ASM_DECLARE_RESULT(FILE, RESULT) ! 137: #endif ! 138: ! 139: /* These macros generate the special .type and .size directives which ! 140: are used to set the corresponding fields of the linker symbol table ! 141: entries in an ELF object file under SVR4. These macros also output ! 142: the starting labels for the relevant functions/objects. */ ! 143: ! 144: /* Write the extra assembler code needed to declare a function properly. ! 145: Some svr4 assemblers need to also have something extra said about the ! 146: function's return value. We allow for that here. */ ! 147: ! 148: #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ ! 149: do { \ ! 150: fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ ! 151: assemble_name (FILE, NAME); \ ! 152: putc (',', FILE); \ ! 153: fprintf (FILE, TYPE_OPERAND_FMT, "function"); \ ! 154: putc ('\n', FILE); \ ! 155: ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ ! 156: ASM_OUTPUT_LABEL(FILE, NAME); \ ! 157: } while (0) ! 158: ! 159: /* Write the extra assembler code needed to declare an object properly. */ ! 160: ! 161: #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ ! 162: do { \ ! 163: fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ ! 164: assemble_name (FILE, NAME); \ ! 165: putc (',', FILE); \ ! 166: fprintf (FILE, TYPE_OPERAND_FMT, "object"); \ ! 167: putc ('\n', FILE); \ ! 168: size_directive_output = 0; \ ! 169: if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \ ! 170: { \ ! 171: size_directive_output = 1; \ ! 172: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ ! 173: assemble_name (FILE, NAME); \ ! 174: fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ ! 175: } \ ! 176: ASM_OUTPUT_LABEL(FILE, NAME); \ ! 177: } while (0) ! 178: ! 179: /* Output the size directive for a decl in rest_of_decl_compilation ! 180: in the case where we did not do so before the initializer. ! 181: Once we find the error_mark_node, we know that the value of ! 182: size_directive_output was set ! 183: by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */ ! 184: ! 185: #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \ ! 186: do { \ ! 187: char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ ! 188: if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \ ! 189: && ! AT_END && TOP_LEVEL \ ! 190: && DECL_INITIAL (DECL) == error_mark_node \ ! 191: && !size_directive_output) \ ! 192: { \ ! 193: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ ! 194: assemble_name (FILE, name); \ ! 195: fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL)));\ ! 196: } \ ! 197: } while (0) ! 198: ! 199: ! 200: /* This is how to declare the size of a function. */ ! 201: ! 202: #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ ! 203: do { \ ! 204: if (!flag_inhibit_size_directive) \ ! 205: { \ ! 206: char label[256]; \ ! 207: static int labelno; \ ! 208: labelno++; \ ! 209: ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \ ! 210: ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \ ! 211: fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ ! 212: assemble_name (FILE, (FNAME)); \ ! 213: fprintf (FILE, ","); \ ! 214: assemble_name (FILE, label); \ ! 215: fprintf (FILE, "-"); \ ! 216: assemble_name (FILE, (FNAME)); \ ! 217: putc ('\n', FILE); \ ! 218: } \ ! 219: } while (0) ! 220: ! 221: #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k}" ! 222: #define LINK_SPEC \ ! 223: "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}" ! 224: ! 225: /* This is defined when gcc is compiled in the BSD-directory-tree, and must ! 226: * make up for the gap to all the stuff done in the GNU-makefiles. ! 227: */ ! 228: ! 229: #ifdef FREEBSD_NATIVE ! 230: ! 231: #define INCLUDE_DEFAULTS { \ ! 232: { "/usr/include", 0 }, \ ! 233: { "/usr/include/g++", 1 }, \ ! 234: { 0, 0} \ ! 235: } ! 236: ! 237: #undef MD_EXEC_PREFIX ! 238: #define MD_EXEC_PREFIX "/usr/libexec/" ! 239: ! 240: #undef STANDARD_STARTFILE_PREFIX ! 241: #define STANDARD_STARTFILE_PREFIX "/usr/lib" ! 242: ! 243: #if 0 /* This is very wrong!!! */ ! 244: #define DEFAULT_TARGET_MACHINE "i386-unknown-freebsd_1.0" ! 245: #define GPLUSPLUS_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include" ! 246: #define TOOL_INCLUDE_DIR "/usr/local/i386-unknown-freebsd_1.0/include" ! 247: #define GCC_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include" ! 248: #endif ! 249: ! 250: #endif /* FREEBSD_NATIVE */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.