init.c (__gnat_initialize): Call an Ada subprogram to perform the table registration...
authorOlivier Hainque <hainque@act-europe.fr>
Mon, 4 Oct 2004 15:01:21 +0000 (17:01 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 4 Oct 2004 15:01:21 +0000 (17:01 +0200)
2004-10-04  Olivier Hainque  <hainque@act-europe.fr>

* init.c (__gnat_initialize): Call an Ada subprogram to perform the
table registration calls when need be. Ensures no reference to the crt
ctors symbol are issued in the SJLJ case, which avoids possible
undefined symbol errors in the case of modules to be statically linked
with the kernel.

From-SVN: r88507

gcc/ada/ChangeLog
gcc/ada/init.c

index 85551cbde9142e7278c658428b7081c9e916ca4f..2caf8dd5f0dfe66a1f75a4786dc2a1f0a5cd1e8c 100644 (file)
@@ -1,3 +1,11 @@
+2004-10-04  Olivier Hainque  <hainque@act-europe.fr>
+
+       * init.c (__gnat_initialize): Call an Ada subprogram to perform the
+       table registration calls when need be. Ensures no reference to the crt
+       ctors symbol are issued in the SJLJ case, which avoids possible
+       undefined symbol errors in the case of modules to be statically linked
+       with the kernel.
+
 2004-10-04  Javier Miranda  <miranda@gnat.com>
 
        * sem_ch4.adb (Try_Object_Operation): Reformat the code to expand
index 4a54affe47733b968f9be63d06f6984b995d289e..e79ce9f7190783a5d455b85637e952cb9343b975 100644 (file)
@@ -1850,11 +1850,19 @@ __gnat_initialize (void)
 
 #if DWARF2_UNWIND_INFO && defined (_ARCH_PPC)
  {
-   extern const int __module_has_ctors;
-   extern void __do_global_ctors ();
-
-   if (! __module_has_ctors)
-     __do_global_ctors ();
+   /* The scheme described above is only useful for the actual ZCX case, and
+      we don't want any reference to the crt provided symbols otherwise.  We
+      may not link with any of the crt objects in the non-ZCX case, e.g. from
+      documented procedures instructing the use of -nostdlib, and references
+      to the ctors symbols here would just remain unsatisfied.
+
+      We have no way to avoid those references in the right conditions in this
+      C module, because we have nothing like a IN_ZCX_RTS macro.  This aspect
+      is then deferred to an Ada routine, which can do that based on a test
+      against a constant System flag value.  */
+
+   extern void __gnat_vxw_setup_for_eh (void);
+   __gnat_vxw_setup_for_eh ();
  }
 #endif
 }