Classpath, when built as part of gcj, doesn't inherit CFLAGS from
the gcj configury.  As as consequence of this, JNI native code is built
without unwinder data, and backtraces (and exceptions) through native
code don't work.

The solution for this is to compile all native code with -fexceptions.
I could make this a gcj-local patch, but I don't want to add to
Classpath-libgcj divergence, and unwinder data may well be useful
even in non-gcj builds.  It adds a little to the size of the executables
on disk but it adds nothing to the memory they occupy, and you get a
chance to have a working backtrace() for debugging.

Classpath has no CFLAGS macro that applies to all native code, so I had
to add one, EXTRA_CFLAGS.

Andrew.
2008-06-11  Andrew Haley  <[EMAIL PROTECTED]>

        * native/jawt/Makefile.am,
        native/fdlibm/Makefile.am,
        native/jni/java-util/Makefile.am,
        native/jni/gstreamer-peer/Makefile.am,
        native/jni/native-lib/Makefile.am,
        native/jni/gconf-peer/Makefile.am,
        native/jni/gtk-peer/Makefile.am,
        native/jni/xmlj/Makefile.am,
        native/jni/midi-alsa/Makefile.am,
        native/jni/java-nio/Makefile.am,
        native/jni/midi-dssi/Makefile.am,
        native/jni/classpath/Makefile.am,
        native/jni/java-io/Makefile.am,
        native/jni/java-lang/Makefile.am,
        native/jni/java-net/Makefile.am (AM_CFLAGS): Add @[EMAIL PROTECTED]
        * configure.ac (EXTRA_CFLAGS): New macro.

        * lib/Makefile.am (resources): Add .svn.

Index: configure.ac
===================================================================
--- configure.ac        (revision 136102)
+++ configure.ac        (working copy)
@@ -503,6 +503,12 @@
     WARNING_CFLAGS='-W -Wall -Wmissing-declarations -Wwrite-strings 
-Wmissing-prototypes -Wno-long-long'
     AC_SUBST(WARNING_CFLAGS)
 
+    dnl CFLAGS that are used for all native code.
+    dnl We want to compile everything with unwinder data so that backrace()
+    dnl will always work.
+    EXTRA_CFLAGS='-fexceptions -fnon-call-exceptions'
+    AC_SUBST(EXTRA_CFLAGS)
+
     dnl Strict warning flags which not every module uses.
     dnl Should probably be configurable.
     STRICT_WARNING_CFLAGS='-Wstrict-prototypes -pedantic'
Index: classpath/native/jni/classpath/Makefile.am
===================================================================
--- classpath/native/jni/classpath/Makefile.am  (revision 136102)
+++ classpath/native/jni/classpath/Makefile.am  (working copy)
@@ -8,4 +8,5 @@
 
 AM_LDFLAGS = @CLASSPATH_CONVENIENCE@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@
-AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ \
+            @EXTRA_CFLAGS@
Index: classpath/native/jni/gstreamer-peer/Makefile.am
===================================================================
--- classpath/native/jni/gstreamer-peer/Makefile.am     (revision 136102)
+++ classpath/native/jni/gstreamer-peer/Makefile.am     (working copy)
@@ -19,4 +19,5 @@
 # gstreamer contain broken prototypes (by design).
 AM_CFLAGS = @WARNING_CFLAGS@ -Wno-write-strings 
-Wno-missing-field-initializers \
             @ERROR_CFLAGS@ -Wno-unused-parameter @GSTREAMER_BASE_CFLAGS@ \
-            @GDK_CFLAGS@ @GSTREAMER_CFLAGS@ @GSTREAMER_PLUGINS_BASE_CFLAGS@ 
+            @GDK_CFLAGS@ @GSTREAMER_CFLAGS@ @GSTREAMER_PLUGINS_BASE_CFLAGS@ \
+            @EXTRA_CFLAGS@
Index: classpath/native/jni/midi-dssi/Makefile.am
===================================================================
--- classpath/native/jni/midi-dssi/Makefile.am  (revision 136102)
+++ classpath/native/jni/midi-dssi/Makefile.am  (working copy)
@@ -12,4 +12,4 @@
 # No STRICT_WARNING_CFLAGS here as we use dlsym to load the address of 
 # a function,and ISO C prohibits casting void pointers, like those returned
 # by dlsym, to function pointers.
-AM_CFLAGS = @WARNING_CFLAGS@ @ERROR_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @ERROR_CFLAGS@ @EXTRA_CFLAGS@
Index: classpath/native/jni/gconf-peer/Makefile.am
===================================================================
--- classpath/native/jni/gconf-peer/Makefile.am (revision 136102)
+++ classpath/native/jni/gconf-peer/Makefile.am (working copy)
@@ -10,4 +10,5 @@
 
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@
 
-AM_CFLAGS = @WARNING_CFLAGS@ @ERROR_CFLAGS@ @GCONF_CFLAGS@ @GDK_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @ERROR_CFLAGS@ @GCONF_CFLAGS@ @GDK_CFLAGS@ \
+            @EXTRA_CFLAGS@
Index: classpath/native/jni/java-io/Makefile.am
===================================================================
--- classpath/native/jni/java-io/Makefile.am    (revision 136102)
+++ classpath/native/jni/java-io/Makefile.am    (working copy)
@@ -9,4 +9,5 @@
 
 AM_LDFLAGS = @CLASSPATH_MODULE@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@
-AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ \
+            @EXTRA_CFLAGS@
Index: classpath/native/jni/native-lib/Makefile.am
===================================================================
--- classpath/native/jni/native-lib/Makefile.am (revision 136102)
+++ classpath/native/jni/native-lib/Makefile.am (working copy)
@@ -9,4 +9,5 @@
 
 AM_LDFLAGS = @CLASSPATH_MODULE@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@
-AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ \
+            @EXTRA_CFLAGS@
Index: classpath/native/jni/java-util/Makefile.am
===================================================================
--- classpath/native/jni/java-util/Makefile.am  (revision 136102)
+++ classpath/native/jni/java-util/Makefile.am  (working copy)
@@ -4,4 +4,6 @@
 
 AM_LDFLAGS = @CLASSPATH_MODULE@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@
-AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ \
+            @EXTRA_CFLAGS@
+
Index: classpath/native/jni/java-lang/Makefile.am
===================================================================
--- classpath/native/jni/java-lang/Makefile.am  (revision 136102)
+++ classpath/native/jni/java-lang/Makefile.am  (working copy)
@@ -16,4 +16,5 @@
 
 AM_LDFLAGS = @CLASSPATH_MODULE@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@ -I$(top_srcdir)/native/fdlibm
-AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ \
+            @EXTRA_CFLAGS@
Index: classpath/native/jni/midi-alsa/Makefile.am
===================================================================
--- classpath/native/jni/midi-alsa/Makefile.am  (revision 136102)
+++ classpath/native/jni/midi-alsa/Makefile.am  (working copy)
@@ -9,4 +9,5 @@
 
 AM_LDFLAGS = @CLASSPATH_MODULE@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@ `pkg-config  --cflags-only-I alsa`
-AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ 
`pkg-config --cflags-only-other alsa`
+AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ 
`pkg-config --cflags-only-other alsa` \
+            @EXTRA_CFLAGS@
Index: classpath/native/jni/java-nio/Makefile.am
===================================================================
--- classpath/native/jni/java-nio/Makefile.am   (revision 136102)
+++ classpath/native/jni/java-nio/Makefile.am   (working copy)
@@ -20,4 +20,5 @@
 
 AM_LDFLAGS = @CLASSPATH_MODULE@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@
-AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ \
+            @EXTRA_CFLAGS@
Index: classpath/native/jni/java-net/Makefile.am
===================================================================
--- classpath/native/jni/java-net/Makefile.am   (revision 136102)
+++ classpath/native/jni/java-net/Makefile.am   (working copy)
@@ -22,4 +22,5 @@
 
 AM_LDFLAGS = @CLASSPATH_MODULE@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@
-AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @ERROR_CFLAGS@ \
+            @EXTRA_CFLAGS@
Index: classpath/native/jni/xmlj/Makefile.am
===================================================================
--- classpath/native/jni/xmlj/Makefile.am       (revision 136102)
+++ classpath/native/jni/xmlj/Makefile.am       (working copy)
@@ -22,6 +22,7 @@
 AM_CPPFLAGS = @CLASSPATH_INCLUDES@
 
 # Don't enable ERROR flags. Code isn't warning free yet.
-AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @XML_CFLAGS@ @XSLT_CFLAGS@
+AM_CFLAGS = @WARNING_CFLAGS@ @STRICT_WARNING_CFLAGS@ @XML_CFLAGS@ \
+            @XSLT_CFLAGS@ @EXTRA_CFLAGS@
 
 EXTRA_DIST = BUGS
Index: classpath/native/jni/gtk-peer/Makefile.am
===================================================================
--- classpath/native/jni/gtk-peer/Makefile.am   (revision 136102)
+++ classpath/native/jni/gtk-peer/Makefile.am   (working copy)
@@ -58,4 +58,4 @@
 # headers contain broken prototypes (by design, see gtkitemfactory.h).
 AM_CFLAGS = @WARNING_CFLAGS@ @ERROR_CFLAGS@ \
             @GTK_CFLAGS@ @FREETYPE2_CFLAGS@ @PANGOFT2_CFLAGS@ \
-            @X_CFLAGS@
+            @X_CFLAGS@ @EXTRA_CFLAGS@
Index: classpath/native/jawt/Makefile.am
===================================================================
--- classpath/native/jawt/Makefile.am   (revision 136102)
+++ classpath/native/jawt/Makefile.am   (working copy)
@@ -10,4 +10,4 @@
 # Just the WARNING_CFLAGS. We cannot use the strict flags since the gtk
 # headers contain broken prototypes (by design, see gtkitemfactory.h).
 AM_CFLAGS = @WARNING_CFLAGS@ @ERROR_CFLAGS@ \
-            @GTK_CFLAGS@ @PANGOFT2_CFLAGS@
+            @GTK_CFLAGS@ @PANGOFT2_CFLAGS@ @EXTRA_CFLAGS@
Index: classpath/native/fdlibm/Makefile.am
===================================================================
--- classpath/native/fdlibm/Makefile.am (revision 136102)
+++ classpath/native/fdlibm/Makefile.am (working copy)
@@ -60,6 +60,6 @@
 
 AM_LDFLAGS = @CLASSPATH_CONVENIENCE@ 
 
-# We just want the standard flags for fdlibm since it is an upstream lib
-# and our normal -pedantic -Wall -Werror breaks this lib. So no AM_CFLAGS.
-# We also don't need extra includes, so no AM_CPPFLAGS either.
+AM_CFLAGS = @EXTRA_CFLAGS@
+
+# We don't need extra includes, so no AM_CPPFLAGS.
Index: classpath/lib/Makefile.am
===================================================================
--- classpath/lib/Makefile.am   (revision 136102)
+++ classpath/lib/Makefile.am   (working copy)
@@ -96,7 +96,7 @@
           if ! test -d "$$dirname"; then mkdir -p "$$dirname"; fi; \
          cp $(top_srcdir)/resource/$$p $$p; \
        done
-       @list=`cd $(top_srcdir)/resource && $(FIND) META-INF -name CVS -prune 
-o -name \*\.in -prune -o -type f -print`; for p in $$list; do \
+       @list=`cd $(top_srcdir)/resource && $(FIND) META-INF -name CVS -prune 
-o -name .svn -prune -o -name \*\.in -prune -o -type f -print`; for p in 
$$list; do \
           dirname=`dirname $$p`; \
           if ! test -d "$$dirname"; then mkdir -p "$$dirname"; fi; \
          cp $(top_srcdir)/resource/$$p $$p; \

Reply via email to