OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [jni-libjvm.cc] - Rev 771

Go to most recent revision | Compare with Previous | Blame | View Log

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

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.