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

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

unix.superglobalmegacorp.com

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