< prev index next >
src/share/vm/prims/jvm.cpp
Print this page
*** 413,443 ****
// java.lang.Runtime /////////////////////////////////////////////////////////////////////////
extern volatile jint vm_created;
- JVM_ENTRY_NO_ENV(void, JVM_Exit(jint code))
- if (vm_created != 0 && (code == 0)) {
- // The VM is about to exit. We call back into Java to check whether finalizers should be run
- Universe::run_finalizers_on_exit();
- }
- before_exit(thread);
- vm_exit(code);
- JVM_END
-
-
JVM_ENTRY_NO_ENV(void, JVM_Halt(jint code))
before_exit(thread);
vm_exit(code);
JVM_END
- JVM_LEAF(void, JVM_OnExit(void (*func)(void)))
- register_on_exit_function(func);
- JVM_END
-
-
JVM_ENTRY_NO_ENV(void, JVM_GC(void))
JVMWrapper("JVM_GC");
if (!DisableExplicitGC) {
Universe::heap()->collect(GCCause::_java_lang_system_gc);
}
--- 413,428 ----
*** 448,466 ****
JVMWrapper("JVM_MaxObjectInspectionAge");
return Universe::heap()->millis_since_last_gc();
JVM_END
- JVM_LEAF(void, JVM_TraceInstructions(jboolean on))
- if (PrintJVMWarnings) warning("JVM_TraceInstructions not supported");
- JVM_END
-
-
- JVM_LEAF(void, JVM_TraceMethodCalls(jboolean on))
- if (PrintJVMWarnings) warning("JVM_TraceMethodCalls not supported");
- JVM_END
-
static inline jlong convert_size_t_to_jlong(size_t val) {
// In the 64-bit vm, a size_t can overflow a jlong (which is signed).
NOT_LP64 (return (jlong)val;)
LP64_ONLY(return (jlong)MIN2(val, (size_t)max_jlong);)
}
--- 433,442 ----
*** 626,689 ****
}
return JNIHandles::make_local(env, oop(new_obj));
JVM_END
- // java.lang.Compiler ////////////////////////////////////////////////////
-
- // The initial cuts of the HotSpot VM will not support JITs, and all existing
- // JITs would need extensive changes to work with HotSpot. The JIT-related JVM
- // functions are all silently ignored unless JVM warnings are printed.
-
- JVM_LEAF(void, JVM_InitializeCompiler (JNIEnv *env, jclass compCls))
- if (PrintJVMWarnings) warning("JVM_InitializeCompiler not supported");
- JVM_END
-
-
- JVM_LEAF(jboolean, JVM_IsSilentCompiler(JNIEnv *env, jclass compCls))
- if (PrintJVMWarnings) warning("JVM_IsSilentCompiler not supported");
- return JNI_FALSE;
- JVM_END
-
-
- JVM_LEAF(jboolean, JVM_CompileClass(JNIEnv *env, jclass compCls, jclass cls))
- if (PrintJVMWarnings) warning("JVM_CompileClass not supported");
- return JNI_FALSE;
- JVM_END
-
-
- JVM_LEAF(jboolean, JVM_CompileClasses(JNIEnv *env, jclass cls, jstring jname))
- if (PrintJVMWarnings) warning("JVM_CompileClasses not supported");
- return JNI_FALSE;
- JVM_END
-
-
- JVM_LEAF(jobject, JVM_CompilerCommand(JNIEnv *env, jclass compCls, jobject arg))
- if (PrintJVMWarnings) warning("JVM_CompilerCommand not supported");
- return NULL;
- JVM_END
-
-
- JVM_LEAF(void, JVM_EnableCompiler(JNIEnv *env, jclass compCls))
- if (PrintJVMWarnings) warning("JVM_EnableCompiler not supported");
- JVM_END
-
-
- JVM_LEAF(void, JVM_DisableCompiler(JNIEnv *env, jclass compCls))
- if (PrintJVMWarnings) warning("JVM_DisableCompiler not supported");
- JVM_END
-
-
-
- // Error message support //////////////////////////////////////////////////////
-
- JVM_LEAF(jint, JVM_GetLastErrorString(char *buf, int len))
- JVMWrapper("JVM_GetLastErrorString");
- return (jint)os::lasterror(buf, len);
- JVM_END
-
-
// java.io.File ///////////////////////////////////////////////////////////////
JVM_LEAF(char*, JVM_NativePath(char* path))
JVMWrapper2("JVM_NativePath (%s)", path);
return os::native_path(path);
--- 602,611 ----
*** 755,770 ****
return (jclass) JNIHandles::make_local(env, mirror);
}
JVM_END
- JVM_ENTRY(void, JVM_ResolveClass(JNIEnv* env, jclass cls))
- JVMWrapper("JVM_ResolveClass");
- if (PrintJVMWarnings) warning("JVM_ResolveClass not implemented");
- JVM_END
-
-
// Returns a class loaded by the bootstrap class loader; or null
// if not found. ClassNotFoundException is not thrown.
//
// Rationale behind JVM_FindClassFromBootLoader
// a> JVM_FindClassFromClassLoader was never exported in the export tables.
--- 677,686 ----
*** 1612,1636 ****
}
}
return true;
}
- JVM_ENTRY(jbyteArray, JVM_GetFieldAnnotations(JNIEnv *env, jobject field))
- // field is a handle to a java.lang.reflect.Field object
- assert(field != NULL, "illegal field");
- JVMWrapper("JVM_GetFieldAnnotations");
-
- fieldDescriptor fd;
- bool gotFd = jvm_get_field_common(field, fd, CHECK_NULL);
- if (!gotFd) {
- return NULL;
- }
-
- return (jbyteArray) JNIHandles::make_local(env, Annotations::make_java_array(fd.annotations(), THREAD));
- JVM_END
-
-
static Method* jvm_get_method_common(jobject method) {
// some of this code was adapted from from jni_FromReflectedMethod
oop reflected = JNIHandles::resolve_non_null(method);
oop mirror = NULL;
--- 1528,1537 ----
*** 1650,1701 ****
Method* m = InstanceKlass::cast(k)->method_with_idnum(slot);
assert(m != NULL, "cannot find method");
return m; // caller has to deal with NULL in product mode
}
-
- JVM_ENTRY(jbyteArray, JVM_GetMethodAnnotations(JNIEnv *env, jobject method))
- JVMWrapper("JVM_GetMethodAnnotations");
-
- // method is a handle to a java.lang.reflect.Method object
- Method* m = jvm_get_method_common(method);
- if (m == NULL) {
- return NULL;
- }
-
- return (jbyteArray) JNIHandles::make_local(env,
- Annotations::make_java_array(m->annotations(), THREAD));
- JVM_END
-
-
- JVM_ENTRY(jbyteArray, JVM_GetMethodDefaultAnnotationValue(JNIEnv *env, jobject method))
- JVMWrapper("JVM_GetMethodDefaultAnnotationValue");
-
- // method is a handle to a java.lang.reflect.Method object
- Method* m = jvm_get_method_common(method);
- if (m == NULL) {
- return NULL;
- }
-
- return (jbyteArray) JNIHandles::make_local(env,
- Annotations::make_java_array(m->annotation_default(), THREAD));
- JVM_END
-
-
- JVM_ENTRY(jbyteArray, JVM_GetMethodParameterAnnotations(JNIEnv *env, jobject method))
- JVMWrapper("JVM_GetMethodParameterAnnotations");
-
- // method is a handle to a java.lang.reflect.Method object
- Method* m = jvm_get_method_common(method);
- if (m == NULL) {
- return NULL;
- }
-
- return (jbyteArray) JNIHandles::make_local(env,
- Annotations::make_java_array(m->parameter_annotations(), THREAD));
- JVM_END
-
/* Type use annotations support (JDK 1.8) */
JVM_ENTRY(jbyteArray, JVM_GetClassTypeAnnotations(JNIEnv *env, jclass cls))
assert (cls != NULL, "illegal class");
JVMWrapper("JVM_GetClassTypeAnnotations");
--- 1551,1560 ----
*** 2678,2758 ****
Klass* klass1 = java_lang_Class::as_Klass(class1_mirror);
Klass* klass2 = java_lang_Class::as_Klass(class2_mirror);
return (jboolean) Reflection::is_same_class_package(klass1, klass2);
JVM_END
-
- // IO functions ////////////////////////////////////////////////////////////////////////////////////////
-
- JVM_LEAF(jint, JVM_Open(const char *fname, jint flags, jint mode))
- JVMWrapper2("JVM_Open (%s)", fname);
-
- //%note jvm_r6
- int result = os::open(fname, flags, mode);
- if (result >= 0) {
- return result;
- } else {
- switch(errno) {
- case EEXIST:
- return JVM_EEXIST;
- default:
- return -1;
- }
- }
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Close(jint fd))
- JVMWrapper2("JVM_Close (0x%x)", fd);
- //%note jvm_r6
- return os::close(fd);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Read(jint fd, char *buf, jint nbytes))
- JVMWrapper2("JVM_Read (0x%x)", fd);
-
- //%note jvm_r6
- return (jint)os::restartable_read(fd, buf, nbytes);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Write(jint fd, char *buf, jint nbytes))
- JVMWrapper2("JVM_Write (0x%x)", fd);
-
- //%note jvm_r6
- return (jint)os::write(fd, buf, nbytes);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Available(jint fd, jlong *pbytes))
- JVMWrapper2("JVM_Available (0x%x)", fd);
- //%note jvm_r6
- return os::available(fd, pbytes);
- JVM_END
-
-
- JVM_LEAF(jlong, JVM_Lseek(jint fd, jlong offset, jint whence))
- JVMWrapper4("JVM_Lseek (0x%x, " INT64_FORMAT ", %d)", fd, (int64_t) offset, whence);
- //%note jvm_r6
- return os::lseek(fd, offset, whence);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_SetLength(jint fd, jlong length))
- JVMWrapper3("JVM_SetLength (0x%x, " INT64_FORMAT ")", fd, (int64_t) length);
- return os::ftruncate(fd, length);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Sync(jint fd))
- JVMWrapper2("JVM_Sync (0x%x)", fd);
- //%note jvm_r6
- return os::fsync(fd);
- JVM_END
-
-
// Printing support //////////////////////////////////////////////////
extern "C" {
ATTRIBUTE_PRINTF(3, 0)
int jio_vsnprintf(char *str, size_t count, const char *fmt, va_list args) {
--- 2537,2546 ----
*** 3420,3519 ****
}
return (!access.is_private() && InstanceKlass::cast(current_class)->is_same_class_package(field_class));
}
-
- // JVM_AllocateNewObject and JVM_AllocateNewArray are unused as of 1.4
- JVM_ENTRY(jobject, JVM_AllocateNewObject(JNIEnv *env, jobject receiver, jclass currClass, jclass initClass))
- JVMWrapper("JVM_AllocateNewObject");
- JvmtiVMObjectAllocEventCollector oam;
- // Receiver is not used
- oop curr_mirror = JNIHandles::resolve_non_null(currClass);
- oop init_mirror = JNIHandles::resolve_non_null(initClass);
-
- // Cannot instantiate primitive types
- if (java_lang_Class::is_primitive(curr_mirror) || java_lang_Class::is_primitive(init_mirror)) {
- ResourceMark rm(THREAD);
- THROW_0(vmSymbols::java_lang_InvalidClassException());
- }
-
- // Arrays not allowed here, must use JVM_AllocateNewArray
- if (java_lang_Class::as_Klass(curr_mirror)->oop_is_array() ||
- java_lang_Class::as_Klass(init_mirror)->oop_is_array()) {
- ResourceMark rm(THREAD);
- THROW_0(vmSymbols::java_lang_InvalidClassException());
- }
-
- instanceKlassHandle curr_klass (THREAD, java_lang_Class::as_Klass(curr_mirror));
- instanceKlassHandle init_klass (THREAD, java_lang_Class::as_Klass(init_mirror));
-
- assert(curr_klass->is_subclass_of(init_klass()), "just checking");
-
- // Interfaces, abstract classes, and java.lang.Class classes cannot be instantiated directly.
- curr_klass->check_valid_for_instantiation(false, CHECK_NULL);
-
- // Make sure klass is initialized, since we are about to instantiate one of them.
- curr_klass->initialize(CHECK_NULL);
-
- methodHandle m (THREAD,
- init_klass->find_method(vmSymbols::object_initializer_name(),
- vmSymbols::void_method_signature()));
- if (m.is_null()) {
- ResourceMark rm(THREAD);
- THROW_MSG_0(vmSymbols::java_lang_NoSuchMethodError(),
- Method::name_and_sig_as_C_string(init_klass(),
- vmSymbols::object_initializer_name(),
- vmSymbols::void_method_signature()));
- }
-
- if (curr_klass == init_klass && !m->is_public()) {
- // Calling the constructor for class 'curr_klass'.
- // Only allow calls to a public no-arg constructor.
- // This path corresponds to creating an Externalizable object.
- THROW_0(vmSymbols::java_lang_IllegalAccessException());
- }
-
- if (!force_verify_field_access(curr_klass(), init_klass(), m->access_flags(), false)) {
- // subclass 'curr_klass' does not have access to no-arg constructor of 'initcb'
- THROW_0(vmSymbols::java_lang_IllegalAccessException());
- }
-
- Handle obj = curr_klass->allocate_instance_handle(CHECK_NULL);
- // Call constructor m. This might call a constructor higher up in the hierachy
- JavaCalls::call_default_constructor(thread, m, obj, CHECK_NULL);
-
- return JNIHandles::make_local(obj());
- JVM_END
-
-
- JVM_ENTRY(jobject, JVM_AllocateNewArray(JNIEnv *env, jobject obj, jclass currClass, jint length))
- JVMWrapper("JVM_AllocateNewArray");
- JvmtiVMObjectAllocEventCollector oam;
- oop mirror = JNIHandles::resolve_non_null(currClass);
-
- if (java_lang_Class::is_primitive(mirror)) {
- THROW_0(vmSymbols::java_lang_InvalidClassException());
- }
- Klass* k = java_lang_Class::as_Klass(mirror);
- oop result;
-
- if (k->oop_is_typeArray()) {
- // typeArray
- result = TypeArrayKlass::cast(k)->allocate(length, CHECK_NULL);
- } else if (k->oop_is_objArray()) {
- // objArray
- ObjArrayKlass* oak = ObjArrayKlass::cast(k);
- oak->initialize(CHECK_NULL); // make sure class is initialized (matches Classic VM behavior)
- result = oak->allocate(length, CHECK_NULL);
- } else {
- THROW_0(vmSymbols::java_lang_InvalidClassException());
- }
- return JNIHandles::make_local(env, result);
- JVM_END
-
-
// Return the first non-null class loader up the execution stack, or null
// if only code from the null class loader is on the stack.
JVM_ENTRY(jobject, JVM_LatestUserDefinedLoader(JNIEnv *env))
for (vframeStream vfst(thread); !vfst.at_end(); vfst.next()) {
--- 3208,3217 ----
*** 3525,3588 ****
}
return NULL;
JVM_END
- // Load a class relative to the most recent class on the stack with a non-null
- // classloader.
- // This function has been deprecated and should not be considered part of the
- // specified JVM interface.
-
- JVM_ENTRY(jclass, JVM_LoadClass0(JNIEnv *env, jobject receiver,
- jclass currClass, jstring currClassName))
- JVMWrapper("JVM_LoadClass0");
- // Receiver is not used
- ResourceMark rm(THREAD);
-
- // Class name argument is not guaranteed to be in internal format
- Handle classname (THREAD, JNIHandles::resolve_non_null(currClassName));
- Handle string = java_lang_String::internalize_classname(classname, CHECK_NULL);
-
- const char* str = java_lang_String::as_utf8_string(string());
-
- if (str == NULL || (int)strlen(str) > Symbol::max_length()) {
- // It's impossible to create this class; the name cannot fit
- // into the constant pool.
- THROW_MSG_0(vmSymbols::java_lang_NoClassDefFoundError(), str);
- }
-
- TempNewSymbol name = SymbolTable::new_symbol(str, CHECK_NULL);
- Handle curr_klass (THREAD, JNIHandles::resolve(currClass));
- // Find the most recent class on the stack with a non-null classloader
- oop loader = NULL;
- oop protection_domain = NULL;
- if (curr_klass.is_null()) {
- for (vframeStream vfst(thread);
- !vfst.at_end() && loader == NULL;
- vfst.next()) {
- if (!vfst.method()->is_native()) {
- InstanceKlass* holder = vfst.method()->method_holder();
- loader = holder->class_loader();
- protection_domain = holder->protection_domain();
- }
- }
- } else {
- Klass* curr_klass_oop = java_lang_Class::as_Klass(curr_klass());
- loader = InstanceKlass::cast(curr_klass_oop)->class_loader();
- protection_domain = InstanceKlass::cast(curr_klass_oop)->protection_domain();
- }
- Handle h_loader(THREAD, loader);
- Handle h_prot (THREAD, protection_domain);
- jclass result = find_class_from_class_loader(env, name, true, h_loader, h_prot,
- false, thread);
- if (TraceClassResolution && result != NULL) {
- trace_class_resolution(java_lang_Class::as_Klass(JNIHandles::resolve_non_null(result)));
- }
- return result;
- JVM_END
-
-
// Array ///////////////////////////////////////////////////////////////////////////////////////////
// resolve array handle and check arguments
static inline arrayOop check_array(JNIEnv *env, jobject arr, bool type_array_only, TRAPS) {
--- 3223,3232 ----
*** 3674,3820 ****
oop result = Reflection::reflect_new_multi_array(element_mirror, typeArrayOop(dim_array), CHECK_NULL);
return JNIHandles::make_local(env, result);
JVM_END
- // Networking library support ////////////////////////////////////////////////////////////////////
-
- JVM_LEAF(jint, JVM_InitializeSocketLibrary())
- JVMWrapper("JVM_InitializeSocketLibrary");
- return 0;
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Socket(jint domain, jint type, jint protocol))
- JVMWrapper("JVM_Socket");
- return os::socket(domain, type, protocol);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_SocketClose(jint fd))
- JVMWrapper2("JVM_SocketClose (0x%x)", fd);
- //%note jvm_r6
- return os::socket_close(fd);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_SocketShutdown(jint fd, jint howto))
- JVMWrapper2("JVM_SocketShutdown (0x%x)", fd);
- //%note jvm_r6
- return os::socket_shutdown(fd, howto);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Recv(jint fd, char *buf, jint nBytes, jint flags))
- JVMWrapper2("JVM_Recv (0x%x)", fd);
- //%note jvm_r6
- return os::recv(fd, buf, (size_t)nBytes, (uint)flags);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Send(jint fd, char *buf, jint nBytes, jint flags))
- JVMWrapper2("JVM_Send (0x%x)", fd);
- //%note jvm_r6
- return os::send(fd, buf, (size_t)nBytes, (uint)flags);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Timeout(int fd, long timeout))
- JVMWrapper2("JVM_Timeout (0x%x)", fd);
- //%note jvm_r6
- return os::timeout(fd, timeout);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Listen(jint fd, jint count))
- JVMWrapper2("JVM_Listen (0x%x)", fd);
- //%note jvm_r6
- return os::listen(fd, count);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Connect(jint fd, struct sockaddr *him, jint len))
- JVMWrapper2("JVM_Connect (0x%x)", fd);
- //%note jvm_r6
- return os::connect(fd, him, (socklen_t)len);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Bind(jint fd, struct sockaddr *him, jint len))
- JVMWrapper2("JVM_Bind (0x%x)", fd);
- //%note jvm_r6
- return os::bind(fd, him, (socklen_t)len);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_Accept(jint fd, struct sockaddr *him, jint *len))
- JVMWrapper2("JVM_Accept (0x%x)", fd);
- //%note jvm_r6
- socklen_t socklen = (socklen_t)(*len);
- jint result = os::accept(fd, him, &socklen);
- *len = (jint)socklen;
- return result;
- JVM_END
-
-
- JVM_LEAF(jint, JVM_RecvFrom(jint fd, char *buf, int nBytes, int flags, struct sockaddr *from, int *fromlen))
- JVMWrapper2("JVM_RecvFrom (0x%x)", fd);
- //%note jvm_r6
- socklen_t socklen = (socklen_t)(*fromlen);
- jint result = os::recvfrom(fd, buf, (size_t)nBytes, (uint)flags, from, &socklen);
- *fromlen = (int)socklen;
- return result;
- JVM_END
-
-
- JVM_LEAF(jint, JVM_GetSockName(jint fd, struct sockaddr *him, int *len))
- JVMWrapper2("JVM_GetSockName (0x%x)", fd);
- //%note jvm_r6
- socklen_t socklen = (socklen_t)(*len);
- jint result = os::get_sock_name(fd, him, &socklen);
- *len = (int)socklen;
- return result;
- JVM_END
-
-
- JVM_LEAF(jint, JVM_SendTo(jint fd, char *buf, int len, int flags, struct sockaddr *to, int tolen))
- JVMWrapper2("JVM_SendTo (0x%x)", fd);
- //%note jvm_r6
- return os::sendto(fd, buf, (size_t)len, (uint)flags, to, (socklen_t)tolen);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_SocketAvailable(jint fd, jint *pbytes))
- JVMWrapper2("JVM_SocketAvailable (0x%x)", fd);
- //%note jvm_r6
- return os::socket_available(fd, pbytes);
- JVM_END
-
-
- JVM_LEAF(jint, JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen))
- JVMWrapper2("JVM_GetSockOpt (0x%x)", fd);
- //%note jvm_r6
- socklen_t socklen = (socklen_t)(*optlen);
- jint result = os::get_sock_opt(fd, level, optname, optval, &socklen);
- *optlen = (int)socklen;
- return result;
- JVM_END
-
-
- JVM_LEAF(jint, JVM_SetSockOpt(jint fd, int level, int optname, const char *optval, int optlen))
- JVMWrapper2("JVM_GetSockOpt (0x%x)", fd);
- //%note jvm_r6
- return os::set_sock_opt(fd, level, optname, optval, (socklen_t)optlen);
- JVM_END
-
-
- JVM_LEAF(int, JVM_GetHostName(char* name, int namelen))
- JVMWrapper("JVM_GetHostName");
- return os::get_host_name(name, namelen);
- JVM_END
-
-
// Library support ///////////////////////////////////////////////////////////////////////////
JVM_ENTRY_NO_ENV(void*, JVM_LoadLibrary(const char* name))
//%note jvm_ct
JVMWrapper2("JVM_LoadLibrary (%s)", name);
--- 3318,3327 ----
*** 3852,3869 ****
JVMWrapper2("JVM_FindLibraryEntry (%s)", name);
return os::dll_lookup(handle, name);
JVM_END
- // Floating point support ////////////////////////////////////////////////////////////////////
-
- JVM_LEAF(jboolean, JVM_IsNaN(jdouble a))
- JVMWrapper("JVM_IsNaN");
- return g_isnan(a);
- JVM_END
-
-
// JNI version ///////////////////////////////////////////////////////////////////////////////
JVM_LEAF(jboolean, JVM_IsSupportedJNIVersion(jint version))
JVMWrapper2("JVM_IsSupportedJNIVersion (%d)", version);
return Threads::is_supported_jni_version_including_1_1(version);
--- 3359,3368 ----
*** 3980,4003 ****
JVM_LEAF(jboolean, JVM_SupportsCX8())
JVMWrapper("JVM_SupportsCX8");
return VM_Version::supports_cx8();
JVM_END
-
- JVM_ENTRY(jboolean, JVM_CX8Field(JNIEnv *env, jobject obj, jfieldID fid, jlong oldVal, jlong newVal))
- JVMWrapper("JVM_CX8Field");
- jlong res;
- oop o = JNIHandles::resolve(obj);
- intptr_t fldOffs = jfieldIDWorkaround::from_instance_jfieldID(o->klass(), fid);
- volatile jlong* addr = (volatile jlong*)((address)o + fldOffs);
-
- assert(VM_Version::supports_cx8(), "cx8 not supported");
- res = Atomic::cmpxchg(newVal, addr, oldVal);
-
- return res == oldVal;
- JVM_END
-
// DTrace ///////////////////////////////////////////////////////////////////
JVM_ENTRY(jint, JVM_DTraceGetVersion(JNIEnv* env))
JVMWrapper("JVM_DTraceGetVersion");
return (jint)JVM_TRACING_DTRACE_VERSION;
--- 3479,3488 ----
*** 4148,4340 ****
}
return (jobjectArray) JNIHandles::make_local(dest());
}
JVM_END
- JVM_ENTRY(jintArray, JVM_GetThreadStateValues(JNIEnv* env,
- jint javaThreadState))
- {
- // If new thread states are added in future JDK and VM versions,
- // this should check if the JDK version is compatible with thread
- // states supported by the VM. Return NULL if not compatible.
- //
- // This function must map the VM java_lang_Thread::ThreadStatus
- // to the Java thread state that the JDK supports.
- //
-
- typeArrayHandle values_h;
- switch (javaThreadState) {
- case JAVA_THREAD_STATE_NEW : {
- typeArrayOop r = oopFactory::new_typeArray(T_INT, 1, CHECK_NULL);
- values_h = typeArrayHandle(THREAD, r);
- values_h->int_at_put(0, java_lang_Thread::NEW);
- break;
- }
- case JAVA_THREAD_STATE_RUNNABLE : {
- typeArrayOop r = oopFactory::new_typeArray(T_INT, 1, CHECK_NULL);
- values_h = typeArrayHandle(THREAD, r);
- values_h->int_at_put(0, java_lang_Thread::RUNNABLE);
- break;
- }
- case JAVA_THREAD_STATE_BLOCKED : {
- typeArrayOop r = oopFactory::new_typeArray(T_INT, 1, CHECK_NULL);
- values_h = typeArrayHandle(THREAD, r);
- values_h->int_at_put(0, java_lang_Thread::BLOCKED_ON_MONITOR_ENTER);
- break;
- }
- case JAVA_THREAD_STATE_WAITING : {
- typeArrayOop r = oopFactory::new_typeArray(T_INT, 2, CHECK_NULL);
- values_h = typeArrayHandle(THREAD, r);
- values_h->int_at_put(0, java_lang_Thread::IN_OBJECT_WAIT);
- values_h->int_at_put(1, java_lang_Thread::PARKED);
- break;
- }
- case JAVA_THREAD_STATE_TIMED_WAITING : {
- typeArrayOop r = oopFactory::new_typeArray(T_INT, 3, CHECK_NULL);
- values_h = typeArrayHandle(THREAD, r);
- values_h->int_at_put(0, java_lang_Thread::SLEEPING);
- values_h->int_at_put(1, java_lang_Thread::IN_OBJECT_WAIT_TIMED);
- values_h->int_at_put(2, java_lang_Thread::PARKED_TIMED);
- break;
- }
- case JAVA_THREAD_STATE_TERMINATED : {
- typeArrayOop r = oopFactory::new_typeArray(T_INT, 1, CHECK_NULL);
- values_h = typeArrayHandle(THREAD, r);
- values_h->int_at_put(0, java_lang_Thread::TERMINATED);
- break;
- }
- default:
- // Unknown state - probably incompatible JDK version
- return NULL;
- }
-
- return (jintArray) JNIHandles::make_local(env, values_h());
- }
- JVM_END
-
-
- JVM_ENTRY(jobjectArray, JVM_GetThreadStateNames(JNIEnv* env,
- jint javaThreadState,
- jintArray values))
- {
- // If new thread states are added in future JDK and VM versions,
- // this should check if the JDK version is compatible with thread
- // states supported by the VM. Return NULL if not compatible.
- //
- // This function must map the VM java_lang_Thread::ThreadStatus
- // to the Java thread state that the JDK supports.
- //
-
- ResourceMark rm;
-
- // Check if threads is null
- if (values == NULL) {
- THROW_(vmSymbols::java_lang_NullPointerException(), 0);
- }
-
- typeArrayOop v = typeArrayOop(JNIHandles::resolve_non_null(values));
- typeArrayHandle values_h(THREAD, v);
-
- objArrayHandle names_h;
- switch (javaThreadState) {
- case JAVA_THREAD_STATE_NEW : {
- assert(values_h->length() == 1 &&
- values_h->int_at(0) == java_lang_Thread::NEW,
- "Invalid threadStatus value");
-
- objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
- 1, /* only 1 substate */
- CHECK_NULL);
- names_h = objArrayHandle(THREAD, r);
- Handle name = java_lang_String::create_from_str("NEW", CHECK_NULL);
- names_h->obj_at_put(0, name());
- break;
- }
- case JAVA_THREAD_STATE_RUNNABLE : {
- assert(values_h->length() == 1 &&
- values_h->int_at(0) == java_lang_Thread::RUNNABLE,
- "Invalid threadStatus value");
-
- objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
- 1, /* only 1 substate */
- CHECK_NULL);
- names_h = objArrayHandle(THREAD, r);
- Handle name = java_lang_String::create_from_str("RUNNABLE", CHECK_NULL);
- names_h->obj_at_put(0, name());
- break;
- }
- case JAVA_THREAD_STATE_BLOCKED : {
- assert(values_h->length() == 1 &&
- values_h->int_at(0) == java_lang_Thread::BLOCKED_ON_MONITOR_ENTER,
- "Invalid threadStatus value");
-
- objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
- 1, /* only 1 substate */
- CHECK_NULL);
- names_h = objArrayHandle(THREAD, r);
- Handle name = java_lang_String::create_from_str("BLOCKED", CHECK_NULL);
- names_h->obj_at_put(0, name());
- break;
- }
- case JAVA_THREAD_STATE_WAITING : {
- assert(values_h->length() == 2 &&
- values_h->int_at(0) == java_lang_Thread::IN_OBJECT_WAIT &&
- values_h->int_at(1) == java_lang_Thread::PARKED,
- "Invalid threadStatus value");
- objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
- 2, /* number of substates */
- CHECK_NULL);
- names_h = objArrayHandle(THREAD, r);
- Handle name0 = java_lang_String::create_from_str("WAITING.OBJECT_WAIT",
- CHECK_NULL);
- Handle name1 = java_lang_String::create_from_str("WAITING.PARKED",
- CHECK_NULL);
- names_h->obj_at_put(0, name0());
- names_h->obj_at_put(1, name1());
- break;
- }
- case JAVA_THREAD_STATE_TIMED_WAITING : {
- assert(values_h->length() == 3 &&
- values_h->int_at(0) == java_lang_Thread::SLEEPING &&
- values_h->int_at(1) == java_lang_Thread::IN_OBJECT_WAIT_TIMED &&
- values_h->int_at(2) == java_lang_Thread::PARKED_TIMED,
- "Invalid threadStatus value");
- objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
- 3, /* number of substates */
- CHECK_NULL);
- names_h = objArrayHandle(THREAD, r);
- Handle name0 = java_lang_String::create_from_str("TIMED_WAITING.SLEEPING",
- CHECK_NULL);
- Handle name1 = java_lang_String::create_from_str("TIMED_WAITING.OBJECT_WAIT",
- CHECK_NULL);
- Handle name2 = java_lang_String::create_from_str("TIMED_WAITING.PARKED",
- CHECK_NULL);
- names_h->obj_at_put(0, name0());
- names_h->obj_at_put(1, name1());
- names_h->obj_at_put(2, name2());
- break;
- }
- case JAVA_THREAD_STATE_TERMINATED : {
- assert(values_h->length() == 1 &&
- values_h->int_at(0) == java_lang_Thread::TERMINATED,
- "Invalid threadStatus value");
- objArrayOop r = oopFactory::new_objArray(SystemDictionary::String_klass(),
- 1, /* only 1 substate */
- CHECK_NULL);
- names_h = objArrayHandle(THREAD, r);
- Handle name = java_lang_String::create_from_str("TERMINATED", CHECK_NULL);
- names_h->obj_at_put(0, name());
- break;
- }
- default:
- // Unknown state - probably incompatible JDK version
- return NULL;
- }
- return (jobjectArray) JNIHandles::make_local(env, names_h());
- }
- JVM_END
-
JVM_ENTRY(void, JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size))
{
memset(info, 0, info_size);
info->jvm_version = Abstract_VM_Version::jvm_version();
--- 3633,3642 ----
< prev index next >