10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_PRIMS_WHITEBOX_HPP
26 #define SHARE_VM_PRIMS_WHITEBOX_HPP
27
28 #include "prims/jni.h"
29
30 #include "memory/allocation.hpp"
31 #include "oops/oopsHierarchy.hpp"
32 #include "oops/symbol.hpp"
33 #include "runtime/interfaceSupport.hpp"
34
35 // Entry macro to transition from JNI to VM state.
36
37 #define WB_ENTRY(result_type, header) JNI_ENTRY(result_type, header)
38 #define WB_END JNI_END
39 #define WB_METHOD_DECLARE(result_type) extern "C" result_type JNICALL
40
41 #define CHECK_JNI_EXCEPTION_(env, value) \
42 do { \
43 JavaThread* THREAD = JavaThread::thread_from_jni_environment(env); \
44 if (HAS_PENDING_EXCEPTION) { \
45 return(value); \
46 } \
47 } while (0)
48
49 #define CHECK_JNI_EXCEPTION(env) \
50 do { \
51 JavaThread* THREAD = JavaThread::thread_from_jni_environment(env); \
52 if (HAS_PENDING_EXCEPTION) { \
53 return; \
54 } \
55 } while (0)
56
57 class CodeBlob;
58 class CodeHeap;
59
60 class WhiteBox : public AllStatic {
61 private:
62 static bool _used;
63 public:
64 static volatile bool compilation_locked;
65 static bool used() { return _used; }
66 static void set_used() { _used = true; }
67 static int offset_for_field(const char* field_name, oop object,
68 Symbol* signature_symbol);
69 static const char* lookup_jstring(const char* field_name, oop object);
70 static bool lookup_bool(const char* field_name, oop object);
71 static void force_sweep();
72 static int get_blob_type(const CodeBlob* code);
73 static CodeHeap* get_code_heap(int blob_type);
74 static CodeBlob* allocate_code_blob(int blob_type, int size);
75 static int array_bytes_to_length(size_t bytes);
76 static void register_methods(JNIEnv* env, jclass wbclass, JavaThread* thread,
77 JNINativeMethod* method_array, int method_count);
78 static void register_extended(JNIEnv* env, jclass wbclass, JavaThread* thread);
79 };
80
81
82
83 #endif // SHARE_VM_PRIMS_WHITEBOX_HPP
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef SHARE_VM_PRIMS_WHITEBOX_HPP
26 #define SHARE_VM_PRIMS_WHITEBOX_HPP
27
28 #include "prims/jni.h"
29
30 #include "utilities/exceptions.hpp"
31 #include "memory/allocation.hpp"
32 #include "oops/oopsHierarchy.hpp"
33 #include "oops/symbol.hpp"
34 #include "runtime/interfaceSupport.hpp"
35
36 // Entry macro to transition from JNI to VM state.
37
38 #define WB_ENTRY(result_type, header) JNI_ENTRY(result_type, header)
39 #define WB_END JNI_END
40 #define WB_METHOD_DECLARE(result_type) extern "C" result_type JNICALL
41
42 #define CHECK_JNI_EXCEPTION_(env, value) \
43 do { \
44 JavaThread* THREAD = JavaThread::thread_from_jni_environment(env); \
45 if (HAS_PENDING_EXCEPTION) { \
46 return(value); \
47 } \
48 } while (0)
49
50 #define CHECK_JNI_EXCEPTION(env) \
51 do { \
52 JavaThread* THREAD = JavaThread::thread_from_jni_environment(env); \
53 if (HAS_PENDING_EXCEPTION) { \
54 return; \
55 } \
56 } while (0)
57
58 class CodeBlob;
59 class CodeHeap;
60 class JavaThread;
61
62 class WhiteBox : public AllStatic {
63 private:
64 static bool _used;
65 public:
66 static volatile bool compilation_locked;
67 static bool used() { return _used; }
68 static void set_used() { _used = true; }
69 static int offset_for_field(const char* field_name, oop object,
70 Symbol* signature_symbol);
71 static const char* lookup_jstring(const char* field_name, oop object);
72 static bool lookup_bool(const char* field_name, oop object);
73 static void sweeper_thread_entry(JavaThread* thread, TRAPS);
74 static JavaThread* create_sweeper_thread(TRAPS);
75 static int get_blob_type(const CodeBlob* code);
76 static CodeHeap* get_code_heap(int blob_type);
77 static CodeBlob* allocate_code_blob(int blob_type, int size);
78 static int array_bytes_to_length(size_t bytes);
79 static void register_methods(JNIEnv* env, jclass wbclass, JavaThread* thread,
80 JNINativeMethod* method_array, int method_count);
81 static void register_extended(JNIEnv* env, jclass wbclass, JavaThread* thread);
82 };
83
84
85
86 #endif // SHARE_VM_PRIMS_WHITEBOX_HPP
|