blob: 1f52e7a52b9c2a7497facf18481436ab8eba3fcd [file] [log] [blame]
// OpenJDK-specific JNI implementation
jobject NewDirectByteBuffer(JNIEnv *env, void *address, jlong capacity) {
JavaObject* res = 0;
llvm_gcroot(res, 0);
BEGIN_JNI_EXCEPTION
JavaThread* th = JavaThread::get();
Jnjvm* myvm = th->getJVM();
UserClass* BB = myvm->upcalls->newDirectByteBuffer;
res = BB->doNew(myvm);
myvm->upcalls->InitDirectByteBuffer->invokeIntSpecial(myvm, BB, res,
(uint64_t)(uintptr_t)address, (int)capacity);
jobject ret = (jobject)th->pushJNIRef(res);
RETURN_FROM_JNI(ret);
END_JNI_EXCEPTION
RETURN_FROM_JNI(0);
}
void *GetDirectBufferAddress(JNIEnv *env, jobject _buf) {
JavaObject* buf = 0;
llvm_gcroot(buf, 0);
BEGIN_JNI_EXCEPTION
// Local object references.
buf = *(JavaObject**)_buf;
jlong address;
Jnjvm* vm = myVM(env);
address = vm->upcalls->bufferAddress->getInstanceLongField(buf);
RETURN_FROM_JNI((void*)address);
END_JNI_EXCEPTION
RETURN_FROM_JNI(0);
}