GCJ application runs not too bad with shared libs, but crashes with static libs

Adam Megacz gcj@lists.megacz.com
Wed Nov 20 16:40:00 GMT 2002


Are you using incremental garbage collection?
 - a
"Scott Gilbertson" <scottg@mantatest.com> writes:
> I'm working on an AWT application with libgcjx. I know that sounds
> dangerous, but I've been able to hack the library enough to make it go,
> since I'm using all custom components, and therefore only need Component,
> Container, Frame and a few layouts.
>> The problem is that if I build it with "-static", it crashes a lot. Running
> gdb with a breakpoint on "abort", it usually stops in __libc_write or
> sigsuspend, sometimes right away, and sometimes after you bang at the
> application for a while. Any little thing seems to change the result. For
> example, I did "gdb mts5000.bin | tee gdb1.tmp", and the thing ran for about
> 10 minutes without crashing before I finally gave up. Redirecting the
> output to /dev/null also seems to improve things. When I run the program on
> my target embedded system, however, it always crashes within 20 seconds or
> so of operation.
>> When I build gcc 3.2.1, I used the following configuration (then
> hand-modified the Makefile as described in my earlier posting).
> ../gcc.orig/configure
> --prefix=/usr
> --mandir=/usr/share/man
> --infodir=/usr/share/info
> --enable-shared
> --enable-threads=posix
> --disable-checking
> --host=i386-redhat-linux
> --enable-java-awt=xlib
> --enable-libgcj
> --enable-languages=java
> --with-system-zlib
> --enable-__cxa_atexit
>>> The shared-library version uses the following libraries (according to ldd):
> libgcjx.so.3 => /usr/lib/libgcjx.so.3 (0x4002f000)
> libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40060000)
> libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4013e000)
> libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x401e8000)
> libgcj.so.3 => /usr/lib/libgcj.so.3 (0x401f0000)
> libm.so.6 => /lib/i686/libm.so.6 (0x407e2000)
> libpthread.so.0 => /lib/i686/libpthread.so.0 (0x40804000)
> libz.so.1 => /usr/lib/libz.so.1 (0x40835000)
> libdl.so.2 => /lib/libdl.so.2 (0x40843000)
> libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
> libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40846000)
> libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x4084f000)
> /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
>> Here are my compile and link commands:
> gcj -O2 -c -o mts5000.o mts5000.jar
> gcj --main=Main -g -o mts5000.bin -static -static-libgcc
> ./libgcjx.o -Dawt.toolkit=gnu.awt.xlib.XToolkit -L/usr/X11R6/lib -lX11 -lstd
> c++ mts5000.o
>> Here is a typical debug output:
> [root@mts5000dev1 java]# gdb mts5000.bin
> GNU gdb Red Hat Linux (5.2.1-4)
> Copyright 2002 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain
> conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB. Type "show warranty" for details.
> This GDB was configured as "i386-redhat-linux"...
> (gdb) set args PC
> (gdb) break abort
> Breakpoint 1 at 0x80a71ca: file ../../../gcc/libjava/exception.cc, line 29.
> (gdb) run
> Starting program: /home/scott/mts5000/java/mts5000.bin PC
> ... lots of application-generated stuff...
> Program received signal SIGABRT, Aborted.
> 0x0817b8e4 in __libc_write ()
> (gdb) where
> #0 0x0817b8e4 in __libc_write ()
> #1 0x00000018 in ?? ()
> #2 0x081155ca in java::io::FileDescriptor::write(JArray<char>*, int, int)
> (this=0x83cffc8, b=0x840edb8, offset=24,
> len=1) at java/io/natFileDescriptor.cc:164
> #3 0x080ce147 in java.io.BufferedOutputStream.flush() (this=0x840a1c0)
> at ../../../gcc/libjava/java/io/BufferedOutputStream.java:141
> #4 0x080cfc22 in java.io.PrintStream.flush() (this=0x83f3fa8) at
> ../../../gcc/libjava/java/io/PrintStream.java:57
> #5 0x080cfcc6 in java.io.PrintStream.print(java.lang.String, boolean)
> (this=0x83f3fa8, str=0x8580270, println=true)
> at ../../../gcc/libjava/java/io/PrintStream.java:77
> #6 0x080d01a0 in java.io.PrintStream.println(java.lang.String)
> (this=0x83f3fa8, str=0x8580270)
> at ../../../gcc/libjava/java/io/PrintStream.java:219
> #7 0x0809a107 in
> manta::mts5000::Main::dumpComponentContents(java::awt::Component*, int,
> java::lang::String*) ()
> #8 0x0809a279 in
> manta::mts5000::Main::dumpComponentContents(java::awt::Component*, int,
> java::lang::String*) ()
> #9 0x0809a279 in
> manta::mts5000::Main::dumpComponentContents(java::awt::Component*, int,
> java::lang::String*) ()
> #10 0x0809a279 in
> manta::mts5000::Main::dumpComponentContents(java::awt::Component*, int,
> java::lang::String*) ()
> #11 0x08099fee in manta::mts5000::Main::Main(JArray<java::lang::String*>*)
> ()
> #12 0x08099cc2 in manta::mts5000::Main::main(JArray<java::lang::String*>*)
> ()
> #13 0x081151a2 in gnu::gcj::runtime::FirstThread::call_main()
> (this=0x8410ea0)
> at ../../../gcc/libjava/gnu/gcj/runtime/natFirstThread.cc:46
> #14 0x080c27d9 in _Jv_ThreadRun(java::lang::Thread*) (thread=0x8410ea0)
> at ../../../gcc/libjava/java/lang/natThread.cc:285
> #15 0x0809e8c4 in _Jv_RunMain(java::lang::Class*, char const*, int, char
> const**, bool) (klass=0x8279900, name=0x0,
> argc=2, argv=0x8410ea0, is_jar=false) at
> ../../../gcc/libjava/prims.cc:1010
> #16 0x0809e9b4 in JvRunMain (klass=0x8279900, argc=2, argv=0xbffff954) at
> ../../../gcc/libjava/prims.cc:1020
> #17 0x080481fd in main (argc=2, argv=0xbffff954) at /tmp/cc30GAd5.i:12
> #18 0x0815b1aa in __libc_start_main ()
> (gdb)
>> Any idea what's going on here?
> Thanks.
>>>
-- 


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /