public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* libgcj/1243: gij freezes when running program with System.loadLibrary
@ 2000-12-20 12:22 Oskar Liljeblad
  0 siblings, 0 replies; only message in thread
From: Oskar Liljeblad @ 2000-12-20 12:22 UTC (permalink / raw)
  To: java-gnats

>Number:         1243
>Category:       libgcj
>Synopsis:       gij freezes when running program with System.loadLibrary
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    green
>State:          open
>Class:          sw-bug
>Submitter-Id:   unknown
>Arrival-Date:   Wed Dec 20 12:18:12 PST 2000
>Closed-Date:    
>Last-Modified:  Tue Apr 25 15:16:00 PDT 2000
>Originator:     
>Release:        
>Organization:
>Environment:

>Description:
 --82I3+IH0IqGh5yIs
 Content-Type: text/plain; charset=us-ascii
 
 Category: gcj
 Release: libgcj 20000418 snapshot
 Environment: libc6 2.1.3, egcs 2.96 20000417 snapshot
 
 When I run gij on the following program, gij executes it,
 but stops responding before anything is printed.
 However, compiling the program to native code and
 running that instead, works fine.
 
 The program is simple, and has been attached. The
 Makefile contains 'run' and 'run-gij' to test the
 various executing methods.
 
 Oskar Liljeblad (osk@hem.passagen.se)
 
 --82I3+IH0IqGh5yIs
 Content-Type: text/x-java
 Content-Disposition: attachment; filename="HelloWorld.java"
 
 class HelloWorld {
 	public native void hello();
 	static {
 		System.loadLibrary("helloworld");
 	}
 }
 
 class Demo {
 	public static void main(String[] args) {
 		new HelloWorld().hello();
 	}
 }
 
 --82I3+IH0IqGh5yIs
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename=Makefile
 
 LIBJAVA_PREFIX = /home/usel/Base
 
 LD_LIBRARY_PATH := $(LD_LIBRARY_PATH):.
 
 CLASSPATH := $(CLASSPATH):.
 
 .PHONY: all clean run run-gij
 
 all: Demo
 
 clean:
 	-rm -f *.o *.class Demo HelloWorld.h libhelloworld.so
 
 run: all
 	Demo
 
 run-gij: all
 	gij Demo
 
 Demo.class HelloWorld.class: HelloWorld.java
 	gcj -C $<
 
 %.o: %.class
 	gcj -c $<
 
 HelloWorld.h: HelloWorld.java
 	gcjh HelloWorld
 
 natHelloWorld.o: natHelloWorld.cc HelloWorld.h
 	g++ -g -I. -I$(LIBJAVA_PREFIX)/include -fno-rtti -c $<
 
 libhelloworld.so: natHelloWorld.o
 	gcc -shared -o $@ $^
 
 Demo: HelloWorld.o Demo.o libhelloworld.so
 	gcj --main=Demo -o $@ HelloWorld.o Demo.o -L. -lhelloworld
 
 --82I3+IH0IqGh5yIs
 Content-Type: text/x-c++src
 Content-Disposition: attachment; filename="natHelloWorld.cc"
 
 #include <stdio.h>
 
 #include <gcj/cni.h>
 
 #include <HelloWorld.h>
 
 void
 HelloWorld::hello()
 {
 	printf("Hello, GCJ world!\n");
 }
 
 --82I3+IH0IqGh5yIs--
>How-To-Repeat:

>Fix:

>Release-Note:

>Audit-Trail:

Formerly PR libgcj/215


From: Bryce McKinlay <bryce@albatross.co.nz>
To: java-gnats@sourceware.cygnus.com, osk@hem.passagen.se, green@cygnus.com
Cc:  
Subject: Re: libgcj/215
Date: Mon, 24 Apr 2000 01:24:21 +1200

 Hi Oskar,
 
 When I run this, I don't get a freeze. I get:
 
 $ gij Demo
 java.lang.ExceptionInInitializerError
    at 0x400edf0b: java::lang::Throwable::Throwable(void)
 (/usr/local/gcc/lib/libgcj.so.1)
    at 0x400e3002: java::lang::Error::Error(void)
 (/usr/local/gcc/lib/libgcj.so.1)
    at 0x400e5282: java::lang::LinkageError::LinkageError(void)
 (/usr/local/gcc/lib/libgcj.so.1)
    at 0x400e319e:
 java::lang::ExceptionInInitializerError::ExceptionInInitializerError(java::lang::Throwable
 *) (/usr/local/gcc/lib/libgcj.so.1)
    at 0x40134700: java::lang::Class::initializeClass(void)
 (/usr/local/gcc/lib/libgcj.so.1)
    at 0x400bab3e: _Jv_InterpMethod::continue1(_Jv_InterpMethodInvocation
 *) (/usr/local/gcc/lib/libgcj.so.1)
 [...]
 
 Looking closer, a NullPointerException is thrown from inside the
 "HelloWorld" initializer, in _Jv_ResolvePoolEntry.
 
 Basically, loading native code from interpreted code doesn't yet work.
 (In this case loading a native method implementation, but loading
 compiled java code using forName() from interpreted code doesn't work
 yet, either).
 
 regards
 
   [ bryce ]
 
 http://sourceware.cygnus.com/cgi-bin/gnatsweb.pl?cmd=view&pr=215&database=java
 
 
 

From: Tom Tromey <tromey@cygnus.com>
To: Bryce McKinlay <bryce@albatross.co.nz>
Cc: green@cygnus.com, java-gnats@sourceware.cygnus.com
Subject: Re: libgcj/215
Date: Tue, 25 Apr 2000 15:13:16 -0700 (PDT)

 Bryce>  Basically, loading native code from interpreted code doesn't
 Bryce>  yet work.  (In this case loading a native method
 Bryce>  implementation, but loading compiled java code using forName()
 Bryce>  from interpreted code doesn't work yet, either).
 
 I've solved this problem when the native method is implemented using
 JNI (patch pending).  But we haven't even considered it for CNI code.
 I guess there's no reason to prohibit this case, though it does seem
 unusual.  One idea would be to add a CNI function that could be used
 to register these functions (from JNI_OnLoad).  Another idea would be
 to hack jni.cc to generate the mangling for such methods and look for
 them before looking for a CNI method.  Ouch.
 
 Tom
>Unformatted:



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2000-12-20 12:22 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-12-20 12:22 libgcj/1243: gij freezes when running program with System.loadLibrary Oskar Liljeblad

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).