summaryrefslogtreecommitdiff
path: root/gnu/egcs/gcc/README.gnat
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>1999-05-26 13:38:57 +0000
committerMarc Espie <espie@cvs.openbsd.org>1999-05-26 13:38:57 +0000
commit0126e157b87f137fc08dc7f46f6c291b9d06ac5d (patch)
treef8555e3e504eb82b4cd3cba5cec20ae4ce8124ff /gnu/egcs/gcc/README.gnat
parentff8e9a4356e55ed142306c3a375fa280800abc86 (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.gnat435
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));