This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

JNI_CreateJavaVM() segfaults (i386)


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;
}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]