|
|
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.