gcc/libjava/jni-libjvm.cc
Thomas Fitzsimmons fb5b5d977f Makefile.am (AM_CXXFLAGS): Define GCJ_VERSIONED_LIBDIR to "$(dbexecdir)".
2006-06-20  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* Makefile.am (AM_CXXFLAGS): Define GCJ_VERSIONED_LIBDIR to
	"$(dbexecdir)".
	Build libjvm.la.
	* Makefile.in: Regenerate.
	* jni.cc (the_vm): Rename and export as ...
	(_Jv_the_vm): New exported symbol.
	(_Jv_JNI_AttachCurrentThread): Export.
	(_Jv_JNI_DestroyJavaVM): Replace the_vm references with _Jv_the_vm
	references.
	(_Jv_GetJavaVM): Likewise.
	(JNI_GetDefaultJavaVMInitArgs, JNI_CreateJavaVM,
	JNI_GetCreatedJavaVMs): Move to ...
	* jni-libjvm.cc: New file.

From-SVN: r114824
2006-06-20 19:25:32 +00:00

90 lines
2.0 KiB
C++

// jni-libjvm.cc - an implementation of the JNI invocation API.
/* Copyright (C) 2006 Free Software Foundation
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
#include <gcj/cni.h>
#include <gcj/javaprims.h>
#include <java-assert.h>
#include <jvm.h>
#include <jni.h>
using namespace gcj;
// Forward declarations.
extern struct JNIInvokeInterface _Jv_JNI_InvokeFunctions;
extern jint JNICALL _Jv_JNI_AttachCurrentThread (JavaVM *vm,
void **penv, void *args);
extern JavaVM *_Jv_the_vm;
jint JNICALL
JNI_GetDefaultJavaVMInitArgs (void *args)
{
jint version = * (jint *) args;
// Here we only support 1.2 and 1.4.
if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4)
return JNI_EVERSION;
JavaVMInitArgs *ia = reinterpret_cast<JavaVMInitArgs *> (args);
ia->version = JNI_VERSION_1_4;
ia->nOptions = 0;
ia->options = NULL;
ia->ignoreUnrecognized = true;
return 0;
}
jint JNICALL
JNI_CreateJavaVM (JavaVM **vm, void **penv, void *args)
{
JvAssert (! _Jv_the_vm);
jint version = * (jint *) args;
// We only support 1.2 and 1.4.
if (version != JNI_VERSION_1_2 && version != JNI_VERSION_1_4)
return JNI_EVERSION;
JvVMInitArgs* vm_args = reinterpret_cast<JvVMInitArgs *> (args);
jint result = _Jv_CreateJavaVM (vm_args);
if (result)
return result;
// FIXME: synchronize
JavaVM *nvm = (JavaVM *) _Jv_MallocUnchecked (sizeof (JavaVM));
if (nvm == NULL)
return JNI_ERR;
nvm->functions = &_Jv_JNI_InvokeFunctions;
jint r =_Jv_JNI_AttachCurrentThread (nvm, penv, NULL);
if (r < 0)
return r;
_Jv_the_vm = nvm;
*vm = _Jv_the_vm;
return 0;
}
jint JNICALL
JNI_GetCreatedJavaVMs (JavaVM **vm_buffer, jsize buf_len, jsize *n_vms)
{
if (buf_len <= 0)
return JNI_ERR;
// We only support a single VM.
if (_Jv_the_vm != NULL)
{
vm_buffer[0] = _Jv_the_vm;
*n_vms = 1;
}
else
*n_vms = 0;
return 0;
}