diff options
author | Marc Espie <espie@cvs.openbsd.org> | 1999-05-26 13:38:57 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 1999-05-26 13:38:57 +0000 |
commit | 0126e157b87f137fc08dc7f46f6c291b9d06ac5d (patch) | |
tree | f8555e3e504eb82b4cd3cba5cec20ae4ce8124ff /gnu/egcs/gcc/README.gnat | |
parent | ff8e9a4356e55ed142306c3a375fa280800abc86 (diff) |
egcs projects compiler system
Exact copy of the snapshot, except for the removal of
texinfo/
gcc/ch/
libchill/
Diffstat (limited to 'gnu/egcs/gcc/README.gnat')
-rw-r--r-- | gnu/egcs/gcc/README.gnat | 435 |
1 files changed, 435 insertions, 0 deletions
diff --git a/gnu/egcs/gcc/README.gnat b/gnu/egcs/gcc/README.gnat new file mode 100644 index 00000000000..2746665c806 --- /dev/null +++ b/gnu/egcs/gcc/README.gnat @@ -0,0 +1,435 @@ +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)); |