| The following patches are needed in order to build GNAT with EGCS. |
| |
| These patches were tested with egcs-980308 and gnat-3.10p on a mips-sgi-irix6.3 |
| system. The gnat build succeeded as per the instructions in the gnat |
| README.BUILD file for building one library, except that CFLAGS="-O -g" and |
| GNATLIBCFLAGS="-O -g" were substituted for the recommended "-O2" so that the |
| build could be debugged. There was no attempt to run the resulting build |
| against any testsuite or validation suite. |
| |
| -- |
| |
| Developers Notes: |
| |
| Every use of sizetype in the Ada front end should be checked to see if perhaps |
| it should be using bitsizetype instead. The change to maybe_pad_type is just |
| a hack to work around this problem, and may not be desirable in the long term. |
| |
| There are many places in the Ada front end where it calls operand_equal_p to |
| see if two type sizes are the same. operand_equal_p fails if the two |
| arguments have different TYPE_MODEs. sizetype and bitsizetype can have |
| different TYPE_MODEs. Thus this code can fail if one type size is based |
| on sizetype, and the other is based on bitsizetype. The change to |
| maybe_pad_type fixes one very critical place where this happens. There may |
| be others. |
| |
| -- |
| |
| Mon Mar 16 11:00:25 1998 Jim Wilson <wilson@cygnus.com> |
| |
| * a-gtran3.c (maybe_pad_type): Convert both size and orig_size to |
| sizetype if they have differing modes. |
| * a-misc.c (gnat_tree_code_type): Change from string to char array. |
| (init_lex): Delete realloc calls for tree_code_* globals. Adjust |
| bcopy call for gnat_tree_code_type change. |
| * a-tree.def: Adjust for tree_code_* type changes. |
| |
| * a-misc.c (init_lex): Rename to init_parse. |
| |
| diff -c ada/a-gtran3.c /home/brolley/comp/egcs/tmp/ada/a-gtran3.c |
| *** ada/a-gtran3.c Mon Mar 30 16:29:04 1998 |
| --- /home/brolley/comp/egcs/tmp/ada/a-gtran3.c Thu Apr 2 17:16:15 1998 |
| *************** |
| *** 3329,3334 **** |
| --- 3329,3341 ---- |
| isn't changing. Likewise, clear the alignment if it isn't being |
| changed. Then return if we aren't doing anything. */ |
| |
| + if (size != 0 |
| + && TYPE_MODE (TREE_TYPE (size)) != TYPE_MODE (TREE_TYPE (orig_size))) |
| + { |
| + size = convert (sizetype, size); |
| + orig_size = convert (sizetype, orig_size); |
| + } |
| + |
| if (size != 0 |
| && (operand_equal_p (size, orig_size, 0) |
| || (TREE_CODE (orig_size) == INTEGER_CST |
| diff -c ada/a-misc.c /home/brolley/comp/egcs/tmp/ada/a-misc.c |
| *** ada/a-misc.c Mon Mar 30 16:29:05 1998 |
| --- /home/brolley/comp/egcs/tmp/ada/a-misc.c Thu Apr 2 17:36:19 1998 |
| *************** |
| *** 70,77 **** |
| |
| #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, |
| |
| ! char *gnat_tree_code_type[] = { |
| ! "x", |
| #include "a-tree.def" |
| }; |
| #undef DEFTREECODE |
| --- 70,77 ---- |
| |
| #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, |
| |
| ! char gnat_tree_code_type[] = { |
| ! 'x', |
| #include "a-tree.def" |
| }; |
| #undef DEFTREECODE |
| *************** |
| *** 254,259 **** |
| --- 254,268 ---- |
| print_lang_statistics () |
| {} |
| |
| + void |
| + lang_print_xnode (file, node, indent) |
| + FILE *file; |
| + tree node; |
| + int indent; |
| + { |
| + } |
| + |
| + |
| /* integrate_decl_tree calls this function, but since we don't use the |
| DECL_LANG_SPECIFIC field, this is a no-op. */ |
| |
| *************** |
| *** 603,622 **** |
| it, but it's where g++ does it. */ |
| |
| void |
| ! init_lex () |
| { |
| lang_expand_expr = gnat_expand_expr; |
| |
| - tree_code_type |
| - = (char **) realloc (tree_code_type, |
| - sizeof (char *) * LAST_GNAT_TREE_CODE); |
| - tree_code_length |
| - = (int *) realloc (tree_code_length, |
| - sizeof (int) * LAST_GNAT_TREE_CODE); |
| - tree_code_name |
| - = (char **) realloc (tree_code_name, |
| - sizeof (char *) * LAST_GNAT_TREE_CODE); |
| - |
| bcopy ((char *) gnat_tree_code_type, |
| (char *) (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE), |
| ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) |
| --- 612,622 ---- |
| it, but it's where g++ does it. */ |
| |
| void |
| ! init_parse (filename) |
| ! char *filename; |
| { |
| lang_expand_expr = gnat_expand_expr; |
| |
| bcopy ((char *) gnat_tree_code_type, |
| (char *) (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE), |
| ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) |
| *************** |
| *** 629,636 **** |
| |
| bcopy ((char *) gnat_tree_code_name, |
| (char *) (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE), |
| ! ((LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE) |
| ! * sizeof (char *))); |
| } |
| |
| /* Sets some debug flags for the parsed. It does nothing here. */ |
| --- 629,640 ---- |
| |
| bcopy ((char *) gnat_tree_code_name, |
| (char *) (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE), |
| ! LAST_GNAT_TREE_CODE - (int) LAST_AND_UNUSED_TREE_CODE); |
| ! } |
| ! |
| ! void |
| ! finish_parse () |
| ! { |
| } |
| |
| /* Sets some debug flags for the parsed. It does nothing here. */ |
| diff -c ada/a-tree.def /home/brolley/comp/egcs/tmp/ada/a-tree.def |
| *** ada/a-tree.def Mon Mar 30 16:29:09 1998 |
| --- /home/brolley/comp/egcs/tmp/ada/a-tree.def Thu Apr 2 17:20:38 1998 |
| *************** |
| *** 31,69 **** |
| The only field used if TREE_COMPLEXITY, which contains the GNAT node |
| number. */ |
| |
| ! DEFTREECODE (TRANSFORM_EXPR, "transform_expr", "e", 0) |
| |
| /* Perform an unchecked conversion between the input and the output. |
| if TREE_ADDRESSABLE is set, it means this is in an LHS; in that case, |
| we can only use techniques, such as pointer punning, that leave the |
| expression a "name". */ |
| |
| ! DEFTREECODE (UNCHECKED_CONVERT_EXPR, "unchecked_convert_expr", "1", 1) |
| |
| /* A type that is an unconstrained array itself. This node is never passed |
| to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE |
| is the type of a record containing the template and data. */ |
| |
| ! DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", "t", 0) |
| |
| /* A reference to an unconstrained array. This node only exists as an |
| intermediate node during the translation of a GNAT tree to a GCC tree; |
| it is never passed to GCC. The only field used is operand 0, which |
| is the fat pointer object. */ |
| |
| ! DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref", "r", 1) |
| |
| /* An expression that returns an RTL suitable for its type. Operand 0 |
| is an expression to be evaluated for side effects only. */ |
| |
| ! DEFTREECODE (NULL_EXPR, "null_expr", "e", 1) |
| |
| /* An expression that emits a USE for its single operand. */ |
| |
| ! DEFTREECODE (USE_EXPR, "use_expr", "e", 1) |
| |
| /* An expression that is treated as a conversion while generating code, but is |
| used to prevent infinite recursion when conversions of biased types are |
| involved. */ |
| |
| ! DEFTREECODE (GNAT_NOP_EXPR, "gnat_nop_expr", "1", 1) |
| --- 31,69 ---- |
| The only field used if TREE_COMPLEXITY, which contains the GNAT node |
| number. */ |
| |
| ! DEFTREECODE (TRANSFORM_EXPR, "transform_expr", 'e', 0) |
| |
| /* Perform an unchecked conversion between the input and the output. |
| if TREE_ADDRESSABLE is set, it means this is in an LHS; in that case, |
| we can only use techniques, such as pointer punning, that leave the |
| expression a "name". */ |
| |
| ! DEFTREECODE (UNCHECKED_CONVERT_EXPR, "unchecked_convert_expr", '1', 1) |
| |
| /* A type that is an unconstrained array itself. This node is never passed |
| to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE |
| is the type of a record containing the template and data. */ |
| |
| ! DEFTREECODE (UNCONSTRAINED_ARRAY_TYPE, "unconstrained_array_type", 't', 0) |
| |
| /* A reference to an unconstrained array. This node only exists as an |
| intermediate node during the translation of a GNAT tree to a GCC tree; |
| it is never passed to GCC. The only field used is operand 0, which |
| is the fat pointer object. */ |
| |
| ! DEFTREECODE (UNCONSTRAINED_ARRAY_REF, "unconstrained_array_ref", 'r', 1) |
| |
| /* An expression that returns an RTL suitable for its type. Operand 0 |
| is an expression to be evaluated for side effects only. */ |
| |
| ! DEFTREECODE (NULL_EXPR, "null_expr", 'e', 1) |
| |
| /* An expression that emits a USE for its single operand. */ |
| |
| ! DEFTREECODE (USE_EXPR, "use_expr", 'e', 1) |
| |
| /* An expression that is treated as a conversion while generating code, but is |
| used to prevent infinite recursion when conversions of biased types are |
| involved. */ |
| |
| ! DEFTREECODE (GNAT_NOP_EXPR, "gnat_nop_expr", '1', 1) |
| |
| |
| This patch from Fred Fish to GNAT may make building simpler. We haven't |
| tested it. |
| |
| > I put a very short blurb in the faq. GNAT is complicated enough that |
| > we should probably write a whole page on how to build/install it. |
| |
| You may want to use some or all of these patches: |
| |
| * Make-lang.in (gnattools): Depends upon GCC_PARTS. |
| (ada.start.encap): Depends upon gnattools. |
| (ada.rest.encap): Depends upon gnatlib. |
| * Makefile.in (../stamp-gnatlib1): Since we are still in the rts |
| subdir when the rule runs, we need to touch ../../stamp-gnatlib1. |
| (../stamp-gnatlib1): Don't unconditionally remove the rts directory, |
| create it if one does not exist. |
| (gnatlib): Remove superflous leading blank char at *-*-pe line. |
| * a-init.c: Define NULL if not yet defined. |
| |
| Index: Make-lang.in |
| =================================================================== |
| RCS file: /cvsroot/gg/egcs/gcc/ada/Make-lang.in,v |
| retrieving revision 1.1.1.1 |
| retrieving revision 1.3 |
| diff -c -r1.1.1.1 -r1.3 |
| *** Make-lang.in 1997/10/17 06:19:09 1.1.1.1 |
| --- Make-lang.in 1998/03/17 14:26:14 1.3 |
| *************** |
| *** 100,106 **** |
| |
| # use host-gcc |
| # getopt*.o has to be built before CC=../xgcc |
| ! gnattools: getopt.o getopt1.o force |
| $(MAKE) $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS)\ |
| CC="../xgcc -B../" GNATBIND="../gnatbind" \ |
| gnatf gnatlink gnatkr gnatmake gnatcmd gnatprep \ |
| --- 100,107 ---- |
| |
| # use host-gcc |
| # getopt*.o has to be built before CC=../xgcc |
| ! # GCC_PARTS has to be built before CC=../xgcc |
| ! gnattools: getopt.o getopt1.o $(GCC_PARTS) force |
| $(MAKE) $(FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS)\ |
| CC="../xgcc -B../" GNATBIND="../gnatbind" \ |
| gnatf gnatlink gnatkr gnatmake gnatcmd gnatprep \ |
| *************** |
| *** 163,170 **** |
| -if [ -f gnatls$(exeext) ] ; then\ |
| mv gnatls$(exeext) gnatls-cross$(exeext); fi |
| |
| ! ada.start.encap: |
| ! ada.rest.encap: |
| ada.info: |
| ada.dvi: |
| |
| --- 164,171 ---- |
| -if [ -f gnatls$(exeext) ] ; then\ |
| mv gnatls$(exeext) gnatls-cross$(exeext); fi |
| |
| ! ada.start.encap: gnattools |
| ! ada.rest.encap: gnatlib |
| ada.info: |
| ada.dvi: |
| |
| Index: Makefile.in |
| =================================================================== |
| RCS file: /cvsroot/gg/egcs/gcc/ada/Makefile.in,v |
| retrieving revision 1.1.1.1 |
| retrieving revision 1.5 |
| diff -c -r1.1.1.1 -r1.5 |
| *** Makefile.in 1997/10/17 06:19:09 1.1.1.1 |
| --- Makefile.in 1998/02/19 14:16:34 1.5 |
| *************** |
| *** 798,806 **** |
| # 3. copy 3xyyy.ad[sb] -->-- i-yyy.ad[sb] |
| |
| ../stamp-gnatlib1: Makefile ../stamp-gnatlib2 |
| ! rm -rf rts |
| ! mkdir rts |
| ! chmod u+w rts |
| (\ |
| case $(target) in \ |
| sparc-sun-sunos4*) letter=u ;;\ |
| --- 800,806 ---- |
| # 3. copy 3xyyy.ad[sb] -->-- i-yyy.ad[sb] |
| |
| ../stamp-gnatlib1: Makefile ../stamp-gnatlib2 |
| ! if [ -d rts ]; then true; else mkdir rts; chmod u+w rts; fi |
| (\ |
| case $(target) in \ |
| sparc-sun-sunos4*) letter=u ;;\ |
| *************** |
| *** 888,894 **** |
| done;; \ |
| esac ; \ |
| rm -f ../stamp-gnatlib ; \ |
| ! touch ../stamp-gnatlib1) |
| |
| gnatlib-common: ../stamp-gnatlib1 |
| (subdir=`cd $(srcdir); pwd`; \ |
| --- 888,894 ---- |
| done;; \ |
| esac ; \ |
| rm -f ../stamp-gnatlib ; \ |
| ! touch ../../stamp-gnatlib1) |
| |
| gnatlib-common: ../stamp-gnatlib1 |
| (subdir=`cd $(srcdir); pwd`; \ |
| *************** |
| *** 923,929 **** |
| mips-sni-* |\ |
| *-*-cygwin32* |\ |
| *-*-mingw32* |\ |
| ! *-*-pe |\ |
| *) \ |
| \ |
| $(MAKE) CC="../../xgcc -B../../" \ |
| --- 923,929 ---- |
| mips-sni-* |\ |
| *-*-cygwin32* |\ |
| *-*-mingw32* |\ |
| ! *-*-pe |\ |
| *) \ |
| \ |
| $(MAKE) CC="../../xgcc -B../../" \ |
| Index: a-init.c |
| =================================================================== |
| RCS file: /cvsroot/gg/egcs/gcc/ada/a-init.c,v |
| retrieving revision 1.1.1.1 |
| retrieving revision 1.2 |
| diff -c -r1.1.1.1 -r1.2 |
| *** a-init.c 1997/10/17 06:19:10 1.1.1.1 |
| --- a-init.c 1998/01/04 23:11:42 1.2 |
| *************** |
| *** 516,521 **** |
| --- 516,525 ---- |
| __gnat_raise (exception); |
| } |
| |
| + #ifndef NULL |
| + #define NULL 0 |
| + #endif |
| + |
| static void |
| __gnat_install_handler () |
| { |
| |
| Wed Jun 24 15:06:09 1998 Dave Brolley <brolley@cygnus.com> |
| |
| * a-misc.c (lang_decode_option): New interface. |
| * a-misc.h (lang_decode_option): New interface. |
| |
| *** /home/brolley/tmp/a-misc.c Wed Jun 24 15:01:22 1998 |
| --- ada/a-misc.c Wed Jun 24 15:02:42 1998 |
| *************** init_gnat_args () |
| *** 162,170 **** |
| it returns 0. */ |
| |
| int |
| ! lang_decode_option (p) |
| ! char *p; |
| { |
| extern int save_argc; |
| extern char **save_argv; |
| |
| --- 162,172 ---- |
| it returns 0. */ |
| |
| int |
| ! lang_decode_option (argc, argv) |
| ! int argc; |
| ! char **argv; |
| { |
| + char *p = argv[0]; |
| extern int save_argc; |
| extern char **save_argv; |
| |
| *** /home/brolley/tmp/a-misc.h Wed Jun 24 15:01:22 1998 |
| --- ada/a-misc.h Wed Jun 24 15:03:20 1998 |
| *************** enum gnat_tree_code { |
| *** 63,69 **** |
| option decoding phase of GCC calls this routine on the flags that it cannot |
| decode. This routine returns 1 if it is successful, otherwise it |
| returns 0. */ |
| ! extern int lang_decode_option PROTO((char *)); |
| |
| /* Perform all the initialization steps that are language-specific. */ |
| extern void lang_init PROTO((void)); |
| --- 63,69 ---- |
| option decoding phase of GCC calls this routine on the flags that it cannot |
| decode. This routine returns 1 if it is successful, otherwise it |
| returns 0. */ |
| ! extern int lang_decode_option PROTO((int, char **)); |
| |
| /* Perform all the initialization steps that are language-specific. */ |
| extern void lang_init PROTO((void)); |