1 /* src/native/vm/sun_misc_Unsafe.c - sun/misc/Unsafe
3 Copyright (C) 2006, 2007 R. Grafl, A. Krall, C. Kruegel, C. Oates,
4 R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
5 C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
6 Institut f. Computersprachen - TU Wien
8 This file is part of CACAO.
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2, or (at
13 your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 $Id: java_lang_VMObject.c 5153 2006-07-18 08:19:24Z twisti $
35 #include "mm/memory.h"
37 #include "native/jni.h"
38 #include "native/llni.h"
39 #include "native/native.h"
41 #include "native/include/java_lang_Object.h" /* before c.l.C */
42 #include "native/include/java_lang_String.h" /* required by j.l.CL */
44 #if defined(WITH_CLASSPATH_SUN)
45 # include "native/include/java_nio_ByteBuffer.h" /* required by j.l.CL */
48 #include "native/include/java_lang_ClassLoader.h" /* required by j.l.C */
49 #include "native/include/java_lang_Class.h"
50 #include "native/include/java_lang_reflect_Field.h"
51 #include "native/include/java_lang_Thread.h" /* required by s.m.U */
52 #include "native/include/java_lang_Throwable.h"
54 #include "native/include/java_security_ProtectionDomain.h" /* required by smU */
56 #include "native/include/sun_misc_Unsafe.h"
58 #include "vm/builtin.h"
59 #include "vm/exceptions.h"
60 #include "vm/initialize.h"
61 #include "vm/stringlocal.h"
63 #include "vmcore/utf8.h"
66 /* native methods implemented by this file ************************************/
68 static JNINativeMethod methods[] = {
69 { "registerNatives", "()V", (void *) (intptr_t) &Java_sun_misc_Unsafe_registerNatives },
70 { "getInt", "(Ljava/lang/Object;J)I", (void *) (intptr_t) &Java_sun_misc_Unsafe_getInt__Ljava_lang_Object_2J },
71 { "putInt", "(Ljava/lang/Object;JI)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_putInt__Ljava_lang_Object_2JI },
72 { "getObject", "(Ljava/lang/Object;J)Ljava/lang/Object;", (void *) (intptr_t) &Java_sun_misc_Unsafe_getObject },
73 { "putObject", "(Ljava/lang/Object;JLjava/lang/Object;)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_putObject },
74 { "getBoolean", "(Ljava/lang/Object;J)Z", (void *) (intptr_t) &Java_sun_misc_Unsafe_getBoolean },
75 { "putBoolean", "(Ljava/lang/Object;JZ)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_putBoolean },
76 { "getByte", "(Ljava/lang/Object;J)B", (void *) (intptr_t) &Java_sun_misc_Unsafe_getByte__Ljava_lang_Object_2J },
77 { "putByte", "(Ljava/lang/Object;JB)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_putByte__Ljava_lang_Object_2JB },
78 { "putShort", "(Ljava/lang/Object;JS)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_putShort__Ljava_lang_Object_2JS },
79 { "getChar", "(Ljava/lang/Object;J)C", (void *) (intptr_t) &Java_sun_misc_Unsafe_getChar__Ljava_lang_Object_2J },
80 { "putChar", "(Ljava/lang/Object;JC)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_putChar__Ljava_lang_Object_2JC },
81 { "putFloat", "(Ljava/lang/Object;JF)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_putFloat__Ljava_lang_Object_2JF },
82 { "getByte", "(J)B", (void *) (intptr_t) &Java_sun_misc_Unsafe_getByte__J },
83 { "getInt", "(J)I", (void *) (intptr_t) &Java_sun_misc_Unsafe_getInt__J },
84 { "putInt", "(JI)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_putInt__JI },
85 { "getLong", "(J)J", (void *) (intptr_t) &Java_sun_misc_Unsafe_getLong__J },
86 { "putLong", "(JJ)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_putLong__JJ },
87 { "objectFieldOffset", "(Ljava/lang/reflect/Field;)J", (void *) (intptr_t) &Java_sun_misc_Unsafe_objectFieldOffset },
88 { "allocateMemory", "(J)J", (void *) (intptr_t) &Java_sun_misc_Unsafe_allocateMemory },
89 { "freeMemory", "(J)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_freeMemory },
90 { "staticFieldOffset", "(Ljava/lang/reflect/Field;)J", (void *) (intptr_t) &Java_sun_misc_Unsafe_staticFieldOffset },
91 { "staticFieldBase", "(Ljava/lang/reflect/Field;)Ljava/lang/Object;", (void *) (intptr_t) &Java_sun_misc_Unsafe_staticFieldBase },
92 { "ensureClassInitialized", "(Ljava/lang/Class;)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_ensureClassInitialized },
93 { "arrayBaseOffset", "(Ljava/lang/Class;)I", (void *) (intptr_t) &Java_sun_misc_Unsafe_arrayBaseOffset },
94 { "arrayIndexScale", "(Ljava/lang/Class;)I", (void *) (intptr_t) &Java_sun_misc_Unsafe_arrayIndexScale },
95 { "addressSize", "()I", (void *) (intptr_t) &Java_sun_misc_Unsafe_addressSize },
96 { "pageSize", "()I", (void *) (intptr_t) &Java_sun_misc_Unsafe_pageSize },
97 { "defineClass", "(Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class;", (void *) (intptr_t) &Java_sun_misc_Unsafe_defineClass__Ljava_lang_String_2_3BIILjava_lang_ClassLoader_2Ljava_security_ProtectionDomain_2 },
98 { "allocateInstance", "(Ljava/lang/Class;)Ljava/lang/Object;", (void *) (intptr_t) &Java_sun_misc_Unsafe_allocateInstance },
99 { "throwException", "(Ljava/lang/Throwable;)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_throwException },
100 { "compareAndSwapObject", "(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z", (void *) (intptr_t) &Java_sun_misc_Unsafe_compareAndSwapObject },
101 { "compareAndSwapInt", "(Ljava/lang/Object;JII)Z", (void *) (intptr_t) &Java_sun_misc_Unsafe_compareAndSwapInt },
102 { "compareAndSwapLong", "(Ljava/lang/Object;JJJ)Z", (void *) (intptr_t) &Java_sun_misc_Unsafe_compareAndSwapLong },
103 { "getObjectVolatile", "(Ljava/lang/Object;J)Ljava/lang/Object;", (void *) (intptr_t) &Java_sun_misc_Unsafe_getObjectVolatile },
104 { "getIntVolatile", "(Ljava/lang/Object;J)I", (void *) (intptr_t) &Java_sun_misc_Unsafe_getIntVolatile },
105 { "getLongVolatile", "(Ljava/lang/Object;J)J", (void *) (intptr_t) &Java_sun_misc_Unsafe_getLongVolatile },
106 { "unpark", "(Ljava/lang/Object;)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_unpark },
107 { "park", "(ZJ)V", (void *) (intptr_t) &Java_sun_misc_Unsafe_park },
111 /* _Jv_sun_misc_Unsafe_init ****************************************************
113 Register native functions.
115 *******************************************************************************/
117 void _Jv_sun_misc_Unsafe_init(void)
121 u = utf_new_char("sun/misc/Unsafe");
123 native_method_register(u, methods, NATIVE_METHODS_COUNT);
128 * Class: sun/misc/Unsafe
129 * Method: registerNatives
132 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_registerNatives(JNIEnv *env, jclass clazz)
134 /* The native methods of this function are already registered in
135 _Jv_sun_misc_Unsafe_init() which is called during VM
141 * Class: sun/misc/Unsafe
143 * Signature: (Ljava/lang/Object;J)I
145 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_getInt__Ljava_lang_Object_2J(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset)
150 p = (int32_t *) (((uint8_t *) o) + offset);
159 * Class: sun/misc/Unsafe
161 * Signature: (Ljava/lang/Object;JI)V
163 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putInt__Ljava_lang_Object_2JI(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, int32_t x)
167 p = (int32_t *) (((uint8_t *) o) + offset);
174 * Class: sun/misc/Unsafe
176 * Signature: (Ljava/lang/Object;J)Ljava/lang/Object;
178 JNIEXPORT java_lang_Object* JNICALL Java_sun_misc_Unsafe_getObject(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset)
183 p = (void **) (((uint8_t *) o) + offset);
192 * Class: sun/misc/Unsafe
194 * Signature: (Ljava/lang/Object;JLjava/lang/Object;)V
196 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putObject(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, java_lang_Object *x)
200 p = (void **) (((uint8_t *) o) + offset);
207 * Class: sun/misc/Unsafe
209 * Signature: (Ljava/lang/Object;J)Z
211 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_getBoolean(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset)
216 p = (int32_t *) (((uint8_t *) o) + offset);
225 * Class: sun/misc/Unsafe
227 * Signature: (Ljava/lang/Object;JZ)V
229 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putBoolean(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, int32_t x)
233 p = (int32_t *) (((uint8_t *) o) + offset);
240 * Class: sun/misc/Unsafe
242 * Signature: (Ljava/lang/Object;J)B
244 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_getByte__Ljava_lang_Object_2J(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset)
249 p = (int32_t *) (((uint8_t *) o) + offset);
258 * Class: sun/misc/Unsafe
260 * Signature: (Ljava/lang/Object;JB)V
262 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putByte__Ljava_lang_Object_2JB(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, int32_t x)
266 p = (int32_t *) (((uint8_t *) o) + offset);
273 * Class: sun/misc/Unsafe
275 * Signature: (Ljava/lang/Object;JS)V
277 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putShort__Ljava_lang_Object_2JS(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, int32_t x)
281 p = (int32_t *) (((uint8_t *) o) + offset);
288 * Class: sun/misc/Unsafe
290 * Signature: (Ljava/lang/Object;J)C
292 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_getChar__Ljava_lang_Object_2J(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset)
297 p = (int32_t *) (((uint8_t *) o) + offset);
306 * Class: sun/misc/Unsafe
308 * Signature: (Ljava/lang/Object;JC)V
310 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putChar__Ljava_lang_Object_2JC(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, int32_t x)
314 p = (int32_t *) (((uint8_t *) o) + offset);
321 * Class: sun/misc/Unsafe
323 * Signature: (Ljava/lang/Object;JF)V
325 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putFloat__Ljava_lang_Object_2JF(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, float x)
329 p = (float *) (((uint8_t *) o) + offset);
336 * Class: sun/misc/Unsafe
340 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_getByte__J(JNIEnv *env, sun_misc_Unsafe *this, int64_t address)
345 p = (int8_t *) (intptr_t) address;
349 return (int32_t) value;
354 * Class: sun/misc/Unsafe
358 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_getInt__J(JNIEnv *env, sun_misc_Unsafe *this, int64_t address)
363 p = (int32_t *) (intptr_t) address;
372 * Class: sun/misc/Unsafe
376 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putInt__JI(JNIEnv *env, struct sun_misc_Unsafe* this, int64_t address, int32_t value)
380 p = (int32_t *) (intptr_t) address;
387 * Class: sun/misc/Unsafe
391 JNIEXPORT int64_t JNICALL Java_sun_misc_Unsafe_getLong__J(JNIEnv *env, sun_misc_Unsafe *this, int64_t address)
396 p = (int64_t *) (intptr_t) address;
405 * Class: sun/misc/Unsafe
409 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_putLong__JJ(JNIEnv *env, sun_misc_Unsafe *this, int64_t address, int64_t value)
413 p = (int64_t *) (intptr_t) address;
420 * Class: sun/misc/Unsafe
421 * Method: objectFieldOffset
422 * Signature: (Ljava/lang/reflect/Field;)J
424 JNIEXPORT int64_t JNICALL Java_sun_misc_Unsafe_objectFieldOffset(JNIEnv *env, sun_misc_Unsafe* this, java_lang_reflect_Field* field)
430 LLNI_field_get_cls(field, clazz, c);
431 LLNI_field_get_val(field, slot , slot);
432 f = &c->fields[slot];
434 return (int64_t) f->offset;
439 * Class: sun/misc/Unsafe
440 * Method: allocateMemory
443 JNIEXPORT int64_t JNICALL Java_sun_misc_Unsafe_allocateMemory(JNIEnv *env, sun_misc_Unsafe *this, int64_t bytes)
448 length = (size_t) bytes;
450 if ((length != (uint64_t) bytes) || (bytes < 0)) {
451 exceptions_throw_illegalargumentexception();
455 p = MNEW(uint8_t, length);
457 return (int64_t) (intptr_t) p;
462 * Class: sun/misc/Unsafe
466 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_freeMemory(JNIEnv *env, sun_misc_Unsafe *this, int64_t address)
470 p = (void *) (intptr_t) address;
475 /* we pass length 1 to trick the free function */
477 MFREE(p, uint8_t, 1);
482 * Class: sun/misc/Unsafe
483 * Method: staticFieldOffset
484 * Signature: (Ljava/lang/reflect/Field;)J
486 JNIEXPORT int64_t JNICALL Java_sun_misc_Unsafe_staticFieldOffset(JNIEnv *env, sun_misc_Unsafe *this, java_lang_reflect_Field *field)
492 LLNI_field_get_cls(field, clazz, c);
493 LLNI_field_get_val(field, slot , slot);
494 f = &(c->fields[slot]);
496 return (int64_t) (intptr_t) f->value;
501 * Class: sun/misc/Unsafe
502 * Method: staticFieldBase
503 * Signature: (Ljava/lang/reflect/Field;)Ljava/lang/Object;
505 JNIEXPORT java_lang_Object* JNICALL Java_sun_misc_Unsafe_staticFieldBase(JNIEnv *env, sun_misc_Unsafe *this, java_lang_reflect_Field *f)
507 /* In CACAO we return the absolute address in staticFieldOffset. */
514 * Class: sun/misc/Unsafe
515 * Method: ensureClassInitialized
516 * Signature: (Ljava/lang/Class;)V
518 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_ensureClassInitialized(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Class *class)
522 c = LLNI_classinfo_unwrap(class);
524 if (!(c->state & CLASS_INITIALIZED))
530 * Class: sun/misc/Unsafe
531 * Method: arrayBaseOffset
532 * Signature: (Ljava/lang/Class;)I
534 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_arrayBaseOffset(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Class *arrayClass)
539 c = LLNI_classinfo_unwrap(arrayClass);
540 ad = c->vftbl->arraydesc;
543 /* XXX does that exception exist? */
544 exceptions_throw_internalerror("java/lang/InvalidClassException");
548 return ad->dataoffset;
553 * Class: sun/misc/Unsafe
554 * Method: arrayIndexScale
555 * Signature: (Ljava/lang/Class;)I
557 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_arrayIndexScale(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Class *arrayClass)
562 c = LLNI_classinfo_unwrap(arrayClass);
563 ad = c->vftbl->arraydesc;
566 /* XXX does that exception exist? */
567 exceptions_throw_internalerror("java/lang/InvalidClassException");
571 return ad->componentsize;
576 * Class: sun/misc/Unsafe
577 * Method: addressSize
580 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_addressSize(JNIEnv *env, sun_misc_Unsafe *this)
582 return SIZEOF_VOID_P;
587 * Class: sun/misc/Unsafe
591 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_pageSize(JNIEnv *env, sun_misc_Unsafe *this)
602 * Class: sun/misc/Unsafe
603 * Method: defineClass
604 * Signature: (Ljava/lang/String;[BIILjava/lang/ClassLoader;Ljava/security/ProtectionDomain;)Ljava/lang/Class;
606 JNIEXPORT java_lang_Class* JNICALL Java_sun_misc_Unsafe_defineClass__Ljava_lang_String_2_3BIILjava_lang_ClassLoader_2Ljava_security_ProtectionDomain_2(JNIEnv *env, sun_misc_Unsafe *this, java_lang_String *name, java_handle_bytearray_t *b, int32_t off, int32_t len, java_lang_ClassLoader *loader, java_security_ProtectionDomain *protectionDomain)
613 cl = (classloader *) loader;
615 /* check if data was passed */
618 exceptions_throw_nullpointerexception();
622 /* check the indexes passed */
624 if ((off < 0) || (len < 0) || ((off + len) > LLNI_array_size(b))) {
625 exceptions_throw_arrayindexoutofboundsexception();
630 /* convert '.' to '/' in java string */
632 utfname = javastring_toutf((java_handle_t *) name, true);
638 /* define the class */
640 c = class_define(utfname, cl, len, (const uint8_t *) &b->data[off],
646 /* for convenience */
648 o = LLNI_classinfo_wrap(c);
650 #if defined(WITH_CLASSPATH_GNU)
651 /* set ProtectionDomain */
653 LLNI_field_set_ref(o, pd, protectionDomain);
661 * Class: sun/misc/Unsafe
662 * Method: allocateInstance
663 * Signature: (Ljava/lang/Class;)Ljava/lang/Object;
665 JNIEXPORT java_lang_Object* JNICALL Java_sun_misc_Unsafe_allocateInstance(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Class *cls)
670 c = LLNI_classinfo_unwrap(cls);
674 return (java_lang_Object *) o;
679 * Class: sun/misc/Unsafe
680 * Method: throwException
681 * Signature: (Ljava/lang/Throwable;)V
683 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_throwException(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Throwable *ee)
687 o = (java_handle_t *) ee;
689 exceptions_set_exception(o);
694 * Class: sun/misc/Unsafe
695 * Method: compareAndSwapObject
696 * Signature: (Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
698 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_compareAndSwapObject(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, java_lang_Object *expected, java_lang_Object *x)
703 p = (void **) (((uint8_t *) o) + offset);
705 /* XXX this should be atomic */
709 if (value == expected) {
720 * Class: sun/misc/Unsafe
721 * Method: compareAndSwapInt
722 * Signature: (Ljava/lang/Object;JII)Z
724 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_compareAndSwapInt(JNIEnv *env, sun_misc_Unsafe* this, java_lang_Object* obj, int64_t offset, int32_t expect, int32_t update)
729 p = (int32_t *) (((uint8_t *) obj) + offset);
731 /* XXX this should be atomic */
735 if (value == expect) {
746 * Class: sun/misc/Unsafe
747 * Method: compareAndSwapLong
748 * Signature: (Ljava/lang/Object;JJJ)Z
750 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_compareAndSwapLong(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset, int64_t expected, int64_t x)
755 p = (int64_t *) (((uint8_t *) o) + offset);
757 /* XXX this should be atomic */
761 if (value == expected) {
772 * Class: sun/misc/Unsafe
773 * Method: getObjectVolatile
774 * Signature: (Ljava/lang/Object;J)Ljava/lang/Object;
776 JNIEXPORT java_lang_Object* JNICALL Java_sun_misc_Unsafe_getObjectVolatile(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset)
779 volatile void *value;
781 p = (volatile void **) (((uint8_t *) o) + offset);
785 return (java_lang_Object *) value;
790 * Class: sun/misc/Unsafe
791 * Method: getIntVolatile
792 * Signature: (Ljava/lang/Object;J)I
794 JNIEXPORT int32_t JNICALL Java_sun_misc_Unsafe_getIntVolatile(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset)
797 volatile int32_t value;
799 p = (volatile int32_t *) (((uint8_t *) o) + offset);
808 * Class: sun/misc/Unsafe
809 * Method: getLongVolatile
810 * Signature: (Ljava/lang/Object;J)J
812 JNIEXPORT int64_t JNICALL Java_sun_misc_Unsafe_getLongVolatile(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *o, int64_t offset)
815 volatile int64_t value;
817 p = (volatile int64_t *) (((uint8_t *) o) + offset);
826 * Class: sun/misc/Unsafe
828 * Signature: (Ljava/lang/Object;)V
830 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_unpark(JNIEnv *env, sun_misc_Unsafe *this, java_lang_Object *thread)
832 /* XXX IMPLEMENT ME */
837 * Class: sun/misc/Unsafe
841 JNIEXPORT void JNICALL Java_sun_misc_Unsafe_park(JNIEnv *env, sun_misc_Unsafe *this, int32_t isAbsolute, int64_t time)
843 /* XXX IMPLEMENT ME */
848 * These are local overrides for various environment variables in Emacs.
849 * Please do not remove this and leave it at the end of the file, where
850 * Emacs will automagically detect them.
851 * ---------------------------------------------------------------------
854 * indent-tabs-mode: t