|
|
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: { \ ! 29: { GPLUSPLUS_INCLUDE_DIR, 1}, \ ! 30: { LOCAL_INCLUDE_DIR, 0}, \ ! 31: { TOOL_INCLUDE_DIR, 0 }, \ ! 32: { GCC_INCLUDE_DIR, 0}, \ ! 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.) */ \ ! 37: { GCC_INCLUDE_DIR "/ansi", 0 }, \ ! 38: { GCC_INCLUDE_DIR "/bsd", 0 }, \ ! 39: { "/NextDeveloper/Headers", 0}, \ ! 40: { "/NextDeveloper/Headers/ansi", 0}, \ ! 41: { "/NextDeveloper/Headers/bsd", 0}, \ ! 42: { "/LocalDeveloper/Headers", 0}, \ ! 43: { "/LocalDeveloper/Headers/ansi", 0}, \ ! 44: { "/LocalDeveloper/Headers/bsd", 0}, \ ! 45: { "/NextDeveloper/2.0CompatibleHeaders", 0}, \ ! 46: { STANDARD_INCLUDE_DIR, 0}, \ ! 47: { "/usr/include/bsd", 0}, \ ! 48: { 0, 0} \ ! 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: } \ ! 539: else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp)) \ ! 540: && !TREE_SIDE_EFFECTS (exp)) \ ! 541: readonly_data_section (); \ ! 542: else \ ! 543: data_section (); \ ! 544: } \ ! 545: while (0) ! 546: ! 547: #undef SELECT_RTX_SECTION ! 548: #define SELECT_RTX_SECTION(mode, rtx) \ ! 549: do \ ! 550: { \ ! 551: if (GET_MODE_SIZE(mode) == 8) \ ! 552: literal8_section(); \ ! 553: else if (GET_MODE_SIZE(mode) == 4) \ ! 554: literal4_section(); \ ! 555: else \ ! 556: const_section (); \ ! 557: } \ ! 558: while (0)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.