diff options
| -rw-r--r-- | gcc/ada/ChangeLog | 8 | ||||
| -rw-r--r-- | gcc/ada/init.c | 18 |
2 files changed, 21 insertions, 5 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 85551cb..2caf8dd 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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 diff --git a/gcc/ada/init.c b/gcc/ada/init.c index 4a54aff..e79ce9f 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -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 } |
