Annotation of gcc/config/nextstep.h, revision 1.1.1.2

1.1       root        1: /* nextstep.h -- operating system specific defines to be used when
                      2:    targeting GCC for NeXTSTEP.
                      3:    Copyright (C) 1989, 1990, 1991, 1992, 1993 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: /* Use new NeXT include file search path.
                     22:    In a cross compiler with NeXT as target, don't expect
                     23:    the host to use Next's directory scheme.  */
                     24: 
                     25: #ifndef CROSS_COMPILE
                     26: #undef INCLUDE_DEFAULTS
                     27: #define INCLUDE_DEFAULTS                               \
                     28:   {                                                    \
1.1.1.2 ! root       29:     { GPLUSPLUS_INCLUDE_DIR, 1, 1 },                   \
        !            30:     { LOCAL_INCLUDE_DIR, 0, 1 },                       \
        !            31:     { TOOL_INCLUDE_DIR, 0, 1 },                                \
        !            32:     { GCC_INCLUDE_DIR, 0, 0 },                         \
1.1       root       33:     /* These are for fixincludes-fixed ansi/bsd headers        \
                     34:        which wouldn't be found otherwise.              \
                     35:        (The use of string catenation here is OK since  \
                     36:        NeXT's native compiler is derived from GCC.) */ \
1.1.1.2 ! root       37:     { GCC_INCLUDE_DIR "/ansi", 0, 0 },                 \
        !            38:     { GCC_INCLUDE_DIR "/bsd", 0, 0 },                  \
        !            39:     { "/NextDeveloper/Headers", 0, 0 },                        \
        !            40:     { "/NextDeveloper/Headers/ansi", 0, 0 },           \
        !            41:     { "/NextDeveloper/Headers/bsd", 0, 0 },            \
        !            42:     { "/LocalDeveloper/Headers", 0, 0 },               \
        !            43:     { "/LocalDeveloper/Headers/ansi", 0, 0 },          \
        !            44:     { "/LocalDeveloper/Headers/bsd", 0, 0 },           \
        !            45:     { "/NextDeveloper/2.0CompatibleHeaders", 0, 0 },   \
        !            46:     { STANDARD_INCLUDE_DIR, 0, 0 },                    \
        !            47:     { "/usr/include/bsd", 0, 0 },                      \
        !            48:     { 0, 0, 0 }                                                \
1.1       root       49:   }
                     50: #endif /* CROSS_COMPILE */
                     51: 
                     52: #undef EXTRA_FORMAT_FUNCTIONS
                     53: #define EXTRA_FORMAT_FUNCTIONS \
                     54:       "NXPrintf",      FALSE,  2,      FALSE,  \
                     55:       "NXScanf",       TRUE,   2,      FALSE,  \
                     56:       "NXVPrintf",     FALSE,  2,      TRUE,   \
                     57:       "NXVScanf",      TRUE,   2,      TRUE,   \
                     58:       "DPSPrintf",     FALSE,  2,      FALSE,  \
                     59:       "bsd_sprintf",   FALSE,  2,      FALSE,  \
                     60:       "bsd_vsprintf",  FALSE,  2,      TRUE,
                     61: 
                     62: /* Make -fnext-runtime the default.  */
                     63: 
                     64: #define NEXT_OBJC_RUNTIME
                     65: 
                     66: /* We have atexit.  */
                     67: 
                     68: #define HAVE_ATEXIT
                     69: 
                     70: /* Enable recent gcc to compile under the old gcc in Next release 1.0.  */
                     71: 
                     72: #define __inline inline
                     73: 
                     74: /* wchar_t is unsigned short */
                     75: 
                     76: #undef WCHAR_TYPE
                     77: #define WCHAR_TYPE "short unsigned int"
                     78: #undef WCHAR_TYPE_SIZE
                     79: #define WCHAR_TYPE_SIZE (BITS_PER_WORD / 2)
                     80: 
                     81: /* Don't default to pcc-struct-return, because gcc is the only compiler, and
                     82:    we want to retain compatibility with older gcc versions.  */
                     83: 
                     84: #undef DEFAULT_PCC_STRUCT_RETURN
                     85: #define DEFAULT_PCC_STRUCT_RETURN 0
                     86: 
                     87: /* These compiler options take n arguments.  */
                     88: 
                     89: #undef WORD_SWITCH_TAKES_ARG
                     90: #define WORD_SWITCH_TAKES_ARG(STR)             \
                     91:   (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) ? 1 :   \
                     92:    !strcmp (STR, "segalign") ? 1 :             \
                     93:    !strcmp (STR, "seg1addr") ? 1 :             \
                     94:    !strcmp (STR, "segaddr") ? 2 :              \
                     95:    !strcmp (STR, "sectobjectsymbols") ? 2 :    \
                     96:    !strcmp (STR, "segprot") ? 3 :              \
                     97:    !strcmp (STR, "sectcreate") ? 3 :           \
                     98:    !strcmp (STR, "sectalign") ? 3 :            \
                     99:    !strcmp (STR, "segcreate") ? 3 :            \
                    100:    !strcmp (STR, "sectorder") ? 3 :            \
                    101:    !strcmp (STR, "siff-mask") ? 1 :            \
                    102:    !strcmp (STR, "siff-filter") ? 1 :          \
                    103:    !strcmp (STR, "siff-warning") ? 1 :         \
                    104:    !strcmp (STR, "arch") ? 1 :                 \
                    105:    !strcmp (STR, "pagezero_size") ? 1 :                \
                    106:    0)
                    107: 
                    108: #undef WORD_SWITCH
                    109: #define WORD_SWITCH(STR)                       \
                    110:   (WORD_SWITCH_TAKES_ARG (STR)                 \
                    111:    || !strcmp (STR, "bsd")                     \
                    112:    || !strcmp (STR, "object")                  \
                    113:    || !strcmp (STR, "ObjC")                    \
                    114:    || !strcmp (STR, "all_load"))
                    115: 
                    116: /* Machine dependent ccp options.  */
                    117: 
                    118: #undef CPP_SPEC
                    119: #define CPP_SPEC "%{!traditional: -D__STDC__}            \
                    120:                   %{posixstrict:-D_POSIX_SOURCE}         \
                    121:                   %{!posixstrict:%{bsd:-D__STRICT_BSD__} \
                    122:                   %{posix:-D_POSIX_SOURCE}               \
                    123:                   %{!ansi:-D_NEXT_SOURCE}}               \
                    124:                   %{MD:-MD %M} %{MMD:-MMD %M}"
                    125: 
                    126: /* Machine dependent ld options.  */
                    127: 
                    128: #undef LINK_SPEC
                    129: #define LINK_SPEC "%{Z} %{M} \
                    130: %{execute*} %{preload*} %{fvmlib*} \
                    131: %{segalign*} %{seg1addr*} %{segaddr*} %{segprot*} \
                    132: %{pagezero_size*} \
                    133: %{seglinkedit*} %{noseglinkedit*} \
                    134: %{sectcreate*} %{sectalign*} %{sectobjectsymbols}\
                    135: %{segcreate*} %{Mach*} %{whyload} %{w} \
                    136: %{sectorder*} %{whatsloaded} %{ObjC} %{all_load} %{object}"
                    137: 
                    138: /* Machine dependent libraries.  */
                    139: 
                    140: #undef LIB_SPEC
                    141: #define LIB_SPEC "%{!posix*:-lsys_s} %{posix*:-lposix}"
                    142: 
                    143: /* We specify crt0.o as -lcrt0.o so that ld will search the library path. */
                    144: 
                    145: #undef STARTFILE_SPEC
                    146: #define STARTFILE_SPEC  \
                    147:     "%{!posix*:%{pg:-lgcrt0.o}%{!pg: \
                    148:      %{p:%e-p profiling is no longer supported.  Use -pg instead.} \
                    149:      %{!p:-lcrt0.o}}}\
                    150:      %{posix*:%{pg:-lgposixcrt0.o}%{!pg: \
                    151:      %{p:%e-p profiling is no longer supported.  Use -pg instead.} \
                    152:      %{!p:-lposixcrt0.o}}}"
                    153: 
                    154: /* Why not? */
                    155: 
                    156: #undef DOLLARS_IN_IDENTIFIERS
                    157: #define DOLLARS_IN_IDENTIFIERS 2
                    158: 
                    159: /* Allow #sscs (but don't do anything). */
                    160: 
                    161: #define SCCS_DIRECTIVE
                    162: 
                    163: /* We use Dbx symbol format.  */
                    164: 
                    165: #undef SDB_DEBUGGING_INFO
                    166: #undef XCOFF_DEBUGGING_INFO
                    167: #define DBX_DEBUGGING_INFO
                    168: 
                    169: /* This saves a fair amount of space. */
                    170: 
                    171: #undef DBX_CONTIN_LENGTH
                    172: #define DBX_CONTIN_LENGTH 0
                    173: 
                    174: /* These screw up NeXT's gdb at the moment, so don't use them. */
                    175: 
                    176: #undef DBX_OUTPUT_MAIN_SOURCE_DIRECTORY
                    177: #define DBX_OUTPUT_MAIN_SOURCE_DIRECTORY(FILE, FILENAME)
                    178: 
                    179: /* These come from bsd386.h, but are specific to sequent, so make sure
                    180:    they don't bite us.  */
                    181: 
                    182: #undef DBX_NO_XREFS
                    183: #undef DBX_CONTIN_LENGTH
                    184: 
                    185: /* gdb needs a null N_SO at the end of each file for scattered loading. */
                    186: 
                    187: #undef DBX_OUTPUT_MAIN_SOURCE_FILE_END
                    188: #define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME)                        \
                    189:   fprintf (FILE,                                                       \
                    190:           "\t.text\n\t.stabs \"%s\",%d,0,0,Letext\nLetext:\n",         \
                    191:           "" , N_SO)
                    192: 
                    193: /* Don't use .gcc_compiled symbols to communicate with GDB;
                    194:    They interfere with numerically sorted symbol lists. */
                    195: 
                    196: #undef ASM_IDENTIFY_GCC
                    197: #define ASM_IDENTIFY_GCC(asm_out_file)
                    198: #undef INIT_SECTION_ASM_OP
                    199: #define INIT_SECTION_ASM_OP
                    200: #undef INVOKE__main
                    201: 
                    202: #undef ASM_OUTPUT_CONSTRUCTOR
                    203: #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME)                       \
                    204:   do { constructor_section ();                                  \
                    205:        ASM_OUTPUT_ALIGN (FILE, 1);                              \
                    206:        fprintf (FILE, "\t.long ");                              \
                    207:        assemble_name (FILE, NAME);                              \
                    208:        fprintf (FILE, "\n");                                    \
                    209:        fprintf (FILE, ".reference .constructors_used\n");       \
                    210:       } while (0)
                    211: 
                    212: #undef ASM_OUTPUT_DESTRUCTOR
                    213: #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME)                        \
                    214:   do { destructor_section ();                                   \
                    215:        ASM_OUTPUT_ALIGN (FILE, 1);                              \
                    216:        fprintf (FILE, "\t.long ");                              \
                    217:        assemble_name (FILE, NAME);                              \
                    218:        fprintf (FILE, "\n");                                    \
                    219:        fprintf (FILE, ".reference .destructors_used\n");        \
                    220:       } while (0)
                    221: 
                    222: /* Don't output a .file directive.  That is only used by the assembler for
                    223:    error reporting.  */
                    224: #undef ASM_FILE_START
                    225: #define ASM_FILE_START(FILE)
                    226: 
                    227: #undef ASM_FILE_END
                    228: #define ASM_FILE_END(FILE)                                     \
                    229:   do {                                                         \
                    230:     extern char *language_string;                              \
                    231:     if (strcmp (language_string, "GNU C++") == 0)              \
                    232:       {                                                                \
                    233:        constructor_section ();                                 \
                    234:        destructor_section ();                                  \
                    235:        ASM_OUTPUT_ALIGN (FILE, 1);                             \
                    236:       }                                                                \
                    237:   } while (0)
                    238: 
                    239: /* How to parse #pragma's */
                    240: 
                    241: #undef HANDLE_PRAGMA
                    242: #define HANDLE_PRAGMA(finput) handle_pragma (finput, &get_directive_line)
                    243: 
                    244: /* Give methods pretty symbol names on NeXT. */
                    245: 
                    246: #undef OBJC_GEN_METHOD_LABEL
                    247: #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \
                    248:   do { if (CAT_NAME)                                                   \
                    249:         sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+',          \
                    250:                  (CLASS_NAME), (CAT_NAME), (SEL_NAME));                \
                    251:        else                                                            \
                    252:         sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+',              \
                    253:                  (CLASS_NAME), (SEL_NAME));                            \
                    254:      } while (0)
                    255: 
                    256: /* Wrap new method names in quotes so the assembler doesn't gag.
                    257:    Make Objective-C internal symbols local.  */
                    258: 
                    259: #undef ASM_OUTPUT_LABELREF
                    260: #define ASM_OUTPUT_LABELREF(FILE,NAME) \
                    261:   do { if (NAME[0] == '+' || NAME[0] == '-') fprintf (FILE, "\"%s\"", NAME); \
                    262:        else if (!strncmp (NAME, "_OBJC_", 6)) fprintf (FILE, "L%s", NAME);   \
                    263:        else if (!strncmp (NAME, ".objc_class_name_", 17))              \
                    264:         fprintf (FILE, "%s", NAME);                                    \
                    265:        else fprintf (FILE, "_%s", NAME); } while (0)
                    266: 
                    267: #undef ALIGN_ASM_OP
                    268: #define ALIGN_ASM_OP           ".align"
                    269: 
                    270: #undef ASM_OUTPUT_ALIGN
                    271: #define ASM_OUTPUT_ALIGN(FILE,LOG)     \
                    272:   if ((LOG) != 0)                      \
                    273:     fprintf (FILE, "\t%s %d\n", ALIGN_ASM_OP, (LOG))
                    274: 
                    275: /* Ensure correct alignment of bss data.  */
                    276: 
                    277: #undef ASM_OUTPUT_ALIGNED_LOCAL
                    278: #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
                    279: ( fputs (".lcomm ", (FILE)),                           \
                    280:   assemble_name ((FILE), (NAME)),                      \
                    281:   fprintf ((FILE), ",%u,%u\n", (SIZE), floor_log2 ((ALIGN) / BITS_PER_UNIT)))
                    282: 
                    283: /* Output #ident as a .ident.  */
                    284: 
                    285: #undef ASM_OUTPUT_IDENT
                    286: #define ASM_OUTPUT_IDENT(FILE, NAME) fprintf (FILE, "\t.ident \"%s\"\n", NAME);
                    287: 
                    288: /* The maximum alignment which the object file format can support.
                    289:    For NeXT's Mach-O format, this is 2^15.  */
                    290: 
                    291: #undef MAX_OFILE_ALIGNMENT
                    292: #define MAX_OFILE_ALIGNMENT 0x8000
                    293: 
                    294: /* Create new Mach-O sections. */
                    295: 
                    296: #undef SECTION_FUNCTION
                    297: #define SECTION_FUNCTION(FUNCTION, SECTION, DIRECTIVE, WAS_TEXT, OBJC) \
                    298: void                                                                   \
                    299: FUNCTION ()                                                            \
                    300: {                                                                      \
                    301:   extern void text_section ();                                         \
                    302:   extern void objc_section_init ();                                    \
                    303:   extern int flag_no_mach_text_sections;                               \
                    304:                                                                        \
                    305:   if (WAS_TEXT && flag_no_mach_text_sections)                          \
                    306:     text_section ();                                                   \
                    307:   else if (in_section != SECTION)                                      \
                    308:     {                                                                  \
                    309:       if (OBJC)                                                                \
                    310:        objc_section_init ();                                           \
                    311:       fprintf (asm_out_file, "%s\n", DIRECTIVE);                       \
                    312:       in_section = SECTION;                                            \
                    313:     }                                                                  \
                    314: }                                                                      \
                    315: 
                    316: #undef EXTRA_SECTIONS
                    317: #define EXTRA_SECTIONS                                 \
                    318:   in_const, in_cstring, in_literal4, in_literal8,      \
                    319:   in_constructor, in_destructor,                       \
                    320:   in_objc_class, in_objc_meta_class, in_objc_category, \
                    321:   in_objc_class_vars, in_objc_instance_vars,           \
                    322:   in_objc_cls_meth, in_objc_inst_meth,                 \
                    323:   in_objc_cat_cls_meth, in_objc_cat_inst_meth,         \
                    324:   in_objc_selector_refs,                               \
                    325:   in_objc_symbols, in_objc_module_info,                        \
                    326:   in_objc_protocol, in_objc_string_object,             \
                    327:   in_objc_class_names, in_objc_meth_var_names,         \
                    328:   in_objc_meth_var_types, in_objc_cls_refs
                    329: 
                    330: #undef EXTRA_SECTION_FUNCTIONS
                    331: #define EXTRA_SECTION_FUNCTIONS                        \
                    332: SECTION_FUNCTION (const_section,               \
                    333:                  in_const,                     \
                    334:                  ".const", 1, 0)               \
                    335: SECTION_FUNCTION (cstring_section,             \
                    336:                  in_cstring,                   \
                    337:                  ".cstring", 1, 0)             \
                    338: SECTION_FUNCTION (literal4_section,            \
                    339:                  in_literal4,                  \
                    340:                  ".literal4", 1, 0)            \
                    341: SECTION_FUNCTION (literal8_section,            \
                    342:                  in_literal8,                  \
                    343:                  ".literal8", 1, 0)            \
                    344: SECTION_FUNCTION (constructor_section,         \
                    345:                  in_constructor,               \
                    346:                  ".constructor", 0, 0)         \
                    347: SECTION_FUNCTION (destructor_section,          \
                    348:                  in_destructor,                \
                    349:                  ".destructor", 0, 0)          \
                    350: SECTION_FUNCTION (objc_class_section,          \
                    351:                  in_objc_class,                \
                    352:                  ".objc_class", 0, 1)          \
                    353: SECTION_FUNCTION (objc_meta_class_section,     \
                    354:                  in_objc_meta_class,           \
                    355:                  ".objc_meta_class", 0, 1)     \
                    356: SECTION_FUNCTION (objc_category_section,       \
                    357:                  in_objc_category,             \
                    358:                ".objc_category", 0, 1)         \
                    359: SECTION_FUNCTION (objc_class_vars_section,     \
                    360:                  in_objc_class_vars,           \
                    361:                  ".objc_class_vars", 0, 1)     \
                    362: SECTION_FUNCTION (objc_instance_vars_section,  \
                    363:                  in_objc_instance_vars,        \
                    364:                  ".objc_instance_vars", 0, 1)  \
                    365: SECTION_FUNCTION (objc_cls_meth_section,       \
                    366:                  in_objc_cls_meth,             \
                    367:                  ".objc_cls_meth", 0, 1)       \
                    368: SECTION_FUNCTION (objc_inst_meth_section,      \
                    369:                  in_objc_inst_meth,            \
                    370:                  ".objc_inst_meth", 0, 1)      \
                    371: SECTION_FUNCTION (objc_cat_cls_meth_section,   \
                    372:                  in_objc_cat_cls_meth,         \
                    373:                  ".objc_cat_cls_meth", 0, 1)   \
                    374: SECTION_FUNCTION (objc_cat_inst_meth_section,  \
                    375:                  in_objc_cat_inst_meth,        \
                    376:                  ".objc_cat_inst_meth", 0, 1)  \
                    377: SECTION_FUNCTION (objc_selector_refs_section,  \
                    378:                  in_objc_selector_refs,        \
                    379:                  ".objc_message_refs", 0, 1)   \
                    380: SECTION_FUNCTION (objc_symbols_section,                \
                    381:                  in_objc_symbols,              \
                    382:                  ".objc_symbols", 0, 1)        \
                    383: SECTION_FUNCTION (objc_module_info_section,    \
                    384:                  in_objc_module_info,          \
                    385:                  ".objc_module_info", 0, 1)    \
                    386: SECTION_FUNCTION (objc_protocol_section,       \
                    387:                  in_objc_protocol,             \
                    388:                  ".objc_protocol", 0, 1)       \
                    389: SECTION_FUNCTION (objc_string_object_section,  \
                    390:                  in_objc_string_object,        \
                    391:                  ".objc_string_object", 0, 1)  \
                    392: SECTION_FUNCTION (objc_class_names_section,    \
                    393:                in_objc_class_names,            \
                    394:                ".objc_class_names", 0, 1)      \
                    395: SECTION_FUNCTION (objc_meth_var_names_section, \
                    396:                in_objc_meth_var_names,         \
                    397:                ".objc_meth_var_names", 0, 1)   \
                    398: SECTION_FUNCTION (objc_meth_var_types_section, \
                    399:                in_objc_meth_var_types,         \
                    400:                ".objc_meth_var_types", 0, 1)   \
                    401: SECTION_FUNCTION (objc_cls_refs_section,       \
                    402:                in_objc_cls_refs,               \
                    403:                ".objc_cls_refs", 0, 1)         \
                    404:                                                \
                    405: void                                           \
                    406: objc_section_init ()                           \
                    407: {                                              \
                    408:   static int been_here = 0;                    \
                    409:                                                \
                    410:   if (been_here == 0)                          \
                    411:     {                                          \
                    412:       been_here = 1;                           \
                    413:       objc_class_section ();                   \
                    414:       objc_meta_class_section ();              \
                    415:       objc_cat_cls_meth_section ();            \
                    416:       objc_cat_inst_meth_section ();           \
                    417:       objc_cls_meth_section ();                        \
                    418:       objc_inst_meth_section ();               \
                    419:       objc_selector_refs_section ();           \
                    420:       objc_symbols_section ();                 \
                    421:       objc_category_section ();                        \
                    422:       objc_protocol_section ();                        \
                    423:       objc_class_vars_section ();              \
                    424:       objc_instance_vars_section ();           \
                    425:       objc_module_info_section ();             \
                    426:       objc_string_object_section ();           \
                    427:       objc_class_names_section ();             \
                    428:       objc_meth_var_names_section ();          \
                    429:       objc_meth_var_types_section ();          \
                    430:       objc_cls_refs_section ();                        \
                    431:     }                                          \
                    432: }
                    433: 
                    434: #undef READONLY_DATA_SECTION
                    435: #define READONLY_DATA_SECTION const_section
                    436: 
                    437: #undef SELECT_SECTION
                    438: #define SELECT_SECTION(exp,reloc)                              \
                    439:   do                                                           \
                    440:     {                                                          \
                    441:       if (TREE_CODE (exp) == STRING_CST)                       \
                    442:        {                                                       \
                    443:          if (flag_writable_strings)                            \
                    444:            data_section ();                                    \
                    445:          else if (TREE_STRING_LENGTH (exp) !=                  \
                    446:                   strlen (TREE_STRING_POINTER (exp)) + 1)      \
                    447:            readonly_data_section ();                           \
                    448:          else                                                  \
                    449:            cstring_section ();                                 \
                    450:        }                                                       \
                    451:       else if (TREE_CODE (exp) == INTEGER_CST                  \
                    452:               || TREE_CODE (exp) == REAL_CST)                  \
                    453:         {                                                      \
                    454:          tree size = TYPE_SIZE (TREE_TYPE (exp));              \
                    455:                                                                \
                    456:          if (TREE_CODE (size) == INTEGER_CST &&                \
                    457:              TREE_INT_CST_LOW (size) == 4 &&                   \
                    458:              TREE_INT_CST_HIGH (size) == 0)                    \
                    459:            literal4_section ();                                \
                    460:          else if (TREE_CODE (size) == INTEGER_CST &&           \
                    461:              TREE_INT_CST_LOW (size) == 8 &&                   \
                    462:              TREE_INT_CST_HIGH (size) == 0)                    \
                    463:            literal8_section ();                                \
                    464:          else                                                  \
                    465:            readonly_data_section ();                           \
                    466:        }                                                       \
                    467:       else if (TREE_CODE (exp) == CONSTRUCTOR                          \
                    468:               && TREE_TYPE (exp)                                       \
                    469:               && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE            \
                    470:               && TYPE_NAME (TREE_TYPE (exp))                           \
                    471:               && TREE_CODE (TYPE_NAME (TREE_TYPE (exp))) == IDENTIFIER_NODE \
                    472:               && IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))))     \
                    473:        {                                                               \
                    474:          if (!strcmp (IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))), \
                    475:                        "NXConstantString"))                            \
                    476:          objc_string_object_section ();                                \
                    477:        else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))           \
                    478:                && !TREE_SIDE_EFFECTS (exp))                            \
                    479:          readonly_data_section ();                                     \
                    480:        else                                                            \
                    481:          data_section ();                                              \
                    482:       }                                                                        \
                    483:       else if (TREE_CODE (exp) == VAR_DECL &&                          \
                    484:               DECL_NAME (exp) &&                                       \
                    485:               TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE &&        \
                    486:               IDENTIFIER_POINTER (DECL_NAME (exp)) &&                  \
                    487:               !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) \
                    488:        {                                                               \
                    489:          const char *name = IDENTIFIER_POINTER (DECL_NAME (exp));      \
                    490:                                                                        \
                    491:          if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20))              \
                    492:            objc_cls_meth_section ();                                   \
                    493:          else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23))      \
                    494:            objc_inst_meth_section ();                                  \
                    495:          else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) \
                    496:            objc_cat_cls_meth_section ();                               \
                    497:          else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) \
                    498:            objc_cat_inst_meth_section ();                              \
                    499:          else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22))       \
                    500:            objc_class_vars_section ();                                 \
                    501:          else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25))    \
                    502:            objc_instance_vars_section ();                              \
                    503:          else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22))       \
                    504:            objc_cat_cls_meth_section ();                               \
                    505:          else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17))            \
                    506:            objc_class_names_section ();                                \
                    507:          else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20))         \
                    508:            objc_meth_var_names_section ();                             \
                    509:          else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20))         \
                    510:            objc_meth_var_types_section ();                             \
                    511:          else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22))       \
                    512:            objc_cls_refs_section ();                                   \
                    513:          else if (!strncmp (name, "_OBJC_CLASS_", 12))                 \
                    514:            objc_class_section ();                                      \
                    515:          else if (!strncmp (name, "_OBJC_METACLASS_", 16))             \
                    516:            objc_meta_class_section ();                                 \
                    517:          else if (!strncmp (name, "_OBJC_CATEGORY_", 15))              \
                    518:            objc_category_section ();                                   \
                    519:          else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25))    \
                    520:            objc_selector_refs_section ();                              \
                    521:          else if (!strncmp (name, "_OBJC_SYMBOLS", 13))                \
                    522:            objc_symbols_section ();                                    \
                    523:          else if (!strncmp (name, "_OBJC_MODULES", 13))                \
                    524:            objc_module_info_section ();                                \
                    525:          else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) \
                    526:            objc_cat_inst_meth_section ();                              \
                    527:          else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) \
                    528:            objc_cat_cls_meth_section ();                               \
                    529:          else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20))         \
                    530:            objc_cat_cls_meth_section ();                               \
                    531:          else if (!strncmp (name, "_OBJC_PROTOCOL_", 15))              \
                    532:            objc_protocol_section ();                                   \
                    533:          else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp))         \
                    534:                && !TREE_SIDE_EFFECTS (exp))                            \
                    535:            readonly_data_section ();                                   \
                    536:          else                                                          \
                    537:            data_section ();                                            \
                    538:        }                                                               \
1.1.1.2 ! root      539:       else if (TREE_CODE (exp) == VAR_DECL)                            \
        !           540:        {                                                               \
        !           541:          if ((flag_pic && reloc)                                       \
        !           542:              || !TREE_READONLY (exp) || TREE_SIDE_EFFECTS (exp)        \
        !           543:              || !DECL_INITIAL (exp)                                    \
        !           544:              || (DECL_INITIAL (exp) != error_mark_node                 \
        !           545:                  && !TREE_CONSTANT (DECL_INITIAL (exp))))              \
        !           546:            data_section ();                                            \
        !           547:          else                                                          \
        !           548:            readonly_data_section ();                                   \
        !           549:        }                                                               \
1.1       root      550:       else                                                             \
1.1.1.2 ! root      551:        readonly_data_section ();                                       \
1.1       root      552:     }                                                                  \
                    553:   while (0)
                    554: 
                    555: #undef SELECT_RTX_SECTION
                    556: #define SELECT_RTX_SECTION(mode, rtx)                                  \
                    557:   do                                                                   \
                    558:     {                                                                  \
                    559:       if (GET_MODE_SIZE(mode) == 8)                                    \
                    560:        literal8_section();                                             \
                    561:       else if (GET_MODE_SIZE(mode) == 4)                               \
                    562:        literal4_section();                                             \
                    563:       else                                                             \
                    564:        const_section ();                                               \
                    565:     }                                                                  \
                    566:   while (0)

unix.superglobalmegacorp.com

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