This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Re: Patch: FYI: re-enable xlib peers
- From: "Scott Gilbertson" <scottg at mantatest dot com>
- To: <tromey at redhat dot com>,"Java Patch List" <java-patches at gcc dot gnu dot org>
- Date: Fri, 22 Jul 2005 18:35:17 -0400
- Subject: Re: Patch: FYI: re-enable xlib peers
- References: <m33bq9dpby.fsf@localhost.localdomain>
I got fresh code and built it, the idea being to report that it works fine
with my xlib application. No dice, unfortunately.
Two problems:
1. I configured with --enable-java-awt=xlib, but the built executable is
looking for the GTK toolkit
2. Building again with -Dawt.toolkit=gnu.awt.xlib.XToolkit, the resulting
executable crashes (see backtrace below)
The application (I tried both static and dynamic executables) runs for a
second or so, and manages to put up some graphics, then says "Aborted".
Interpreted, it immediately aborts without apparently doing anything at all.
I looked through the various threads, doing a backtrace on each, and found,
for example, that the AWT and X event dispatcher threads both look OK when
the application crashes (i.e. both are blocked, waiting for events). It
looks to me as though URLClassLoader.findClass is trying to throw a
ClassNotFoundException, but the exception handling mechanism is messing up
(maybe it has something to do with the "corrupt stack" warning in the
trace), aborting the application rather than printing exception info.
The crashed thread (thread 1) has the following backtrace. It's a
recently-introduced problem, because my July 6 build was OK. Any idea
what's going on?
signal 6, Aborted
#0 0x41460ca1 in kill () from /lib/i686/libc.so.6
#1 0x413dc3a1 in pthread_kill () from /lib/i686/libpthread.so.0
#2 0x413dc71b in raise () from /lib/i686/libpthread.so.0
#3 0x41460908 in raise () from /lib/i686/libc.so.6
#4 0x41461f70 in abort () from /lib/i686/libc.so.6
#5 0x408416e9 in _Jv_Throw (value=0x2b1948) at
../../../gcc/libjava/exception.cc:111
#6 0x40a39abf in java.net.URLClassLoader.findClass(java.lang.String)
(this=0x0,
className=0x2b1a38) at URLClassLoader.java:1011
#7 0x4137059c in __JCR_END__ () from
/var/local/gcc/tip_20050718/lib/libgcj.so.7
#8 0x00000000 in ?? ()
#9 0x002b1a38 in ?? ()
#10 0x00061fc0 in ?? ()
#11 0x40a1eb30 in java.lang.ClassLoader.loadClass(java.lang.String, boolean)
(
this=0xffe5c8, name=0x0, resolve=false) at ClassLoader.java:317
Previous frame inner to this frame (corrupt stack?)
----- Original Message -----
From: "Tom Tromey" <tromey@redhat.com>
To: "Java Patch List" <java-patches@gcc.gnu.org>
Sent: Wednesday, July 20, 2005 7:34 PM
Subject: Patch: FYI: re-enable xlib peers
> I'm checking this in on the trunk.
>
> This changes the build so that the xlib peers can be enabled or
> disabled with a configure option again. It also adds a stub method
> to XToolkit so that the peers can compile.
>
> Tom
>
> Index: ChangeLog
> from Tom Tromey <tromey@redhat.com>
>
> * sources.am, Makefile.in: Rebuilt.
> * Makefile.am (all_xlib_lo_files): Removed.
> (all_libgcj_lo_files): Likewise.
> (lib_gnu_awt_xlib_la_LIBADD): List correct .lo files.
> (xlib_java_source_files): Removed.
> (xlib_nat_headers): Updated.
> * configure: Rebuilt.
> * configure.ac: Create standard.omit.
> * standard.omit.in: New file.
> * standard.omit: Removed.
> * scripts/makemake.tcl (gnu/gcj/xlib, gnu/awt/xlib): Now
> 'package'.
> (emit_package_rule): Special case xlib peers.
> (emit_source_var): Likewise.
> Read standard.omit.in.
> * gnu/awt/xlib/XToolkit.java (createEmbeddedWindow): New method.
>
> Index: Makefile.am
> ===================================================================
> RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v
> retrieving revision 1.496
> diff -u -r1.496 Makefile.am
> --- Makefile.am 18 Jul 2005 20:46:44 -0000 1.496
> +++ Makefile.am 20 Jul 2005 23:35:50 -0000
> @@ -154,12 +154,6 @@
>
> ## ################################################################
>
> -# In the future these may be defined manually, if we decide to split
libgcj.so
> -# into multiple shared libraries. For now, everything but xlib goes into
> -# all_libgcj_lo_files
> -all_xlib_lo_files = gnu/gcj/xlib.lo gnu/awt/xlib.lo
> -all_libgcj_lo_files = $(filter-out $(all_xlib_lo_files),
$(all_java_lo_files))
> -
> all_property_files = $(property_files) \
> java/util/logging/logging.properties
>
> @@ -276,8 +270,9 @@
> libgcjawt_la_LINK = $(LIBLINK)
>
> lib_gnu_awt_xlib_la_SOURCES = $(xlib_nat_source_files)
> -lib_gnu_awt_xlib_la_LIBADD = $(all_xlib_lo_files)
> -lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-$(gcc_version).jar libgcj.la
libgcj.spec \
> +lib_gnu_awt_xlib_la_LIBADD = gnu/awt/xlib.lo gnu/gcj/xlib.lo
> +lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-$(gcc_version).jar \
> + libgcj.la libgcj.spec \
> $(lib_gnu_awt_xlib_la_LIBADD)
> ## We require libstdc++-v3 to be in the same build tree.
> lib_gnu_awt_xlib_la_CPPFLAGS = \
> @@ -389,7 +384,7 @@
> gnu/gcj/tools/gcj_dbtool/Main.h
> nat_headers_install = $(ordinary_header_files)
>
> -xlib_nat_headers = $(patsubst %.java,%.h,$(xlib_java_source_files))
> +xlib_nat_headers = $(gnu_awt_xlib_header_files)
$(gnu_gcj_xlib_header_files)
>
> java/lang/ClassLoader.h: classpath/lib/java/lang/ClassLoader.class
> $(GCJH) -classpath '' -bootclasspath classpath/lib \
> @@ -818,42 +813,6 @@
> java/util/zip/natDeflater.cc \
> java/util/zip/natInflater.cc
>
> -xlib_java_source_files = \
> -gnu/gcj/xlib/Clip.java \
> -gnu/gcj/xlib/Colormap.java \
> -gnu/gcj/xlib/Display.java \
> -gnu/gcj/xlib/Drawable.java \
> -gnu/gcj/xlib/Font.java \
> -gnu/gcj/xlib/GC.java \
> -gnu/gcj/xlib/Pixmap.java \
> -gnu/gcj/xlib/Screen.java \
> -gnu/gcj/xlib/Visual.java \
> -gnu/gcj/xlib/WMSizeHints.java \
> -gnu/gcj/xlib/Window.java \
> -gnu/gcj/xlib/WindowAttributes.java \
> -gnu/gcj/xlib/XAnyEvent.java \
> -gnu/gcj/xlib/XButtonEvent.java \
> -gnu/gcj/xlib/XColor.java \
> -gnu/gcj/xlib/XConfigureEvent.java \
> -gnu/gcj/xlib/XConnectException.java \
> -gnu/gcj/xlib/XEvent.java \
> -gnu/gcj/xlib/XException.java \
> -gnu/gcj/xlib/XExposeEvent.java \
> -gnu/gcj/xlib/XID.java \
> -gnu/gcj/xlib/XImage.java \
> -gnu/gcj/xlib/XUnmapEvent.java \
> -gnu/awt/xlib/XCanvasPeer.java \
> -gnu/awt/xlib/XEventLoop.java \
> -gnu/awt/xlib/XEventQueue.java \
> -gnu/awt/xlib/XFontMetrics.java \
> -gnu/awt/xlib/XFramePeer.java \
> -gnu/awt/xlib/XGraphics.java \
> -gnu/awt/xlib/XGraphicsConfiguration.java \
> -gnu/awt/xlib/XOffScreenImage.java \
> -gnu/awt/xlib/XPanelPeer.java \
> -gnu/awt/xlib/XFontPeer.java \
> -gnu/awt/xlib/XToolkit.java
> -
> xlib_nat_source_files = \
> gnu/gcj/xlib/natClip.cc \
> gnu/gcj/xlib/natColormap.cc \
> Index: configure.ac
> ===================================================================
> RCS file: /cvs/gcc/gcc/libjava/configure.ac,v
> retrieving revision 1.34
> diff -u -r1.34 configure.ac
> --- configure.ac 16 Jul 2005 01:22:59 -0000 1.34
> +++ configure.ac 20 Jul 2005 23:35:55 -0000
> @@ -175,12 +175,10 @@
> echo "*** xlib peers requested but no X library available" 1>&2
> exit 1
> else
> - # This code has bit-rotted a bit.
> - echo "*** xlib peers can't currently be compiled -- disabling" 1>&2
> -# use_xlib_awt="yes"
> -# if test -z "$TOOLKIT"; then
> -# TOOLKIT=gnu.awt.xlib.XToolkit
> -# fi
> + use_xlib_awt="yes"
> + if test -z "$TOOLKIT"; then
> + TOOLKIT=gnu.awt.xlib.XToolkit
> + fi
> fi
> ;;
> gtk)
> @@ -208,6 +206,15 @@
> AM_CONDITIONAL(XLIB_AWT, test "$use_xlib_awt" = yes)
> AM_CONDITIONAL(GTK_AWT, test "$use_gtk_awt" = yes)
>
> +# Create standard.omit based on decisions we just made.
> +cp $srcdir/standard.omit.in standard.omit
> +if test "$use_xlib_awt" != yes; then
> + echo gnu/awt/xlib >> standard.omit
> + echo gnu/gcj/xlib >> standard.omit
> +fi
> +if test "$use_gtk_awt" != yes; then
> + echo gnu/java/awt/peer/gtk >> standard.omit
> +fi
>
> if test -z "${with_multisubdir}"; then
> builddotdot=.
> Index: standard.omit
> ===================================================================
> RCS file: standard.omit
> diff -N standard.omit
> --- standard.omit 16 Jul 2005 01:22:59 -0000 1.1
> +++ /dev/null 1 Jan 1970 00:00:00 -0000
> @@ -1,21 +0,0 @@
> -java/lang/EcosProcess.java
> -java/lang/Win32Process.java
> -java/lang/PosixProcess.java
> -gnu/java/awt/peer/gtk/Test.java
> -gnu/java/awt/peer/gtk/TestAWT.java
> -javax/rmi
> -org/omg
> -gnu/CORBA
> -gnu/javax/rmi
> -gnu/java/nio/charset/iconv
> -java/util/zip/DeflaterConstants.java
> -java/util/zip/DeflaterEngine.java
> -java/util/zip/DeflaterHuffman.java
> -java/util/zip/DeflaterPending.java
> -java/util/zip/InflaterDynHeader.java
> -java/util/zip/InflaterHuffmanTree.java
> -java/util/zip/OutputWindow.java
> -java/util/zip/PendingBuffer.java
> -java/util/zip/StreamManipulator.java
> -gnu/awt/xlib
> -gnu/gcj/xlib
> Index: standard.omit.in
> ===================================================================
> RCS file: standard.omit.in
> diff -N standard.omit.in
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ standard.omit.in 20 Jul 2005 23:35:57 -0000
> @@ -0,0 +1,19 @@
> +java/lang/EcosProcess.java
> +java/lang/Win32Process.java
> +java/lang/PosixProcess.java
> +gnu/java/awt/peer/gtk/Test.java
> +gnu/java/awt/peer/gtk/TestAWT.java
> +javax/rmi
> +org/omg
> +gnu/CORBA
> +gnu/javax/rmi
> +gnu/java/nio/charset/iconv
> +java/util/zip/DeflaterConstants.java
> +java/util/zip/DeflaterEngine.java
> +java/util/zip/DeflaterHuffman.java
> +java/util/zip/DeflaterPending.java
> +java/util/zip/InflaterDynHeader.java
> +java/util/zip/InflaterHuffmanTree.java
> +java/util/zip/OutputWindow.java
> +java/util/zip/PendingBuffer.java
> +java/util/zip/StreamManipulator.java
> Index: scripts/makemake.tcl
> ===================================================================
> RCS file: /cvs/gcc/gcc/libjava/scripts/makemake.tcl,v
> retrieving revision 1.3
> diff -u -r1.3 makemake.tcl
> --- scripts/makemake.tcl 18 Jul 2005 20:54:01 -0000 1.3
> +++ scripts/makemake.tcl 20 Jul 2005 23:35:59 -0000
> @@ -56,8 +56,8 @@
>
> # More special cases. These end up in their own library.
> # Note that if we BC-compile AWT we must update these as well.
> -set package_map(gnu/gcj/xlib) ignore
> -set package_map(gnu/awt/xlib) ignore
> +set package_map(gnu/gcj/xlib) package
> +set package_map(gnu/awt/xlib) package
>
> # Some BC ABI packages have classes which must not be compiled BC.
> # This maps such packages to a grep expression for excluding such
> @@ -253,7 +253,9 @@
> puts ""
> puts ""
>
> - lappend package_files $lname
> + if {$pkgname != "gnu/gcj/xlib" && $pkgname != "gnu/awt/xlib"} {
> + lappend package_files $lname
> + }
> }
>
> # Emit a source file variable for a package, and corresponding header
> @@ -301,8 +303,10 @@
> }
>
> puts "${uname}_header_files = $result"
> - lappend header_vars "${uname}_header_files"
> puts ""
> + if {$pkgname != "gnu/gcj/xlib" && $pkgname != "gnu/awt/xlib"} {
> + lappend header_vars "${uname}_header_files"
> + }
> }
> }
>
> @@ -318,7 +322,7 @@
> }
>
> # Read the proper .omit files.
> -read_omit_file standard.omit
> +read_omit_file standard.omit.in
> read_omit_file classpath/lib/standard.omit
>
> # Scan classpath first.
> Index: gnu/awt/xlib/XToolkit.java
> ===================================================================
> RCS file: /cvs/gcc/gcc/libjava/gnu/awt/xlib/XToolkit.java,v
> retrieving revision 1.11
> diff -u -r1.11 XToolkit.java
> --- gnu/awt/xlib/XToolkit.java 15 Jul 2005 16:07:18 -0000 1.11
> +++ gnu/awt/xlib/XToolkit.java 20 Jul 2005 23:35:59 -0000
> @@ -1,4 +1,4 @@
> -/* Copyright (C) 2000, 2002, 2003 Free Software Foundation
> +/* Copyright (C) 2000, 2002, 2003, 2005 Free Software Foundation
>
> This file is part of libgcj.
>
> @@ -26,8 +26,10 @@
> import gnu.gcj.xlib.Screen;
> import gnu.gcj.xlib.Visual;
> import gnu.java.awt.ClasspathToolkit;
> +import gnu.java.awt.EmbeddedWindow;
> import gnu.java.awt.peer.ClasspathFontPeer;
> import gnu.java.awt.peer.ClasspathTextLayoutPeer;
> +import gnu.java.awt.peer.EmbeddedWindowPeer;
>
> public class XToolkit extends ClasspathToolkit
> {
> @@ -444,6 +446,11 @@
> throw new java.lang.UnsupportedOperationException ();
> }
>
> + public EmbeddedWindowPeer createEmbeddedWindow (EmbeddedWindow w)
> + {
> + throw new java.lang.UnsupportedOperationException ();
> + }
> +
> public boolean nativeQueueEmpty()
> {
> // Tell EventQueue the native queue is empty, because XEventLoop