]>
Commit | Line | Data |
---|---|---|
66bd0128 JW |
1 | The following patches are needed in order to build GNAT with EGCS. |
2 | ||
3 | These patches were tested with egcs-980308 and gnat-3.10p on a mips-sgi-irix6.3 | |
4 | system. The gnat build succeeded as per the instructions in the gnat | |
5 | README.BUILD file for building one library, except that CFLAGS="-O -g" and | |
6 | GNATLIBCFLAGS="-O -g" were substituted for the recommended "-O2" so that the | |
7 | build could be debugged. There was no attempt to run the resulting build | |
8 | against any testsuite or validation suite. | |
9 | ||
10 | -- | |
11 | ||
12 | Developers Notes: | |
13 | ||
14 | Every use of sizetype in the Ada front end should be checked to see if perhaps | |
15 | it should be using bitsizetype instead. The change to maybe_pad_type is just | |
16 | a hack to work around this problem, and may not be desirable in the long term. | |
17 | ||
18 | There are many places in the Ada front end where it calls operand_equal_p to | |
19 | see if two type sizes are the same. operand_equal_p fails if the two | |
20 | arguments have different TYPE_MODEs. sizetype and bitsizetype can have | |
21 | different TYPE_MODEs. Thus this code can fail if one type size is based | |
22 | on sizetype, and the other is based on bitsizetype. The change to | |
23 | maybe_pad_type fixes one very critical place where this happens. There may | |
24 | be others. | |
25 | ||
26 | -- | |
27 | ||
28 | Mon Mar 16 11:00:25 1998 Jim Wilson <wilson@cygnus.com> | |
29 | ||
30 | * a-gtran3.c (maybe_pad_type): Convert both size and orig_size to | |
31 | sizetype if they have differing modes. | |
32 | * a-misc.c (gnat_tree_code_type): Change from string to char array. | |
33 | (init_lex): Delete realloc calls for tree_code_* globals. Adjust | |
34 | bcopy call for gnat_tree_code_type change. | |
35 | * a-tree.def: Adjust for tree_code_* type changes. | |
36 | ||
4c43cd29 JL |
37 | * a-misc.c (init_lex): Rename to init_parse. |
38 | ||
39 | diff -c ada/a-gtran3.c /home/brolley/comp/egcs/tmp/ada/a-gtran3.c | |
40 | *** ada/a-gtran3.c Mon Mar 30 16:29:04 1998 | |
41 | --- /home/brolley/comp/egcs/tmp/ada/a-gtran3.c Thu Apr 2 17:16:15 1998 | |
42 | *************** | |
43 | *** 3329,3334 **** | |
44 | --- 3329,3341 ---- | |
45 | isn't changing. Likewise, clear the alignment if it isn't being | |
66bd0128 JW |
46 | changed. Then return if we aren't doing anything. */ |
47 | ||
4c43cd29 JL |
48 | + if (size != 0 |
49 | + && TYPE_MODE (TREE_TYPE (size)) != TYPE_MODE (TREE_TYPE (orig_size))) | |
50 | + { | |
51 | + size = convert (sizetype, size); | |
52 | + orig_size = convert (sizetype, orig_size); | |
53 | + } | |
54 | + | |
66bd0128 | 55 | if (size != 0 |
66bd0128 JW |
56 | && (operand_equal_p (size, orig_size, 0) |
57 | || (TREE_CODE (orig_size) == INTEGER_CST | |
4c43cd29 JL |
58 | diff -c ada/a-misc.c /home/brolley/comp/egcs/tmp/ada/a-misc.c |
59 | *** ada/a-misc.c Mon Mar 30 16:29:05 1998 | |
60 | --- /home/brolley/comp/egcs/tmp/ada/a-misc.c Thu Apr 2 17:36:19 1998 | |
61 | *************** | |
66bd0128 JW |
62 | *** 70,77 **** |
63 | ||
64 | #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, | |
65 | ||
66 | ! char *gnat_tree_code_type[] = { | |
67 | ! "x", | |
68 | #include "a-tree.def" | |
69 | }; | |
70 | #undef DEFTREECODE | |
71 | --- 70,77 ---- | |
72 | ||
73 | #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, | |
74 | ||
75 | ! char gnat_tree_code_type[] = { | |
76 | ! 'x', | |
77 | #include "a-tree.def" | |
78 | }; | |
79 | #undef DEFTREECODE | |
4c43cd29 JL |
80 | *************** |
81 | *** 254,259 **** | |
82 | --- 254,268 ---- | |
83 | print_lang_statistics () | |
84 | {} | |
85 | ||
86 | + void | |
87 | + lang_print_xnode (file, node, indent) | |
88 | + FILE *file; | |
89 | + tree node; | |
90 | + int indent; | |
91 | + { | |
92 | + } | |
93 | + | |
94 | + | |
95 | /* integrate_decl_tree calls this function, but since we don't use the | |
96 | DECL_LANG_SPECIFIC field, this is a no-op. */ | |
97 | ||
98 | *************** | |
99 | *** 603,622 **** | |
100 | it, but it's where g++ does it. */ | |
101 | ||
102 | void | |
103 | ! init_lex () | |
66bd0128 JW |
104 | { |
105 | lang_expand_expr = gnat_expand_expr; | |
106 | ||
107 | - tree_code_type | |
108 | - = (char **) realloc (tree_code_type, | |
109 | - sizeof (char *) * LAST_GNAT_TREE_CODE); | |
110 | - tree_code_length | |
111 | - = (int *) realloc (tree_code_length, | |
112 | - sizeof (int) * LAST_GNAT_TREE_CODE); | |
113 | - tree_code_name | |
114 | - = (char **) realloc (tree_code_name, | |
115 | - sizeof (char *) * LAST_GNAT_TREE_CODE); | |
116 | - | |
117 | bcopy ((char *) gnat_tree_code_type, | |
118 | (char *) (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE), | |
4c43cd29 JL |
119 | ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) |
120 | --- 612,622 ---- | |
121 | it, but it's where g++ does it. */ | |
66bd0128 | 122 | |
4c43cd29 JL |
123 | void |
124 | ! init_parse (filename) | |
f095f92e | 125 | ! char *filename; |
66bd0128 JW |
126 | { |
127 | lang_expand_expr = gnat_expand_expr; | |
128 | ||
129 | bcopy ((char *) gnat_tree_code_type, | |
130 | (char *) (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE), | |
4c43cd29 JL |
131 | ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) |
132 | *************** | |
133 | *** 629,636 **** | |
134 | ||
135 | bcopy ((char *) gnat_tree_code_name, | |
136 | (char *) (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE), | |
137 | ! ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) | |
138 | ! * sizeof (char *))); | |
139 | } | |
140 | ||
141 | /* Sets some debug flags for the parsed. It does nothing here. */ | |
142 | --- 629,640 ---- | |
66bd0128 | 143 | |
4c43cd29 JL |
144 | bcopy ((char *) gnat_tree_code_name, |
145 | (char *) (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE), | |
146 | ! LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE); | |
147 | ! } | |
148 | ! | |
149 | ! void | |
150 | ! finish_parse () | |
151 | ! { | |
152 | } | |
153 | ||
154 | /* Sets some debug flags for the parsed. It does nothing here. */ | |
155 | diff -c ada/a-tree.def /home/brolley/comp/egcs/tmp/ada/a-tree.def | |
156 | *** ada/a-tree.def Mon Mar 30 16:29:09 1998 | |
157 | --- /home/brolley/comp/egcs/tmp/ada/a-tree.def Thu Apr 2 17:20:38 1998 | |
66bd0128 JW |
158 | *************** |
159 | *** 31,69 **** | |
160 | The only field used if TREE_COMPLEXITY, which contains the GNAT node | |
161 | number. */ | |
162 | ||
163 | ! DEFTREECODE (TRANSFORM_EXPR, "transform_expr", "e", 0) | |
164 | ||
165 | /* Perform an unchecked conversion between the input and the output. | |
166 | if TREE_ADDRESSABLE is set, it means this is in an LHS; in that case, | |
167 | we can only use techniques, such as pointer punning, that leave the | |
168 | expression a "name". */ | |
169 | ||
170 | ! DEFTREECODE (UNCHECKED_CONVERT_EXPR, "unchecked_convert_expr", "1", 1) | |
171 | ||
172 | /* A type that is an unconstrained array itself. This node is never passed | |
173 | to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE | |
174 | is the type of a record containing the template and data. */ | |
175 | ||
176 | ! DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", "t", 0) | |
177 | ||
178 | /* A reference to an unconstrained array. This node only exists as an | |
179 | intermediate node during the translation of a GNAT tree to a GCC tree; | |
180 | it is never passed to GCC. The only field used is operand 0, which | |
181 | is the fat pointer object. */ | |
182 | ||
183 | ! DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref", "r", 1) | |
184 | ||
185 | /* An expression that returns an RTL suitable for its type. Operand 0 | |
186 | is an expression to be evaluated for side effects only. */ | |
187 | ||
188 | ! DEFTREECODE (NULL_EXPR, "null_expr", "e", 1) | |
189 | ||
190 | /* An expression that emits a USE for its single operand. */ | |
191 | ||
192 | ! DEFTREECODE (USE_EXPR, "use_expr", "e", 1) | |
193 | ||
194 | /* An expression that is treated as a conversion while generating code, but is | |
195 | used to prevent infinite recursion when conversions of biased types are | |
196 | involved. */ | |
197 | ||
198 | ! DEFTREECODE (GNAT_NOP_EXPR, "gnat_nop_expr", "1", 1) | |
199 | --- 31,69 ---- | |
200 | The only field used if TREE_COMPLEXITY, which contains the GNAT node | |
201 | number. */ | |
202 | ||
203 | ! DEFTREECODE (TRANSFORM_EXPR, "transform_expr", 'e', 0) | |
204 | ||
205 | /* Perform an unchecked conversion between the input and the output. | |
206 | if TREE_ADDRESSABLE is set, it means this is in an LHS; in that case, | |
207 | we can only use techniques, such as pointer punning, that leave the | |
208 | expression a "name". */ | |
209 | ||
210 | ! DEFTREECODE (UNCHECKED_CONVERT_EXPR, "unchecked_convert_expr", '1', 1) | |
211 | ||
212 | /* A type that is an unconstrained array itself. This node is never passed | |
213 | to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE | |
214 | is the type of a record containing the template and data. */ | |
215 | ||
216 | ! DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", 't', 0) | |
217 | ||
218 | /* A reference to an unconstrained array. This node only exists as an | |
219 | intermediate node during the translation of a GNAT tree to a GCC tree; | |
220 | it is never passed to GCC. The only field used is operand 0, which | |
221 | is the fat pointer object. */ | |
222 | ||
223 | ! DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref", 'r', 1) | |
224 | ||
225 | /* An expression that returns an RTL suitable for its type. Operand 0 | |
226 | is an expression to be evaluated for side effects only. */ | |
227 | ||
228 | ! DEFTREECODE (NULL_EXPR, "null_expr", 'e', 1) | |
229 | ||
230 | /* An expression that emits a USE for its single operand. */ | |
231 | ||
232 | ! DEFTREECODE (USE_EXPR, "use_expr", 'e', 1) | |
233 | ||
234 | /* An expression that is treated as a conversion while generating code, but is | |
235 | used to prevent infinite recursion when conversions of biased types are | |
236 | involved. */ | |
237 | ||
238 | ! DEFTREECODE (GNAT_NOP_EXPR, "gnat_nop_expr", '1', 1) | |
4c43cd29 | 239 | |
c54ce045 JL |
240 | |
241 | This patch from Fred Fish to GNAT may make building simpler. We haven't | |
242 | tested it. | |
243 | ||
244 | > I put a very short blurb in the faq. GNAT is complicated enough that | |
245 | > we should probably write a whole page on how to build/install it. | |
246 | ||
247 | You may want to use some or all of these patches: | |
248 | ||
249 | * Make-lang.in (gnattools): Depends upon GCC_PARTS. | |
250 | (ada.start.encap): Depends upon gnattools. | |
251 | (ada.rest.encap): Depends upon gnatlib. | |
252 | * Makefile.in (../stamp-gnatlib1): Since we are still in the rts | |
253 | subdir when the rule runs, we need to touch ../../stamp-gnatlib1. | |
254 | (../stamp-gnatlib1): Don't unconditionally remove the rts directory, | |
255 | create it if one does not exist. | |
256 | (gnatlib): Remove superflous leading blank char at *-*-pe line. | |
257 | * a-init.c: Define NULL if not yet defined. | |
258 | ||
259 | Index: Make-lang.in | |
260 | =================================================================== | |
261 | RCS file: /cvsroot/gg/egcs/gcc/ada/Make-lang.in,v | |
262 | retrieving revision 1.1.1.1 | |
263 | retrieving revision 1.3 | |
264 | diff -c -r1.1.1.1 -r1.3 | |
265 | *** Make-lang.in 1997/10/17 06:19:09 1.1.1.1 | |
266 | --- Make-lang.in 1998/03/17 14:26:14 1.3 | |
267 | *************** | |
268 | *** 100,106 **** | |
269 | ||
270 | # use host-gcc | |
271 | # getopt*.o has to be built before CC=../xgcc | |
272 | ! gnattools: getopt.o getopt1.o force | |
273 | $(MAKE) $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS)\ | |
274 | CC="../xgcc -B../" GNATBIND="../gnatbind" \ | |
275 | gnatf gnatlink gnatkr gnatmake gnatcmd gnatprep \ | |
276 | --- 100,107 ---- | |
277 | ||
278 | # use host-gcc | |
279 | # getopt*.o has to be built before CC=../xgcc | |
280 | ! # GCC_PARTS has to be built before CC=../xgcc | |
281 | ! gnattools: getopt.o getopt1.o $(GCC_PARTS) force | |
282 | $(MAKE) $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS)\ | |
283 | CC="../xgcc -B../" GNATBIND="../gnatbind" \ | |
284 | gnatf gnatlink gnatkr gnatmake gnatcmd gnatprep \ | |
285 | *************** | |
286 | *** 163,170 **** | |
287 | -if [ -f gnatls$(exeext) ] ; then\ | |
288 | mv gnatls$(exeext) gnatls-cross$(exeext); fi | |
289 | ||
290 | ! ada.start.encap: | |
291 | ! ada.rest.encap: | |
292 | ada.info: | |
293 | ada.dvi: | |
294 | \f | |
295 | --- 164,171 ---- | |
296 | -if [ -f gnatls$(exeext) ] ; then\ | |
297 | mv gnatls$(exeext) gnatls-cross$(exeext); fi | |
298 | ||
299 | ! ada.start.encap: gnattools | |
300 | ! ada.rest.encap: gnatlib | |
301 | ada.info: | |
302 | ada.dvi: | |
303 | \f | |
304 | Index: Makefile.in | |
305 | =================================================================== | |
306 | RCS file: /cvsroot/gg/egcs/gcc/ada/Makefile.in,v | |
307 | retrieving revision 1.1.1.1 | |
308 | retrieving revision 1.5 | |
309 | diff -c -r1.1.1.1 -r1.5 | |
310 | *** Makefile.in 1997/10/17 06:19:09 1.1.1.1 | |
311 | --- Makefile.in 1998/02/19 14:16:34 1.5 | |
312 | *************** | |
313 | *** 798,806 **** | |
314 | # 3. copy 3xyyy.ad[sb] -->-- i-yyy.ad[sb] | |
315 | ||
316 | ../stamp-gnatlib1: Makefile ../stamp-gnatlib2 | |
317 | ! rm -rf rts | |
318 | ! mkdir rts | |
319 | ! chmod u+w rts | |
320 | (\ | |
321 | case $(target) in \ | |
322 | sparc-sun-sunos4*) letter=u ;;\ | |
323 | --- 800,806 ---- | |
324 | # 3. copy 3xyyy.ad[sb] -->-- i-yyy.ad[sb] | |
325 | ||
326 | ../stamp-gnatlib1: Makefile ../stamp-gnatlib2 | |
327 | ! if [ -d rts ]; then true; else mkdir rts; chmod u+w rts; fi | |
328 | (\ | |
329 | case $(target) in \ | |
330 | sparc-sun-sunos4*) letter=u ;;\ | |
331 | *************** | |
332 | *** 888,894 **** | |
333 | done;; \ | |
334 | esac ; \ | |
335 | rm -f ../stamp-gnatlib ; \ | |
336 | ! touch ../stamp-gnatlib1) | |
337 | ||
338 | gnatlib-common: ../stamp-gnatlib1 | |
339 | (subdir=`cd $(srcdir); pwd`; \ | |
340 | --- 888,894 ---- | |
341 | done;; \ | |
342 | esac ; \ | |
343 | rm -f ../stamp-gnatlib ; \ | |
344 | ! touch ../../stamp-gnatlib1) | |
345 | ||
346 | gnatlib-common: ../stamp-gnatlib1 | |
347 | (subdir=`cd $(srcdir); pwd`; \ | |
348 | *************** | |
349 | *** 923,929 **** | |
350 | mips-sni-* |\ | |
351 | *-*-cygwin32* |\ | |
352 | *-*-mingw32* |\ | |
353 | ! *-*-pe |\ | |
354 | *) \ | |
355 | \ | |
356 | $(MAKE) CC="../../xgcc -B../../" \ | |
357 | --- 923,929 ---- | |
358 | mips-sni-* |\ | |
359 | *-*-cygwin32* |\ | |
360 | *-*-mingw32* |\ | |
361 | ! *-*-pe |\ | |
362 | *) \ | |
363 | \ | |
364 | $(MAKE) CC="../../xgcc -B../../" \ | |
365 | Index: a-init.c | |
366 | =================================================================== | |
367 | RCS file: /cvsroot/gg/egcs/gcc/ada/a-init.c,v | |
368 | retrieving revision 1.1.1.1 | |
369 | retrieving revision 1.2 | |
370 | diff -c -r1.1.1.1 -r1.2 | |
371 | *** a-init.c 1997/10/17 06:19:10 1.1.1.1 | |
372 | --- a-init.c 1998/01/04 23:11:42 1.2 | |
373 | *************** | |
374 | *** 516,521 **** | |
375 | --- 516,525 ---- | |
376 | __gnat_raise (exception); | |
377 | } | |
378 | ||
379 | + #ifndef NULL | |
380 | + #define NULL 0 | |
381 | + #endif | |
382 | + | |
383 | static void | |
384 | __gnat_install_handler () | |
385 | { | |
386 | ||
135edcfd DB |
387 | Wed Jun 24 15:06:09 1998 Dave Brolley <brolley@cygnus.com> |
388 | ||
389 | * a-misc.c (lang_decode_option): New interface. | |
390 | * a-misc.h (lang_decode_option): New interface. | |
391 | ||
392 | *** /home/brolley/tmp/a-misc.c Wed Jun 24 15:01:22 1998 | |
393 | --- ada/a-misc.c Wed Jun 24 15:02:42 1998 | |
394 | *************** init_gnat_args () | |
395 | *** 162,170 **** | |
396 | it returns 0. */ | |
397 | ||
398 | int | |
399 | ! lang_decode_option (p) | |
400 | ! char *p; | |
401 | { | |
402 | extern int save_argc; | |
403 | extern char **save_argv; | |
404 | ||
405 | --- 162,172 ---- | |
406 | it returns 0. */ | |
407 | ||
408 | int | |
409 | ! lang_decode_option (argc, argv) | |
410 | ! int argc; | |
411 | ! char **argv; | |
412 | { | |
413 | + char *p = argv[0]; | |
414 | extern int save_argc; | |
415 | extern char **save_argv; | |
416 | ||
417 | *** /home/brolley/tmp/a-misc.h Wed Jun 24 15:01:22 1998 | |
418 | --- ada/a-misc.h Wed Jun 24 15:03:20 1998 | |
419 | *************** enum gnat_tree_code { | |
420 | *** 63,69 **** | |
421 | option decoding phase of GCC calls this routine on the flags that it cannot | |
422 | decode. This routine returns 1 if it is successful, otherwise it | |
423 | returns 0. */ | |
424 | ! extern int lang_decode_option PROTO((char *)); | |
425 | ||
426 | /* Perform all the initialization steps that are language-specific. */ | |
427 | extern void lang_init PROTO((void)); | |
428 | --- 63,69 ---- | |
429 | option decoding phase of GCC calls this routine on the flags that it cannot | |
430 | decode. This routine returns 1 if it is successful, otherwise it | |
431 | returns 0. */ | |
432 | ! extern int lang_decode_option PROTO((int, char **)); | |
433 | ||
434 | /* Perform all the initialization steps that are language-specific. */ | |
435 | extern void lang_init PROTO((void)); |