|
|
1.1 ! root 1: /* Target definitions for GNU compiler for hppa running HPUX with NeXT pdo ! 2: Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. ! 3: ! 4: This file is part of GNU CC. ! 5: ! 6: GNU CC is free software; you can redistribute it and/or modify ! 7: it under the terms of the GNU General Public License as published by ! 8: the Free Software Foundation; either version 2, or (at your option) ! 9: any later version. ! 10: ! 11: GNU CC is distributed in the hope that it will be useful, ! 12: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: GNU General Public License for more details. ! 15: ! 16: You should have received a copy of the GNU General Public License ! 17: along with GNU CC; see the file COPYING. If not, write to ! 18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 19: ! 20: /* added <jf> */ ! 21: #define USE_GAS ! 22: ! 23: /* this may not work for double values -- hard coded to 32 bit entities */ ! 24: ! 25: #define OBJC_FORWARDING_REG_OFFSET(ISREG, OFF, REGNO) \ ! 26: do { OFF = (FP_REG_CLASS_P( REGNO_REG_CLASS(REGNO)) \ ! 27: ? -2 * ((REGNO) - 44) - 4 \ ! 28: : 4 * ((REGNO) - 26) - 4); \ ! 29: ISREG = 0; } while (0) ! 30: ! 31: /* pa1-ghpux originally includes pa-ghpux.h and pa.h */ ! 32: #include "pa/pa1-ghpux.h" ! 33: ! 34: #define NEXT_OBJC_RUNTIME ! 35: ! 36: #define OBJC_HPUX_PADDING ! 37: ! 38: #define NEXT_PDO ! 39: ! 40: /* ! 41: * overrides for the funky places we put stuff ! 42: * there was a bug in the beta where the /usr was not prefixed ! 43: */ ! 44: #undef INCLUDE_DEFAULTS ! 45: #define INCLUDE_DEFAULTS \ ! 46: { \ ! 47: { GPLUSPLUS_INCLUDE_DIR, 1}, \ ! 48: { GCC_INCLUDE_DIR, 0}, \ ! 49: { LOCAL_INCLUDE_DIR, 0}, \ ! 50: { "/usr/NextDeveloper/Headers", 0}, \ ! 51: { "/usr/NextDeveloper/Headers/ansi", 0}, \ ! 52: { "/usr/NextDeveloper/Headers/bsd", 0}, \ ! 53: { "/usr/LocalDeveloper/Headers", 0}, \ ! 54: { "/usr/LocalDeveloper/Headers/ansi", 0}, \ ! 55: { "/usr/LocalDeveloper/Headers/bsd", 0}, \ ! 56: { STANDARD_INCLUDE_DIR, 0}, \ ! 57: { 0, 0} \ ! 58: } ! 59: ! 60: /* ! 61: #define REPORT_EVENT(TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3) \ ! 62: make_support (TYPE, NAME, FILE, LINE, MSG, ARG1, ARG2, ARG3) ! 63: */ ! 64: ! 65: /* ! 66: * override default prefix behavior ! 67: */ ! 68: ! 69: #undef STANDARD_EXEC_PREFIX ! 70: #define STANDARD_EXEC_PREFIX "/usr/NextDeveloper/lib/" ! 71: /* when looking for specs */ ! 72: #undef STANDARD_STARTFILE_PREFIX ! 73: #define STANDARD_STARTFILE_PREFIX "/usr/NextDeveloper/lib/" ! 74: #undef TOOLDIR_BASE_PREFIX ! 75: #define TOOLDIR_BASE_PREFIX "/usr/NextDeveloper/" ! 76: ! 77: /* ! 78: * specs ! 79: * ! 80: */ ! 81: ! 82: /* should -L really be in LIB_SPEC ? <jf> */ ! 83: #undef LIB_SPEC ! 84: #define LIB_SPEC "%{!p:%{!pg:-L/usr/NextDeveloper/lib -lpdo -lc -lm}}%{p:-L/usr/NextDeveloper/lib -L/lib/libp/ -lpdo -lc -lm}%{pg:-L/usr/NextDeveloper/lib -L/lib/libp/ -lpdo -lc -lm}" ! 85: ! 86: #ifndef STARTFILE_SPEC ! 87: #define STARTFILE_SPEC \ ! 88: "%{pg:gcrt0.o%s crtPDO.o%s}%{!pg:%{p:mcrt0.o%s crtPDO.o%s}%{!p:crt0.o%s crtPDO.o%s}}" ! 89: #endif ! 90: ! 91: /* config.h can define ENDFILE_SPEC to override the default crtn files. */ ! 92: #ifndef ENDFILE_SPEC ! 93: #define ENDFILE_SPEC "crtnPDO.o%s" ! 94: #endif ! 95: ! 96: ! 97: /* RIPPED OFF FROM nextstep.h */ ! 98: ! 99: /* Give methods pretty symbol names on NeXT. */ ! 100: ! 101: #undef OBJC_GEN_METHOD_LABEL ! 102: #define OBJC_GEN_METHOD_LABEL(BUF,IS_INST,CLASS_NAME,CAT_NAME,SEL_NAME,NUM) \ ! 103: do { if (CAT_NAME) \ ! 104: sprintf (BUF, "%c[%s(%s) %s]", (IS_INST) ? '-' : '+', \ ! 105: (CLASS_NAME), (CAT_NAME), (SEL_NAME)); \ ! 106: else \ ! 107: sprintf (BUF, "%c[%s %s]", (IS_INST) ? '-' : '+', \ ! 108: (CLASS_NAME), (SEL_NAME)); \ ! 109: } while (0) ! 110: ! 111: /* Wrap new method names in quotes so the assembler doesn't gag. ! 112: Make Objective-C internal symbols local. */ ! 113: ! 114: /* work around the gnu'ism of the @ at the begining of the symbol name */ ! 115: ! 116: #undef ASM_OUTPUT_LABELREF ! 117: #define ASM_OUTPUT_LABELREF(FILE,NAME) \ ! 118: do { \ ! 119: if (FUNCTION_NAME_P (NAME) && (NAME[1] == '+' || NAME[1] == '-')) \ ! 120: fprintf (FILE, "\"%s\"", NAME+1); \ ! 121: else if (NAME[0] == '+' || NAME[0] == '-') \ ! 122: fprintf (FILE, "\"%s\"", NAME[0]); \ ! 123: else if (!strncmp (NAME, "_OBJC_", 6)) \ ! 124: fprintf (FILE, "L%s", NAME); \ ! 125: else if (!strncmp (NAME, ".objc_class_name_", 17)) \ ! 126: fprintf (FILE, "%s", NAME); \ ! 127: else fprintf ((FILE), "%s", (NAME) + (FUNCTION_NAME_P (NAME) ? 1 : 0)); } while (0) ! 128: ! 129: ! 130: /* This is how to output an assembler line defining an `int' constant. ! 131: this is used in the OBJC_INSTANCE_METHODS segment ! 132: removed code that put P% infront of code being linked to shared libs ! 133: */ ! 134: ! 135: #undef ASM_OUTPUT_INT ! 136: #define ASM_OUTPUT_INT(FILE,VALUE) \ ! 137: { fprintf (FILE, "\t.word "); \ ! 138: if (function_label_operand (VALUE, VOIDmode) \ ! 139: && in_section != in_text) \ ! 140: fprintf (FILE, "P%%"); \ ! 141: output_addr_const (FILE, (VALUE)); \ ! 142: fprintf (FILE, "\n");} ! 143: ! 144: /* from josh */ ! 145: ! 146: ! 147: #undef SECTION_FUNCTION ! 148: #define SECTION_FUNCTION(FUNCTION, SECTION, SUBSPACE) \ ! 149: void \ ! 150: FUNCTION () \ ! 151: { \ ! 152: extern void text_section (); \ ! 153: extern void objc_section_init (); \ ! 154: extern int flag_no_mach_text_sections; \ ! 155: static int been_here = 0; \ ! 156: \ ! 157: if (in_section != SECTION) \ ! 158: { \ ! 159: objc_section_init (); \ ! 160: fprintf (asm_out_file, "\t.SPACE $PRIVATE$\n"); \ ! 161: fprintf (asm_out_file, "\t.SUBSPA %s", SUBSPACE); \ ! 162: if (!been_here) { \ ! 163: fprintf(asm_out_file,",QUAD=1,ALIGN=4,ACCESS=31"); \ ! 164: been_here = 1; \ ! 165: } \ ! 166: fprintf(asm_out_file,"\n"); \ ! 167: in_section = SECTION; \ ! 168: } \ ! 169: } \ ! 170: ! 171: #undef EXTRA_SECTIONS ! 172: #define EXTRA_SECTIONS in_bss, in_readonly_data, \ ! 173: in_objc_class, in_objc_meta_class, in_objc_category, \ ! 174: in_objc_class_vars, in_objc_instance_vars, \ ! 175: in_objc_cls_meth, in_objc_inst_meth, \ ! 176: in_objc_cat_cls_meth, in_objc_cat_inst_meth, \ ! 177: in_objc_selector_refs, \ ! 178: in_objc_symbols, in_objc_module_info, \ ! 179: in_objc_protocol, in_objc_string_object, \ ! 180: in_objc_class_names, in_objc_meth_var_names, \ ! 181: in_objc_meth_var_types, in_objc_cls_refs ! 182: ! 183: #undef EXTRA_SECTION_FUNCTIONS ! 184: #define EXTRA_SECTION_FUNCTIONS \ ! 185: void \ ! 186: bss_section () \ ! 187: { \ ! 188: if (in_section != in_bss) \ ! 189: { \ ! 190: fprintf (asm_out_file, "%s\n", \ ! 191: BSS_SECTION_ASM_OP); \ ! 192: in_section = in_bss; \ ! 193: } \ ! 194: } \ ! 195: void \ ! 196: readonly_data () \ ! 197: { \ ! 198: if (in_section != in_readonly_data) \ ! 199: { \ ! 200: fprintf (asm_out_file, "%s\n", \ ! 201: READONLY_DATA_ASM_OP); \ ! 202: in_section = in_readonly_data; \ ! 203: } \ ! 204: } \ ! 205: SECTION_FUNCTION (objc_class_section, \ ! 206: in_objc_class, \ ! 207: "$$OBJC_CLASS$$") \ ! 208: SECTION_FUNCTION (objc_meta_class_section, \ ! 209: in_objc_meta_class, \ ! 210: "$$OBJC_METACLASS$$") \ ! 211: SECTION_FUNCTION (objc_category_section, \ ! 212: in_objc_category, \ ! 213: "$$OBJC_CATEGORY$$") \ ! 214: SECTION_FUNCTION (objc_class_vars_section, \ ! 215: in_objc_class_vars, \ ! 216: "$$OBJC_CLASS_VARS$$") \ ! 217: SECTION_FUNCTION (objc_instance_vars_section, \ ! 218: in_objc_instance_vars, \ ! 219: "$$OBJC_INSTANCE_VARS$$") \ ! 220: SECTION_FUNCTION (objc_cls_meth_section, \ ! 221: in_objc_cls_meth, \ ! 222: "$$OBJC_CLS_METH$$") \ ! 223: SECTION_FUNCTION (objc_inst_meth_section, \ ! 224: in_objc_inst_meth, \ ! 225: "$$OBJC_INST_METHODS$$") \ ! 226: SECTION_FUNCTION (objc_cat_cls_meth_section, \ ! 227: in_objc_cat_cls_meth, \ ! 228: "$$OBJC_CAT_CLS_METH$$") \ ! 229: SECTION_FUNCTION (objc_cat_inst_meth_section, \ ! 230: in_objc_cat_inst_meth, \ ! 231: "$$OBJC_CAT_INST_METH$$") \ ! 232: SECTION_FUNCTION (objc_selector_refs_section, \ ! 233: in_objc_selector_refs, \ ! 234: "$$OBJC_MESSAGE_REFS$$") \ ! 235: SECTION_FUNCTION (objc_symbols_section, \ ! 236: in_objc_symbols, \ ! 237: "$$OBJC_SYMBOLS$$") \ ! 238: SECTION_FUNCTION (objc_module_info_section, \ ! 239: in_objc_module_info, \ ! 240: "$$OBJC_MODULES$$") \ ! 241: SECTION_FUNCTION (objc_protocol_section, \ ! 242: in_objc_protocol, \ ! 243: "$$OBJC_PROTOCOL$$") \ ! 244: SECTION_FUNCTION (objc_string_object_section, \ ! 245: in_objc_string_object, \ ! 246: "$$OBJC_STRING_OBJECT$$") \ ! 247: SECTION_FUNCTION (objc_class_names_section, \ ! 248: in_objc_class_names, \ ! 249: "$$OBJC_CLASS_NAMES$$") \ ! 250: SECTION_FUNCTION (objc_meth_var_names_section, \ ! 251: in_objc_meth_var_names, \ ! 252: "$$OBJC_METH_VAR_NAMES$$") \ ! 253: SECTION_FUNCTION (objc_meth_var_types_section, \ ! 254: in_objc_meth_var_types, \ ! 255: "$$OBJC_METH_VAR_TYPES$$") \ ! 256: SECTION_FUNCTION (objc_cls_refs_section, \ ! 257: in_objc_cls_refs, \ ! 258: "$$OBJC_CLS_REFS$$") \ ! 259: \ ! 260: void \ ! 261: objc_section_init () \ ! 262: { \ ! 263: static int been_here = 0; \ ! 264: \ ! 265: if (been_here == 0) \ ! 266: { \ ! 267: been_here = 1; \ ! 268: objc_class_section (); \ ! 269: objc_meta_class_section (); \ ! 270: objc_cat_cls_meth_section (); \ ! 271: objc_cat_inst_meth_section (); \ ! 272: objc_cls_meth_section (); \ ! 273: objc_inst_meth_section (); \ ! 274: objc_selector_refs_section (); \ ! 275: objc_symbols_section (); \ ! 276: objc_category_section (); \ ! 277: objc_protocol_section (); \ ! 278: objc_class_vars_section (); \ ! 279: objc_instance_vars_section (); \ ! 280: objc_module_info_section (); \ ! 281: objc_string_object_section (); \ ! 282: objc_class_names_section (); \ ! 283: objc_meth_var_names_section (); \ ! 284: objc_meth_var_types_section (); \ ! 285: objc_cls_refs_section (); \ ! 286: } \ ! 287: } ! 288: ! 289: /* different from NS version in that no literalX_section */ ! 290: #undef SELECT_SECTION ! 291: #define SELECT_SECTION(exp,reloc) \ ! 292: do \ ! 293: { \ ! 294: if (TREE_CODE (exp) == STRING_CST) \ ! 295: { \ ! 296: if (flag_writable_strings) \ ! 297: data_section (); \ ! 298: else \ ! 299: readonly_data_section (); \ ! 300: } \ ! 301: else if (TREE_CODE (exp) == INTEGER_CST \ ! 302: || TREE_CODE (exp) == REAL_CST) \ ! 303: { \ ! 304: readonly_data_section (); \ ! 305: } \ ! 306: else if (TREE_CODE (exp) == CONSTRUCTOR \ ! 307: && TREE_TYPE (exp) \ ! 308: && TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE \ ! 309: && TYPE_NAME (TREE_TYPE (exp)) \ ! 310: && TREE_CODE (TYPE_NAME (TREE_TYPE (exp))) == IDENTIFIER_NODE \ ! 311: && IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp)))) \ ! 312: { \ ! 313: if (!strcmp (IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (exp))), \ ! 314: "NXConstantString")) \ ! 315: objc_string_object_section (); \ ! 316: else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp)) \ ! 317: && !TREE_SIDE_EFFECTS (exp)) \ ! 318: readonly_data_section (); \ ! 319: else \ ! 320: data_section (); \ ! 321: } \ ! 322: else if (TREE_CODE (exp) == VAR_DECL && \ ! 323: DECL_NAME (exp) && \ ! 324: TREE_CODE (DECL_NAME (exp)) == IDENTIFIER_NODE && \ ! 325: IDENTIFIER_POINTER (DECL_NAME (exp)) && \ ! 326: !strncmp (IDENTIFIER_POINTER (DECL_NAME (exp)), "_OBJC_", 6)) \ ! 327: { \ ! 328: const char *name = IDENTIFIER_POINTER (DECL_NAME (exp)); \ ! 329: \ ! 330: if (!strncmp (name, "_OBJC_CLASS_METHODS_", 20)) \ ! 331: objc_cls_meth_section (); \ ! 332: else if (!strncmp (name, "_OBJC_INSTANCE_METHODS_", 23)) \ ! 333: objc_inst_meth_section (); \ ! 334: else if (!strncmp (name, "_OBJC_CATEGORY_CLASS_METHODS_", 20)) \ ! 335: objc_cat_cls_meth_section (); \ ! 336: else if (!strncmp (name, "_OBJC_CATEGORY_INSTANCE_METHODS_", 23)) \ ! 337: objc_cat_inst_meth_section (); \ ! 338: else if (!strncmp (name, "_OBJC_CLASS_VARIABLES_", 22)) \ ! 339: objc_class_vars_section (); \ ! 340: else if (!strncmp (name, "_OBJC_INSTANCE_VARIABLES_", 25)) \ ! 341: objc_instance_vars_section (); \ ! 342: else if (!strncmp (name, "_OBJC_CLASS_PROTOCOLS_", 22)) \ ! 343: objc_cat_cls_meth_section (); \ ! 344: else if (!strncmp (name, "_OBJC_CLASS_NAME_", 17)) \ ! 345: objc_class_names_section (); \ ! 346: else if (!strncmp (name, "_OBJC_METH_VAR_NAME_", 20)) \ ! 347: objc_meth_var_names_section (); \ ! 348: else if (!strncmp (name, "_OBJC_METH_VAR_TYPE_", 20)) \ ! 349: objc_meth_var_types_section (); \ ! 350: else if (!strncmp (name, "_OBJC_CLASS_REFERENCES", 22)) \ ! 351: objc_cls_refs_section (); \ ! 352: else if (!strncmp (name, "_OBJC_CLASS_", 12)) \ ! 353: objc_class_section (); \ ! 354: else if (!strncmp (name, "_OBJC_METACLASS_", 16)) \ ! 355: objc_meta_class_section (); \ ! 356: else if (!strncmp (name, "_OBJC_CATEGORY_", 15)) \ ! 357: objc_category_section (); \ ! 358: else if (!strncmp (name, "_OBJC_SELECTOR_REFERENCES", 25)) \ ! 359: objc_selector_refs_section (); \ ! 360: else if (!strncmp (name, "_OBJC_SYMBOLS", 13)) \ ! 361: objc_symbols_section (); \ ! 362: else if (!strncmp (name, "_OBJC_MODULES", 13)) \ ! 363: objc_module_info_section (); \ ! 364: else if (!strncmp (name, "_OBJC_PROTOCOL_INSTANCE_METHODS_", 32)) \ ! 365: objc_cat_inst_meth_section (); \ ! 366: else if (!strncmp (name, "_OBJC_PROTOCOL_CLASS_METHODS_", 29)) \ ! 367: objc_cat_cls_meth_section (); \ ! 368: else if (!strncmp (name, "_OBJC_PROTOCOL_REFS_", 20)) \ ! 369: objc_cat_cls_meth_section (); \ ! 370: else if (!strncmp (name, "_OBJC_PROTOCOL_", 15)) \ ! 371: objc_protocol_section (); \ ! 372: else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp)) \ ! 373: && !TREE_SIDE_EFFECTS (exp)) \ ! 374: readonly_data_section (); \ ! 375: else \ ! 376: data_section (); \ ! 377: } \ ! 378: else if ((TREE_READONLY (exp) || TREE_CONSTANT (exp)) \ ! 379: && !TREE_SIDE_EFFECTS (exp)) \ ! 380: readonly_data_section (); \ ! 381: else \ ! 382: data_section (); \ ! 383: } \ ! 384: while (0) ! 385: ! 386: /* this was added to support unresolved references in the gas assembler */ ! 387: #undef DECLARE_UNRESOLVED_REFERENCE ! 388: ! 389: ! 390:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.