This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Re: _Unwind_FindEnclosingFunction vs darwin
Bryce,
This approach seems cleaner to me...
Index: libgcc/config/t-slibgcc-darwin
===================================================================
--- libgcc/config/t-slibgcc-darwin (revision 155366)
+++ libgcc/config/t-slibgcc-darwin (working copy)
@@ -24,7 +24,7 @@
SHLIB_MKMAP = $(gcc_srcdir)/mkmap-flat.awk
SHLIB_MKMAP_OPTS = -v leading_underscore=1
-SHLIB_MAPFILES += $(gcc_srcdir)/libgcc-std.ver
+SHLIB_MAPFILES += $(gcc_srcdir)/libgcc-std.ver $(gcc_srcdir)/libgcc-darwin10.ver
# we're only going to build the stubs if the target slib is /usr/lib
# there is no other case in which they're useful in a live system.
Index: gcc/unwind-dw2-fde-darwin.c
===================================================================
--- gcc/unwind-dw2-fde-darwin.c (revision 155366)
+++ gcc/unwind-dw2-fde-darwin.c (working copy)
@@ -273,3 +273,15 @@
the_obj_info);
return ret;
}
+
+void *
+_darwin10_Unwind_FindEnclosingFunction (void *pc)
+{
+ struct dwarf_eh_bases bases;
+ const struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases);
+ if (fde)
+ return bases.func;
+ else
+ return NULL;
+}
+
Index: libjava/include/posix.h
===================================================================
--- libjava/include/posix.h (revision 155366)
+++ libjava/include/posix.h (working copy)
@@ -56,6 +56,11 @@
#define _Jv_platform_solib_suffix ".so"
#endif
+#if defined(__APPLE__) && defined(__MACH__)
+#undef _Unwind_FindEnclosingFunction
+#define _Unwind_FindEnclosingFunction(PC) _darwin10_Unwind_FindEnclosingFunction(PC)
+#endif
+
// Some POSIX systems don't have O_SYNC and O_DYSNC so we define them here.
// Needed in java/io/natFileDescriptorPosix.cc.
#if !defined (O_SYNC) && defined (O_FSYNC)
with a newly created file gcc/libgcc-darwin10.ver containing _darwin10_Unwind_FindEnclosingFunction.
This has the advantages of...
1) Not duplicating as much code.
2) Being easier to maintain when the duplicated code needs to be synchronized with
new changes to the original routines.
3) Allowing for other sections of gcc to utilize the restored calls as well
as providing an mechanism to easily restore additional calls from FSF libgcc
that have been silently nooped by Darwin10.
Jack