csu-patch   [plain text]


APPLE LOCAL file
diff -u Csu-37-orig/crt.c Csu-37/crt.c
--- Csu-37-orig/crt.c	Thu Jun 28 08:55:59 2001
+++ Csu-37/crt.c	Fri Jan  4 09:40:36 2002
@@ -108,6 +108,7 @@
 asm(".comm __objcInit, 4");
 asm(".comm __cplus_init, 4");
 asm(".comm __carbon_init, 4");
+asm(".comm ___darwin_gcc3_preregister_frame_info, 4");
 extern void _objcInit(void);
 #ifndef POSTSCRIPT
 static void (*pointer_to_objcInit)(void) = _objcInit;
@@ -115,6 +116,7 @@
 extern void _cplus_init(void);
 extern void _carbon_init(int argc, char **argv);
 static void (*pointer_to_carbon_init)(int argc, char **argv) = _carbon_init;
+extern void __darwin_gcc3_preregister_frame_info (void);
 
 #define CARBON	1
 
@@ -195,6 +197,12 @@
 
 #ifdef CRT1
 	__keymgr_dwarf2_register_sections ();
+
+	/* Call a GCC 3.x-specific function (in libgcc.a) to
+	   "preregister" exception frame info, meaning to set up the
+	   dyld hooks that do the actual registration.  */
+        if(*((int *)__darwin_gcc3_preregister_frame_info) != 0)
+	    __darwin_gcc3_preregister_frame_info ();
 #endif
 
 #ifdef CRT0