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

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 */

unix.superglobalmegacorp.com

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