[official-gcc.git] / gcc / README.gnat
blob2746665c8060c27aada362f16ee058d9af8d416e
1 The following patches are needed in order to build GNAT with EGCS.
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.
12 Developers Notes:
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.
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.
28 Mon Mar 16 11:00:25 1998  Jim Wilson  <wilson@cygnus.com>
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.
37         * a-misc.c (init_lex): Rename to init_parse.
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
46        changed.  Then return if we aren't doing anything.  */
47   
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 +  
55     if (size != 0
56         && (operand_equal_p (size, orig_size, 0)
57           || (TREE_CODE (orig_size) == INTEGER_CST
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 ***************
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
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 ()
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);
117     bcopy ((char *) gnat_tree_code_type,
118          (char *) (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE),
119          ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE)
120 --- 612,622 ----
121      it, but it's where g++ does it.  */
122   
123   void
124 ! init_parse (filename)
125 !      char *filename;
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),
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 ----
143   
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 ! }
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
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)
241 This patch from Fred Fish to GNAT may make building simpler.  We haven't
242 tested it.
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.
247 You may want to use some or all of these patches:
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.
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
383   static void
384   __gnat_install_handler ()
385   {
387 Wed Jun 24 15:06:09 1998  Dave Brolley  <brolley@cygnus.com>
389         * a-misc.c (lang_decode_option): New interface.
390         * a-misc.h (lang_decode_option): New interface.
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));