re PR ada/20226 (Error in __gnat_install_SEH_handler breaks bootstrap)
authorPascal Obry <obry@adacore.com>
Tue, 15 Mar 2005 16:02:26 +0000 (17:02 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 15 Mar 2005 16:02:26 +0000 (17:02 +0100)
2005-03-08  Pascal Obry  <obry@adacore.com>
    Eric Botcazou  <ebotcazou@adacore.com>

PR ada/20226
PR ada/20344

* init.c (__gnat_initialize): Do not call __gnat_install_SEH_handler()
when IN_RTS. This is to work around a bootstrap path problem.

* misc.c (gnat_parse_file): Create a SEH (Structured Exception Handler)
table and pass it to __gnat_install_SEH_handler().
(gnat_handle_option): Accept OPT_fRTS_, not OPT_fRTS.

* lang.opt: Fix specification of -fRTS=.

From-SVN: r96499

gcc/ada/lang.opt
gcc/ada/misc.c

index 7ac89f9642602ec40f23248791c5837a52a6254d..584220c2ea8dd1c4395abbe3fa9b78d55fc03843 100644 (file)
@@ -57,8 +57,9 @@ nostdlib
 Ada
 ; Don't look for object files
 
-fRTS
-Ada RejectNegative
+fRTS=
+Ada Joined RejectNegative
+; Selects the runtime
 
 gant
 Ada Joined Undocumented
index 81f8249c425ba85604b9370e557c327430e6f931..4646c863e8a22138ebede87831ae98af01c6d7ec 100644 (file)
@@ -217,18 +217,27 @@ extern char **gnat_argv;
 
 \f
 /* Declare functions we use as part of startup.  */
-extern void __gnat_initialize  (void *);
-extern void adainit            (void);
-extern void _ada_gnat1drv      (void);
+extern void __gnat_initialize           (void *);
+extern void __gnat_install_SEH_handler  (void *);
+extern void adainit                    (void);
+extern void _ada_gnat1drv              (void);
 
 /* The parser for the language.  For us, we process the GNAT tree.  */
 
 static void
 gnat_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
 {
+  int seh[2];
+
   /* call the target specific initializations */
   __gnat_initialize (NULL);
 
+  /* ??? call the SEH initialization routine, this is to workaround a
+  bootstrap path problem. The call below should be removed at some point and
+  the seh pointer passed to __gnat_initialize() above.  */
+
+  __gnat_install_SEH_handler((void *)seh);
+
   /* Call the front-end elaboration procedures */
   adainit ();
 
@@ -289,7 +298,7 @@ gnat_handle_option (size_t scode, const char *arg, int value ATTRIBUTE_UNUSED)
       gnat_argc++;
       break;
 
-    case OPT_fRTS:
+    case OPT_fRTS_:
       gnat_argv[gnat_argc] = xstrdup ("-fRTS");
       gnat_argc++;
       break;