This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
JNI_CreateJavaVM() segfaults (i386)
- To: java gcc <java at gcc dot gnu dot org>
- Subject: JNI_CreateJavaVM() segfaults (i386)
- From: Johannes Zellner <johannes at zellner dot org>
- Date: Fri, 21 Sep 2001 00:10:35 +0200
Hi,
the attached program segfaults. gdb shows:
(gdb) run
Starting program: /home/joze/test
[New Thread 1024 (LWP 9071)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1024 (LWP 9071)]
0x40168e4a in java::lang::System::init_properties() () from /usr/lib/libgcj.so.2
(gdb) where
#0 0x40168e4a in java::lang::System::init_properties() () from /usr/lib/libgcj.so.2
#1 0x4017b9a9 in java::lang::System::getProperty(java::lang::String*) () from /usr/lib/libgcj.so.2
#2 0x401bb4a2 in java::util::TimeZone::__U3c_clinit__U3e_() () from /usr/lib/libgcj.so.2
#3 0x4016260c in java::lang::Class::initializeClass() () from /usr/lib/libgcj.so.2
#4 0x4024952d in _Jv_InitClass () from /usr/lib/libgcj.so.2
#5 0x401bba14 in java::util::TimeZone::getTimeZone(java::lang::String*) () from /usr/lib/libgcj.so.2
#6 0x4017b581 in java::lang::System::getDefaultTimeZoneId() () from /usr/lib/libgcj.so.2
#7 0x40168e04 in java::lang::System::init_properties() () from /usr/lib/libgcj.so.2
#8 0x4017b9a9 in java::lang::System::getProperty(java::lang::String*) () from /usr/lib/libgcj.so.2
#9 0x401941cb in java::io::PrintStream::__U3c_clinit__U3e_() () from /usr/lib/libgcj.so.2
#10 0x4016260c in java::lang::Class::initializeClass() () from /usr/lib/libgcj.so.2
#11 0x4014b1c1 in _Jv_AllocObject () from /usr/lib/libgcj.so.2
#12 0x4017bdb7 in java::lang::System::__U3c_clinit__U3e_() () from /usr/lib/libgcj.so.2
#13 0x4016260c in java::lang::Class::initializeClass() () from /usr/lib/libgcj.so.2
#14 0x4024952d in _Jv_InitClass () from /usr/lib/libgcj.so.2
#15 0x4017ba43 in java::lang::System::getSecurityManager() () from /usr/lib/libgcj.so.2
#16 0x4017dd22 in java::lang::ThreadGroup::checkAccess() () from /usr/lib/libgcj.so.2
#17 0x4017bf33 in java::lang::Thread::Thread(java::lang::ThreadGroup*, java::lang::Runnable*, java::lang::String*) () from /usr/lib/libgcj.so.2
#18 0x401c449e in gnu::gcj::jni::NativeThread::NativeThread(java::lang::ThreadGroup*, java::lang::String*) () from /usr/lib/libgcj.so.2
#19 0x4014e005 in _Jv_JNIMethod::call(ffi_cif*, void*, ffi_raw*, void*) () from /usr/lib/libgcj.so.2
#20 0x4014e052 in _Jv_JNIMethod::call(ffi_cif*, void*, ffi_raw*, void*) () from /usr/lib/libgcj.so.2
#21 0x4014e2fd in JNI_CreateJavaVM () from /usr/lib/libgcj.so.2
#22 0x08048765 in main (argc=1, argv=0xbffff154) at test.c:55
#23 0x4042a64f in __libc_start_main () from /lib/libc.so.6
The executable test is linked like this
# ldd ./test
libgcj.so.2 => /usr/lib/libgcj.so.2 (0x40022000)
libgcjgc.so.1 => /usr/lib/libgcjgc.so.1 (0x403e0000)
libz.so.1 => /usr/lib/libz.so.1 (0x403fe000)
libc.so.6 => /lib/libc.so.6 (0x4040d000)
libpthread.so.0 => /lib/libpthread.so.0 (0x4052e000)
libdl.so.2 => /lib/libdl.so.2 (0x40544000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x40548000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
where everything is of the latest (unstable) debian on linux / i386.
The strange thing about this is, that the program segfaults also when using
blackdown's java and linking their libs. I'm beginning to think that
JNI_CreateJavaVM() don't work at all ;-)
Well, is my program the problem, or is it the implementation of
JNI_CreateJavaVM() ?
Any help much appreciated.
--
Johannes
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
const char*
DispatchStatus(int status)
{
switch (status) {
case JNI_OK:
return "success";
break;
case JNI_ERR:
return "unknown error";
break;
case JNI_EDETACHED:
return "thread detached from the VM";
break;
case JNI_EVERSION:
return "JNI version error";
break;
default:
return __FILE__ ": unknow error";
break;
}
}
int
main(int argc, const char** argv)
{
jint status = JNI_OK;
JavaVM* jvm = (JavaVM*)0;
JNIEnv* env = (JNIEnv*)0;
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_2;
vm_args.options = (JavaVMOption*)0;
vm_args.nOptions = 0;
vm_args.ignoreUnrecognized = JNI_FALSE;
status = JNI_GetDefaultJavaVMInitArgs(&vm_args);
if (0 != status) {
fprintf(stderr, "%s\n", DispatchStatus(status));
return EXIT_FAILURE;
}
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (0 != status) {
fprintf(stderr, "test: %s\n", DispatchStatus(status));
return EXIT_FAILURE;
}
fprintf(stderr, "test: success\n");
return EXIT_SUCCESS;
}