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

1.1     ! root        1: /* Definitions of target machine for GNU compiler.
        !             2:    Intel 386 (OSF/1 with OSF/rose) version.
        !             3:    Copyright (C) 1991 Free Software Foundation, Inc.
        !             4: 
        !             5: This file is part of GNU CC.
        !             6: 
        !             7: GNU CC is free software; you can redistribute it and/or modify
        !             8: it under the terms of the GNU General Public License as published by
        !             9: the Free Software Foundation; either version 2, or (at your option)
        !            10: any later version.
        !            11: 
        !            12: GNU CC is distributed in the hope that it will be useful,
        !            13: but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            15: GNU General Public License for more details.
        !            16: 
        !            17: You should have received a copy of the GNU General Public License
        !            18: along with GNU CC; see the file COPYING.  If not, write to
        !            19: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
        !            20: 
        !            21: /* Put leading underscores in front of names. */
        !            22: #define YES_UNDERSCORES
        !            23: 
        !            24: #include "halfpic.h"
        !            25: #include "i386/gstabs.h"
        !            26: 
        !            27: /* Get perform_* macros to build libgcc.a.  */
        !            28: #include "i386/perform.h"
        !            29: 
        !            30: #define OSF_OS
        !            31: 
        !            32: #undef  WORD_SWITCH_TAKES_ARG
        !            33: #define WORD_SWITCH_TAKES_ARG(STR)                                     \
        !            34:  (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) || !strcmp (STR, "pic-names"))
        !            35: 
        !            36: #define MASK_HALF_PIC          0x40000000      /* Mask for half-pic code */
        !            37: #define MASK_HALF_PIC_DEBUG    0x20000000      /* Debug flag */
        !            38: #define MASK_ELF               0x10000000      /* ELF not rose */
        !            39: #define MASK_NO_IDENT          0x08000000      /* suppress .ident */
        !            40: 
        !            41: #define TARGET_HALF_PIC        (target_flags & MASK_HALF_PIC)
        !            42: #define TARGET_DEBUG   (target_flags & MASK_HALF_PIC_DEBUG)
        !            43: #define HALF_PIC_DEBUG TARGET_DEBUG
        !            44: #define TARGET_ELF     (target_flags & MASK_ELF)
        !            45: #define TARGET_ROSE    ((target_flags & MASK_ELF) == 0)
        !            46: #define TARGET_IDENT   ((target_flags & MASK_NO_IDENT) == 0)
        !            47: 
        !            48: #undef SUBTARGET_SWITCHES
        !            49: #define SUBTARGET_SWITCHES \
        !            50:      { "half-pic",      MASK_HALF_PIC},                                \
        !            51:      { "no-half-pic",  -MASK_HALF_PIC},                                \
        !            52:      { "debugb",        MASK_HALF_PIC_DEBUG},                          \
        !            53:      { "elf",           MASK_ELF},                                     \
        !            54:      { "no-elf",       -MASK_ELF},                                     \
        !            55:      { "rose",         -MASK_ELF},                                     \
        !            56:      { "ident",                -MASK_NO_IDENT},                                \
        !            57:      { "no-ident",      MASK_NO_IDENT},
        !            58: 
        !            59: /* OSF/rose uses stabs, not dwarf.  */
        !            60: #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
        !            61: 
        !            62: #ifndef DWARF_DEBUGGING_INFO
        !            63: #define DWARF_DEBUGGING_INFO   /* enable dwarf debugging for testing */
        !            64: #endif
        !            65: 
        !            66: /* Handle #pragma weak and #pragma pack.  */
        !            67: 
        !            68: #define HANDLE_SYSV_PRAGMA
        !            69: 
        !            70: /* Change default predefines.  */
        !            71: #undef CPP_PREDEFINES
        !            72: #define CPP_PREDEFINES "-DOSF -DOSF1 -Dunix -Di386 -Asystem(unix) -Acpu(i386) -Amachine(i386)"
        !            73: 
        !            74: #undef  CPP_SPEC
        !            75: #define CPP_SPEC "\
        !            76: %{!melf: -D__ROSE__} %{melf: -D__ELF__} \
        !            77: %{.S:  %{!ansi:%{!traditional:%{!traditional-cpp:%{!ftraditional: -traditional}}}}} \
        !            78: %{.S:  -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
        !            79: %{.cc: -D__LANGUAGE_C_PLUS_PLUS} \
        !            80: %{.cxx:        -D__LANGUAGE_C_PLUS_PLUS} \
        !            81: %{.C:  -D__LANGUAGE_C_PLUS_PLUS} \
        !            82: %{.m:  -D__LANGUAGE_OBJECTIVE_C} \
        !            83: %{!.S: -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}}"
        !            84: 
        !            85: /* Turn on -mpic-extern by default.  */
        !            86: #undef  CC1_SPEC
        !            87: #define CC1_SPEC "\
        !            88: %{!melf: %{!mrose: %{!mno-elf: -mrose }}} \
        !            89: %{gline:%{!g:%{!g0:%{!g1:%{!g2: -g1}}}}} \
        !            90: %{pic-none:   -mno-half-pic} \
        !            91: %{fpic:              -mno-half-pic} \
        !            92: %{fPIC:              -mno-half-pic} \
        !            93: %{pic-lib:    -mhalf-pic} \
        !            94: %{pic-extern: -mhalf-pic} \
        !            95: %{pic-calls:  -mhalf-pic} \
        !            96: %{pic-names*: -mhalf-pic} \
        !            97: %{!pic-*: %{!fpic: %{!fPIC: -mhalf-pic}}}"
        !            98: 
        !            99: #undef ASM_SPEC
        !           100: #define ASM_SPEC       "%{v*: -v}"
        !           101: 
        !           102: #undef  LINK_SPEC
        !           103: #define LINK_SPEC      "%{v*: -v}                           \
        !           104:                       %{!noshrlib: %{pic-none: -noshrlib} %{!pic-none: -warn_nopic}} \
        !           105:                       %{nostdlib} %{noshrlib} %{glue}"
        !           106: 
        !           107: #undef  LIB_SPEC
        !           108: #define LIB_SPEC "-lc"
        !           109: 
        !           110: #undef  LIBG_SPEC
        !           111: #define LIBG_SPEC ""
        !           112: 
        !           113: #undef  STARTFILE_SPEC
        !           114: #define STARTFILE_SPEC "%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}"
        !           115: 
        !           116: #undef TARGET_VERSION_INTERNAL
        !           117: #undef TARGET_VERSION
        !           118: 
        !           119: #define I386_VERSION " 80386, OSF/rose objects"
        !           120: 
        !           121: #define TARGET_VERSION_INTERNAL(STREAM) fputs (I386_VERSION, STREAM)
        !           122: #define TARGET_VERSION TARGET_VERSION_INTERNAL (stderr)
        !           123: 
        !           124: #undef  MD_EXEC_PREFIX
        !           125: #define MD_EXEC_PREFIX         "/usr/ccs/gcc/"
        !           126: 
        !           127: #undef  MD_STARTFILE_PREFIX
        !           128: #define MD_STARTFILE_PREFIX    "/usr/ccs/lib/"
        !           129: 
        !           130: /* Specify size_t, ptrdiff_t, and wchar_t types.  */
        !           131: #undef SIZE_TYPE
        !           132: #undef PTRDIFF_TYPE
        !           133: #undef WCHAR_TYPE
        !           134: #undef WCHAR_TYPE_SIZE
        !           135: 
        !           136: #define SIZE_TYPE      "long unsigned int"
        !           137: #define PTRDIFF_TYPE   "int"
        !           138: #define WCHAR_TYPE     "unsigned int"
        !           139: #define WCHAR_TYPE_SIZE BITS_PER_WORD
        !           140: 
        !           141: /* Temporarily turn off long double being 96 bits.  */
        !           142: #undef LONG_DOUBLE_TYPE_SIZE
        !           143: 
        !           144: /* Tell final.c we don't need a label passed to mcount.  */
        !           145: #define NO_PROFILE_DATA
        !           146: 
        !           147: #undef  FUNCTION_PROFILER
        !           148: #define FUNCTION_PROFILER(FILE, LABELNO) fprintf (FILE, "\tcall _mcount\n")
        !           149: 
        !           150: /* A C expression that is 1 if the RTX X is a constant which is a
        !           151:    valid address.  On most machines, this can be defined as
        !           152:    `CONSTANT_P (X)', but a few machines are more restrictive in
        !           153:    which constant addresses are supported.
        !           154: 
        !           155:    `CONSTANT_P' accepts integer-values expressions whose values are
        !           156:    not explicitly known, such as `symbol_ref', `label_ref', and
        !           157:    `high' expressions and `const' arithmetic expressions, in
        !           158:    addition to `const_int' and `const_double' expressions.  */
        !           159: 
        !           160: #define CONSTANT_ADDRESS_P_ORIG(X)                                     \
        !           161:   (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF             \
        !           162:    || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST               \
        !           163:    || GET_CODE (X) == HIGH)
        !           164: 
        !           165: #undef CONSTANT_ADDRESS_P
        !           166: #define CONSTANT_ADDRESS_P(X)                                           \
        !           167:   ((CONSTANT_ADDRESS_P_ORIG (X)) && (!HALF_PIC_P () || !HALF_PIC_ADDRESS_P (X)))
        !           168: 
        !           169: /* Nonzero if the constant value X is a legitimate general operand.
        !           170:    It is given that X satisfies CONSTANT_P or is a CONST_DOUBLE.  */
        !           171: 
        !           172: #undef LEGITIMATE_CONSTANT_P
        !           173: #define LEGITIMATE_CONSTANT_P(X)                                       \
        !           174:   (!HALF_PIC_P ()                                                      \
        !           175:    || GET_CODE (X) == CONST_DOUBLE                                     \
        !           176:    || GET_CODE (X) == CONST_INT                                                \
        !           177:    || !HALF_PIC_ADDRESS_P (X))
        !           178: 
        !           179: /* GO_IF_LEGITIMATE_ADDRESS recognizes an RTL expression
        !           180:    that is a valid memory address for an instruction.
        !           181:    The MODE argument is the machine mode for the MEM expression
        !           182:    that wants to use this address. */
        !           183: 
        !           184: #define GO_IF_LEGITIMATE_ADDRESS_ORIG(MODE, X, ADDR)                   \
        !           185: {                                                                      \
        !           186:   if (CONSTANT_ADDRESS_P (X)                                           \
        !           187:       && (! flag_pic || LEGITIMATE_PIC_OPERAND_P (X)))                 \
        !           188:     goto ADDR;                                                         \
        !           189:   GO_IF_INDEXING (X, ADDR);                                            \
        !           190:   if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1)))                \
        !           191:     {                                                                  \
        !           192:       rtx x0 = XEXP (X, 0);                                            \
        !           193:       if (! flag_pic || ! SYMBOLIC_CONST (XEXP (X, 1)))                        \
        !           194:        { GO_IF_INDEXING (x0, ADDR); }                                  \
        !           195:       else if (x0 == pic_offset_table_rtx)                             \
        !           196:        goto ADDR;                                                      \
        !           197:       else if (GET_CODE (x0) == PLUS)                                  \
        !           198:        {                                                               \
        !           199:          if (XEXP (x0, 0) == pic_offset_table_rtx)                     \
        !           200:            { GO_IF_INDEXABLE_BASE (XEXP (x0, 1), ADDR); }              \
        !           201:          if (XEXP (x0, 1) == pic_offset_table_rtx)                     \
        !           202:            { GO_IF_INDEXABLE_BASE (XEXP (x0, 0), ADDR); }              \
        !           203:        }                                                               \
        !           204:     }                                                                  \
        !           205: }
        !           206: 
        !           207: #undef GO_IF_LEGITIMATE_ADDRESS
        !           208: #define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR)                                \
        !           209: {                                                                      \
        !           210:   if (! HALF_PIC_P ())                                                 \
        !           211:     {                                                                  \
        !           212:       GO_IF_LEGITIMATE_ADDRESS_ORIG(MODE, X, ADDR);                    \
        !           213:     }                                                                  \
        !           214:   else                                                                 \
        !           215:     {                                                                  \
        !           216:       if (CONSTANT_P (X) && ! HALF_PIC_ADDRESS_P (X))                  \
        !           217:        goto ADDR;                                                      \
        !           218:                                                                        \
        !           219:       GO_IF_INDEXING (X, ADDR);                                                \
        !           220:       if (GET_CODE (X) == PLUS)                                                \
        !           221:        {                                                               \
        !           222:          rtx x1 = XEXP (X, 1);                                         \
        !           223:                                                                        \
        !           224:          if (CONSTANT_P (x1) && ! HALF_PIC_ADDRESS_P (x1))             \
        !           225:            {                                                           \
        !           226:              rtx x0 = XEXP (X, 0);                                     \
        !           227:              GO_IF_INDEXING (x0, ADDR);                                \
        !           228:            }                                                           \
        !           229:        }                                                               \
        !           230:     }                                                                  \
        !           231: }
        !           232: 
        !           233: /* Sometimes certain combinations of command options do not make sense
        !           234:    on a particular target machine.  You can define a macro
        !           235:    `OVERRIDE_OPTIONS' to take account of this.  This macro, if
        !           236:    defined, is executed once just after all the command options have
        !           237:    been parsed.  */
        !           238: 
        !           239: #define OVERRIDE_OPTIONS                                               \
        !           240: {                                                                      \
        !           241:   /*                                                                   \
        !           242:   if (TARGET_ELF && TARGET_HALF_PIC)                                   \
        !           243:     {                                                                  \
        !           244:       target_flags &= ~MASK_HALF_PIC;                                  \
        !           245:       flag_pic = 1;                                                    \
        !           246:     }                                                                  \
        !           247:   */                                                                   \
        !           248:                                                                        \
        !           249:   if (TARGET_ROSE && flag_pic)                                         \
        !           250:     {                                                                  \
        !           251:       target_flags |= MASK_HALF_PIC;                                   \
        !           252:       flag_pic = 0;                                                    \
        !           253:     }                                                                  \
        !           254:                                                                        \
        !           255:   if (TARGET_HALF_PIC)                                                 \
        !           256:     half_pic_init ();                                                  \
        !           257: }
        !           258: 
        !           259: /* Define this macro if references to a symbol must be treated
        !           260:    differently depending on something about the variable or
        !           261:    function named by the symbol (such as what section it is in).
        !           262: 
        !           263:    The macro definition, if any, is executed immediately after the
        !           264:    rtl for DECL has been created and stored in `DECL_RTL (DECL)'. 
        !           265:    The value of the rtl will be a `mem' whose address is a
        !           266:    `symbol_ref'.
        !           267: 
        !           268:    The usual thing for this macro to do is to a flag in the
        !           269:    `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
        !           270:    name string in the `symbol_ref' (if one bit is not enough
        !           271:    information).
        !           272: 
        !           273:    The best way to modify the name string is by adding text to the
        !           274:    beginning, with suitable punctuation to prevent any ambiguity. 
        !           275:    Allocate the new name in `saveable_obstack'.  You will have to
        !           276:    modify `ASM_OUTPUT_LABELREF' to remove and decode the added text
        !           277:    and output the name accordingly.
        !           278: 
        !           279:    You can also check the information stored in the `symbol_ref' in
        !           280:    the definition of `GO_IF_LEGITIMATE_ADDRESS' or
        !           281:    `PRINT_OPERAND_ADDRESS'. */
        !           282: 
        !           283: #undef ENCODE_SECTION_INFO
        !           284: #define ENCODE_SECTION_INFO(DECL)                                      \
        !           285: do                                                                     \
        !           286:   {                                                                    \
        !           287:    if (HALF_PIC_P ())                                                  \
        !           288:       HALF_PIC_ENCODE (DECL);                                          \
        !           289:   }                                                                    \
        !           290: while (0)
        !           291: 
        !           292: 
        !           293: /* Given a decl node or constant node, choose the section to output it in
        !           294:    and select that section.  */
        !           295: 
        !           296: #undef SELECT_RTX_SECTION
        !           297: #define SELECT_RTX_SECTION(MODE, RTX)                                  \
        !           298: do                                                                     \
        !           299:   {                                                                    \
        !           300:     if (MODE == Pmode && HALF_PIC_P () && HALF_PIC_ADDRESS_P (RTX))    \
        !           301:       data_section ();                                                 \
        !           302:     else                                                               \
        !           303:       readonly_data_section ();                                                \
        !           304:   }                                                                    \
        !           305: while (0)
        !           306: 
        !           307: #undef SELECT_SECTION
        !           308: #define SELECT_SECTION(DECL, RELOC)                                    \
        !           309: {                                                                      \
        !           310:   if (RELOC && HALF_PIC_P ())                                          \
        !           311:     data_section ();                                                   \
        !           312:                                                                        \
        !           313:   else if (TREE_CODE (DECL) == STRING_CST)                             \
        !           314:     {                                                                  \
        !           315:       if (flag_writable_strings)                                       \
        !           316:        data_section ();                                                \
        !           317:       else                                                             \
        !           318:        readonly_data_section ();                                       \
        !           319:     }                                                                  \
        !           320:                                                                        \
        !           321:   else if (TREE_CODE (DECL) != VAR_DECL)                               \
        !           322:     readonly_data_section ();                                          \
        !           323:                                                                        \
        !           324:   else if (!TREE_READONLY (DECL))                                      \
        !           325:     data_section ();                                                   \
        !           326:                                                                        \
        !           327:   else                                                                 \
        !           328:     readonly_data_section ();                                          \
        !           329: }
        !           330: 
        !           331: 
        !           332: /* Define the strings used for the special svr4 .type and .size directives.
        !           333:    These strings generally do not vary from one system running svr4 to
        !           334:    another, but if a given system (e.g. m88k running svr) needs to use
        !           335:    different pseudo-op names for these, they may be overridden in the
        !           336:    file which includes this one.  */
        !           337: 
        !           338: #define TYPE_ASM_OP    ".type"
        !           339: #define SIZE_ASM_OP    ".size"
        !           340: #define WEAK_ASM_OP    ".weak"
        !           341: 
        !           342: /* The following macro defines the format used to output the second
        !           343:    operand of the .type assembler directive.  Different svr4 assemblers
        !           344:    expect various different forms for this operand.  The one given here
        !           345:    is just a default.  You may need to override it in your machine-
        !           346:    specific tm.h file (depending upon the particulars of your assembler).  */
        !           347: 
        !           348: #define TYPE_OPERAND_FMT       "@%s"
        !           349: 
        !           350: /* A C statement (sans semicolon) to output to the stdio stream
        !           351:    STREAM any text necessary for declaring the name NAME of an
        !           352:    initialized variable which is being defined.  This macro must
        !           353:    output the label definition (perhaps using `ASM_OUTPUT_LABEL'). 
        !           354:    The argument DECL is the `VAR_DECL' tree node representing the
        !           355:    variable.
        !           356: 
        !           357:    If this macro is not defined, then the variable name is defined
        !           358:    in the usual manner as a label (by means of `ASM_OUTPUT_LABEL').  */
        !           359: 
        !           360: #undef ASM_DECLARE_OBJECT_NAME
        !           361: #define ASM_DECLARE_OBJECT_NAME(STREAM, NAME, DECL)                    \
        !           362: do                                                                     \
        !           363:  {                                                                     \
        !           364:    ASM_OUTPUT_LABEL(STREAM,NAME);                                       \
        !           365:    HALF_PIC_DECLARE (NAME);                                            \
        !           366:    if (TARGET_ELF)                                                     \
        !           367:      {                                                                 \
        !           368:        fprintf (STREAM, "\t%s\t ", TYPE_ASM_OP);                       \
        !           369:        assemble_name (STREAM, NAME);                                   \
        !           370:        putc (',', STREAM);                                             \
        !           371:        fprintf (STREAM, TYPE_OPERAND_FMT, "object");                   \
        !           372:        putc ('\n', STREAM);                                            \
        !           373:        if (!flag_inhibit_size_directive)                               \
        !           374:         {                                                              \
        !           375:           fprintf (STREAM, "\t%s\t ", SIZE_ASM_OP);                    \
        !           376:           assemble_name (STREAM, NAME);                                \
        !           377:           fprintf (STREAM, ",%d\n",  int_size_in_bytes (TREE_TYPE (decl))); \
        !           378:         }                                                              \
        !           379:      }                                                                 \
        !           380:  }                                                                     \
        !           381: while (0)
        !           382: 
        !           383: /* This is how to declare a function name. */
        !           384: 
        !           385: #undef ASM_DECLARE_FUNCTION_NAME
        !           386: #define ASM_DECLARE_FUNCTION_NAME(STREAM,NAME,DECL)                    \
        !           387: do                                                                     \
        !           388:  {                                                                     \
        !           389:    ASM_OUTPUT_LABEL(STREAM,NAME);                                      \
        !           390:    HALF_PIC_DECLARE (NAME);                                            \
        !           391:    if (TARGET_ELF)                                                     \
        !           392:      {                                                                 \
        !           393:        fprintf (STREAM, "\t%s\t ", TYPE_ASM_OP);                       \
        !           394:        assemble_name (STREAM, NAME);                                   \
        !           395:        putc (',', STREAM);                                             \
        !           396:        fprintf (STREAM, TYPE_OPERAND_FMT, "function");                 \
        !           397:        putc ('\n', STREAM);                                            \
        !           398:        ASM_DECLARE_RESULT (STREAM, DECL_RESULT (DECL));                        \
        !           399:      }                                                                 \
        !           400:  }                                                                     \
        !           401: while (0)
        !           402: 
        !           403: /* Write the extra assembler code needed to declare a function's result.
        !           404:    Most svr4 assemblers don't require any special declaration of the
        !           405:    result value, but there are exceptions.  */
        !           406: 
        !           407: #ifndef ASM_DECLARE_RESULT
        !           408: #define ASM_DECLARE_RESULT(FILE, RESULT)
        !           409: #endif
        !           410: 
        !           411: /* This is how to declare the size of a function.  */
        !           412: 
        !           413: #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)                   \
        !           414: do                                                                     \
        !           415:   {                                                                    \
        !           416:     if (TARGET_ELF && !flag_inhibit_size_directive)                    \
        !           417:       {                                                                        \
        !           418:         char label[256];                                               \
        !           419:        static int labelno;                                             \
        !           420:        labelno++;                                                      \
        !           421:        ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);            \
        !           422:        ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);               \
        !           423:        fprintf (FILE, "/\t%s\t ", SIZE_ASM_OP);                        \
        !           424:        assemble_name (FILE, (FNAME));                                  \
        !           425:         fprintf (FILE, ",");                                           \
        !           426:        assemble_name (FILE, label);                                    \
        !           427:         fprintf (FILE, "-");                                           \
        !           428:        assemble_name (FILE, (FNAME));                                  \
        !           429:        putc ('\n', FILE);                                              \
        !           430:       }                                                                        \
        !           431:   }                                                                    \
        !           432: while (0)
        !           433: 
        !           434: /* Attach a special .ident directive to the end of the file to identify
        !           435:    the version of GCC which compiled this code.  The format of the
        !           436:    .ident string is patterned after the ones produced by native svr4
        !           437:    C compilers.  */
        !           438: 
        !           439: #define IDENT_ASM_OP ".ident"
        !           440: 
        !           441: /* Allow #sccs in preprocessor.  */
        !           442: 
        !           443: #define SCCS_DIRECTIVE
        !           444: 
        !           445: /* This says what to print at the end of the assembly file */
        !           446: #define ASM_FILE_END(STREAM)                                           \
        !           447: do                                                                     \
        !           448:   {                                                                    \
        !           449:     if (HALF_PIC_P ())                                                 \
        !           450:       HALF_PIC_FINISH (STREAM);                                                \
        !           451:                                                                        \
        !           452:     if (TARGET_IDENT)                                                  \
        !           453:       {                                                                        \
        !           454:        fprintf ((STREAM), "\t%s\t\"GCC: (GNU) %s -O%d",                \
        !           455:                 IDENT_ASM_OP, version_string, optimize);               \
        !           456:                                                                        \
        !           457:        if (write_symbols == PREFERRED_DEBUGGING_TYPE)                  \
        !           458:          fprintf ((STREAM), " -g%d", (int)debug_info_level);           \
        !           459:                                                                        \
        !           460:        else if (write_symbols == DBX_DEBUG)                            \
        !           461:          fprintf ((STREAM), " -gstabs%d", (int)debug_info_level);      \
        !           462:                                                                        \
        !           463:        else if (write_symbols == DWARF_DEBUG)                          \
        !           464:          fprintf ((STREAM), " -gdwarf%d", (int)debug_info_level);      \
        !           465:                                                                        \
        !           466:        else if (write_symbols != NO_DEBUG)                             \
        !           467:          fprintf ((STREAM), " -g??%d", (int)debug_info_level);         \
        !           468:                                                                        \
        !           469:        if (flag_omit_frame_pointer)                                    \
        !           470:          fprintf ((STREAM), " -fomit-frame-pointer");                  \
        !           471:                                                                        \
        !           472:        if (flag_strength_reduce)                                       \
        !           473:          fprintf ((STREAM), " -fstrength-reduce");                     \
        !           474:                                                                        \
        !           475:        if (flag_unroll_loops)                                          \
        !           476:          fprintf ((STREAM), " -funroll-loops");                        \
        !           477:                                                                        \
        !           478:        if (flag_force_mem)                                             \
        !           479:          fprintf ((STREAM), " -fforce-mem");                           \
        !           480:                                                                        \
        !           481:        if (flag_force_addr)                                            \
        !           482:          fprintf ((STREAM), " -fforce-addr");                          \
        !           483:                                                                        \
        !           484:        if (flag_inline_functions)                                      \
        !           485:          fprintf ((STREAM), " -finline-functions");                    \
        !           486:                                                                        \
        !           487:        if (flag_caller_saves)                                          \
        !           488:          fprintf ((STREAM), " -fcaller-saves");                        \
        !           489:                                                                        \
        !           490:        if (flag_pic)                                                   \
        !           491:          fprintf ((STREAM), (flag_pic > 1) ? " -fPIC" : " -fpic");     \
        !           492:                                                                        \
        !           493:        if (flag_inhibit_size_directive)                                \
        !           494:          fprintf ((STREAM), " -finhibit-size-directive");              \
        !           495:                                                                        \
        !           496:        if (flag_gnu_linker)                                            \
        !           497:          fprintf ((STREAM), " -fgnu-linker");                          \
        !           498:                                                                        \
        !           499:        if (profile_flag)                                               \
        !           500:          fprintf ((STREAM), " -p");                                    \
        !           501:                                                                        \
        !           502:        if (profile_block_flag)                                         \
        !           503:          fprintf ((STREAM), " -a");                                    \
        !           504:                                                                        \
        !           505:        if (TARGET_IEEE_FP)                                             \
        !           506:          fprintf ((STREAM), " -mieee-fp");                             \
        !           507:                                                                        \
        !           508:        if (TARGET_HALF_PIC)                                            \
        !           509:          fprintf ((STREAM), " -mhalf-pic");                            \
        !           510:                                                                        \
        !           511:        fprintf ((STREAM), (TARGET_486) ? " -m486" : " -m386");         \
        !           512:        fprintf ((STREAM), (TARGET_ELF) ? " -melf\"\n" : " -mrose\"\n"); \
        !           513:       }                                                                        \
        !           514:   }                                                                    \
        !           515: while (0)
        !           516: 
        !           517: /* Tell collect that the object format is OSF/rose.  */
        !           518: #define OBJECT_FORMAT_ROSE
        !           519: 
        !           520: /* Tell collect where the appropriate binaries are.  */
        !           521: #define REAL_LD_FILE_NAME      "/usr/ccs/gcc/gld"
        !           522: #define REAL_NM_FILE_NAME      "/usr/ccs/bin/nm"
        !           523: #define REAL_STRIP_FILE_NAME   "/usr/ccs/bin/strip"
        !           524: 
        !           525: /* Use atexit for static constructors/destructors, instead of defining
        !           526:    our own exit function.  */
        !           527: #define HAVE_ATEXIT
        !           528: 
        !           529: /* Define this macro meaning that gcc should find the library 'libgcc.a'
        !           530:    by hand, rather than passing the argument '-lgcc' to tell the linker
        !           531:    to do the search */
        !           532: #define LINK_LIBGCC_SPECIAL
        !           533: 
        !           534: /* A C statement to output assembler commands which will identify the object
        !           535:   file as having been compile with GNU CC. We don't need or want this for
        !           536:   OSF1. GDB doesn't need it and kdb doesn't like it */
        !           537: #define ASM_IDENTIFY_GCC(FILE)
        !           538: 
        !           539: /* Identify the front-end which produced this file.  To keep symbol
        !           540:    space down, and not confuse kdb, only do this if the language is
        !           541:    not C.  */
        !           542: 
        !           543: #define ASM_IDENTIFY_LANGUAGE(STREAM)                                  \
        !           544: {                                                                      \
        !           545:   if (strcmp (lang_identify (), "c") != 0)                             \
        !           546:     output_lang_identify (STREAM);                                     \
        !           547: }
        !           548: 
        !           549: /* This is how to output an assembler line defining a `double' constant.
        !           550:    Use "word" pseudos to avoid printing NaNs, infinity, etc.  */
        !           551: 
        !           552: /* This is how to output an assembler line defining a `double' constant.  */
        !           553: 
        !           554: #undef ASM_OUTPUT_DOUBLE
        !           555: 
        !           556: #ifndef        CROSS_COMPILE
        !           557: #define        ASM_OUTPUT_DOUBLE(STREAM, VALUE)                                \
        !           558: do                                                                     \
        !           559:   {                                                                    \
        !           560:     long value_long[2];                                                        \
        !           561:     REAL_VALUE_TO_TARGET_DOUBLE (VALUE, value_long);                   \
        !           562:                                                                        \
        !           563:     fprintf (STREAM, "\t.long\t0x%08lx\t\t# %.20g\n\t.long\t0x%08lx\n",        \
        !           564:           value_long[0], VALUE, value_long[1]);                        \
        !           565:   }                                                                    \
        !           566: while (0)
        !           567: 
        !           568: #else
        !           569: #define        ASM_OUTPUT_DOUBLE(STREAM, VALUE)                                \
        !           570:   fprintf (STREAM, "\t.double\t%.20g\n", VALUE)
        !           571: #endif
        !           572: 
        !           573: /* This is how to output an assembler line defining a `float' constant.  */
        !           574: 
        !           575: #undef ASM_OUTPUT_FLOAT
        !           576: 
        !           577: #ifndef        CROSS_COMPILE
        !           578: #define        ASM_OUTPUT_FLOAT(STREAM, VALUE)                                 \
        !           579: do                                                                     \
        !           580:   {                                                                    \
        !           581:     long value_long;                                                   \
        !           582:     REAL_VALUE_TO_TARGET_SINGLE (VALUE, value_long);                   \
        !           583:                                                                        \
        !           584:     fprintf (STREAM, "\t.long\t0x%08lx\t\t# %.12g (float)\n",          \
        !           585:           value_long, VALUE);                                          \
        !           586:   }                                                                    \
        !           587: while (0)
        !           588: 
        !           589: #else
        !           590: #define        ASM_OUTPUT_FLOAT(STREAM, VALUE)                                 \
        !           591:   fprintf (STREAM, "\t.float\t%.12g\n", VALUE)
        !           592: #endif
        !           593: 
        !           594: 
        !           595: /* Generate calls to memcpy, etc., not bcopy, etc. */
        !           596: #define TARGET_MEM_FUNCTIONS
        !           597: 
        !           598: /* Don't default to pcc-struct-return, because gcc is the only compiler, and
        !           599:    we want to retain compatibility with older gcc versions.  */
        !           600: #define DEFAULT_PCC_STRUCT_RETURN 0
        !           601: 
        !           602: /* Map i386 registers to the numbers dwarf expects.  Of course this is different
        !           603:    from what stabs expects.  */
        !           604: 
        !           605: #define DWARF_DBX_REGISTER_NUMBER(n) \
        !           606: ((n) == 0 ? 0 \
        !           607:  : (n) == 1 ? 2 \
        !           608:  : (n) == 2 ? 1 \
        !           609:  : (n) == 3 ? 3 \
        !           610:  : (n) == 4 ? 6 \
        !           611:  : (n) == 5 ? 7 \
        !           612:  : (n) == 6 ? 5 \
        !           613:  : (n) == 7 ? 4 \
        !           614:  : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \
        !           615:  : (-1))
        !           616: 
        !           617: /* Now what stabs expects in the register.  */
        !           618: #define STABS_DBX_REGISTER_NUMBER(n) \
        !           619: ((n) == 0 ? 0 : \
        !           620:  (n) == 1 ? 2 : \
        !           621:  (n) == 2 ? 1 : \
        !           622:  (n) == 3 ? 3 : \
        !           623:  (n) == 4 ? 6 : \
        !           624:  (n) == 5 ? 7 : \
        !           625:  (n) == 6 ? 4 : \
        !           626:  (n) == 7 ? 5 : \
        !           627:  (n) + 4)
        !           628: 
        !           629: #undef DBX_REGISTER_NUMBER
        !           630: #define DBX_REGISTER_NUMBER(n) ((write_symbols == DWARF_DEBUG)         \
        !           631:                                ? DWARF_DBX_REGISTER_NUMBER(n)          \
        !           632:                                : STABS_DBX_REGISTER_NUMBER(n))

unix.superglobalmegacorp.com

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