Annotation of gcc/config/i386/freebsd.h, revision 1.1.1.3

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
1.1.1.2   root       20: the Free Software Foundation, 59 Temple Place - Suite 330,
                     21: Boston, MA 02111-1307, USA.  */
1.1       root       22: 
                     23: /* This goes away when the math-emulator is fixed */
                     24: #define TARGET_CPU_DEFAULT 0400                /* TARGET_NO_FANCY_MATH_387 */
                     25: 
                     26: /* This is tested by i386gas.h.  */
                     27: #define YES_UNDERSCORES
                     28: 
                     29: /* Don't assume anything about the header files. */
                     30: #define NO_IMPLICIT_EXTERN_C
                     31: 
                     32: #include "i386/gstabs.h"
                     33: 
                     34: /* Get perform_* macros to build libgcc.a.  */
                     35: #include "i386/perform.h"
                     36: 
                     37: #undef CPP_PREDEFINES
                     38: #define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__ -D__386BSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
                     39: 
                     40: /* Like the default, except no -lg.  */
                     41: #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
                     42: 
                     43: #undef SIZE_TYPE
                     44: #define SIZE_TYPE "unsigned int"
                     45: 
                     46: #undef PTRDIFF_TYPE
                     47: #define PTRDIFF_TYPE "int"
                     48: 
                     49: #undef WCHAR_TYPE
                     50: #define WCHAR_TYPE "short unsigned int"
                     51: 
                     52: #define WCHAR_UNSIGNED 1
                     53: 
                     54: #undef WCHAR_TYPE_SIZE
                     55: #define WCHAR_TYPE_SIZE 16
                     56: 
                     57: #define HAVE_ATEXIT
                     58: 
                     59: /* There are conflicting reports about whether this system uses
                     60:    a different assembler syntax.  [email protected] says # is right.  */
                     61: #undef COMMENT_BEGIN
                     62: #define COMMENT_BEGIN "#"
                     63: 
                     64: #undef ASM_APP_ON
                     65: #define ASM_APP_ON "#APP\n"
                     66: 
                     67: #undef ASM_APP_OFF
                     68: #define ASM_APP_OFF "#NO_APP\n"
                     69: 
                     70: /* The following macros are stolen from i386v4.h */
                     71: /* These have to be defined to get PIC code correct */
                     72: 
                     73: /* This is how to output an element of a case-vector that is relative.
                     74:    This is only used for PIC code.  See comments by the `casesi' insn in
                     75:    i386.md for an explanation of the expression this outputs. */
                     76: 
                     77: #undef ASM_OUTPUT_ADDR_DIFF_ELT
                     78: #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
                     79:   fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
                     80: 
                     81: /* Indicate that jump tables go in the text section.  This is
                     82:    necessary when compiling PIC code.  */
                     83: 
                     84: #define JUMP_TABLES_IN_TEXT_SECTION
                     85: 
                     86: /* Don't default to pcc-struct-return, because gcc is the only compiler, and
                     87:    we want to retain compatibility with older gcc versions.  */
                     88: #define DEFAULT_PCC_STRUCT_RETURN 0
                     89: 
                     90: /* Profiling routines, partially copied from i386/osfrose.h.  */
                     91: 
                     92: /* Redefine this to use %eax instead of %edx.  */
                     93: #undef FUNCTION_PROFILER
                     94: #define FUNCTION_PROFILER(FILE, LABELNO)  \
                     95: {                                                                      \
                     96:   if (flag_pic)                                                                \
                     97:     {                                                                  \
                     98:       fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%eax\n",             \
                     99:               LPREFIX, (LABELNO));                                     \
                    100:       fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n");                   \
                    101:     }                                                                  \
                    102:   else                                                                 \
                    103:     {                                                                  \
                    104:       fprintf (FILE, "\tmovl $%sP%d,%%eax\n", LPREFIX, (LABELNO));     \
                    105:       fprintf (FILE, "\tcall mcount\n");                               \
                    106:     }                                                                  \
                    107: }
                    108: 
                    109: /*
                    110:  * Some imports from svr4.h in support of shared libraries.
                    111:  * Currently, we need the DECLARE_OBJECT_SIZE stuff.
                    112:  */
                    113: 
                    114: /* Define the strings used for the special svr4 .type and .size directives.
                    115:    These strings generally do not vary from one system running svr4 to
                    116:    another, but if a given system (e.g. m88k running svr) needs to use
                    117:    different pseudo-op names for these, they may be overridden in the
                    118:    file which includes this one.  */
                    119: 
                    120: #define TYPE_ASM_OP    ".type"
                    121: #define SIZE_ASM_OP    ".size"
1.1.1.2   root      122: 
1.1       root      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 */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.