annotate src/share/vm/graal/graalRuntime.cpp @ 18748:3d6e630a72f1

Fix GNFI class loader problem
author Matthias Grimmer <grimmer@ssw.jku.at>
date Wed, 17 Dec 2014 11:24:42 +0100
parents 88c280297bd2
children afa70d3e8159
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
1 /*
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
4 *
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
7 * published by the Free Software Foundation.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
8 *
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
13 * accompanied this code).
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
14 *
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
15 * You should have received a copy of the GNU General Public License version
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
18 *
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
21 * questions.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
22 */
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
23
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
24 #include "precompiled.hpp"
7735
a7a93887b4c4 fix Solaris build and initial SPARC support
twisti
parents: 7386
diff changeset
25 #include "asm/codeBuffer.hpp"
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
26 #include "compiler/compileBroker.hpp"
17033
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
27 #include "compiler/disassembler.hpp"
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
28 #include "graal/graalRuntime.hpp"
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
29 #include "graal/graalCompilerToVM.hpp"
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
30 #include "graal/graalCompiler.hpp"
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
31 #include "graal/graalJavaAccess.hpp"
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
32 #include "graal/graalEnv.hpp"
7735
a7a93887b4c4 fix Solaris build and initial SPARC support
twisti
parents: 7386
diff changeset
33 #include "memory/oopFactory.hpp"
a7a93887b4c4 fix Solaris build and initial SPARC support
twisti
parents: 7386
diff changeset
34 #include "prims/jvm.h"
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
35 #include "runtime/biasedLocking.hpp"
7735
a7a93887b4c4 fix Solaris build and initial SPARC support
twisti
parents: 7386
diff changeset
36 #include "runtime/interfaceSupport.hpp"
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
37 #include "runtime/arguments.hpp"
10542
554f67e4ff3f Use slow-path stub call instead of deopt in lowering of DynamicNewArrayNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 10475
diff changeset
38 #include "runtime/reflection.hpp"
8499
96a337d307bd -More progress in G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 8496
diff changeset
39 #include "utilities/debug.hpp"
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
40
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
41 address GraalRuntime::_external_deopt_i2c_entry = NULL;
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
42 jobject GraalRuntime::_HotSpotGraalRuntime_instance = NULL;
16683
4d0d1dc5db00 introduce extra field to record when HotSpotGraalRuntime has been initialized to avoid spurious errors during VM shutdown for short lived applications
Doug Simon <doug.simon@oracle.com>
parents: 16679
diff changeset
43 bool GraalRuntime::_HotSpotGraalRuntime_initialized = false;
18303
ab47ef2f2207 disable blocking compilation requests once GraalRuntime::shutdown has been called
Doug Simon <doug.simon@oracle.com>
parents: 18227
diff changeset
44 bool GraalRuntime::_shutdown_called = false;
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
45
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
46 void GraalRuntime::initialize_natives(JNIEnv *env, jclass c2vmClass) {
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
47 uintptr_t heap_end = (uintptr_t) Universe::heap()->reserved_region().end();
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
48 uintptr_t allocation_end = heap_end + ((uintptr_t)16) * 1024 * 1024 * 1024;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
49 AMD64_ONLY(guarantee(heap_end < allocation_end, "heap end too close to end of address space (might lead to erroneous TLAB allocations)"));
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
50 NOT_LP64(error("check TLAB allocation code for address space conflicts"));
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
51
18614
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
52 ensure_graal_class_loader_is_initialized();
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
53
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
54 JavaThread* THREAD = JavaThread::current();
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
55 {
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
56 ThreadToNativeFromVM trans(THREAD);
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
57
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
58 ResourceMark rm;
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
59 HandleMark hm;
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
60
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
61 graal_compute_offsets();
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
62
17033
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
63 #ifdef TARGET_ARCH_x86
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
64 #ifdef _LP64
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
65 // Only supported on x86_64 for now
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
66 _external_deopt_i2c_entry = create_external_deopt_i2c();
17033
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
67 #endif
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
68 #endif
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
69
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
70 // Ensure _non_oop_bits is initialized
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
71 Universe::non_oop_word();
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
72
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
73 env->RegisterNatives(c2vmClass, CompilerToVM_methods, CompilerToVM_methods_count());
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
74 }
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
75 if (HAS_PENDING_EXCEPTION) {
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
76 abort_on_pending_exception(PENDING_EXCEPTION, "Could not register natives");
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
77 }
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
78 }
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
79
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
80 BufferBlob* GraalRuntime::initialize_buffer_blob() {
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
81 JavaThread* THREAD = JavaThread::current();
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
82 BufferBlob* buffer_blob = THREAD->get_buffer_blob();
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
83 if (buffer_blob == NULL) {
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
84 buffer_blob = BufferBlob::create("Graal thread-local CodeBuffer", GraalNMethodSizeLimit);
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
85 if (buffer_blob != NULL) {
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
86 THREAD->set_buffer_blob(buffer_blob);
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
87 }
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
88 }
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
89 return buffer_blob;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
90 }
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
91
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
92 address GraalRuntime::create_external_deopt_i2c() {
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
93 ResourceMark rm;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
94 BufferBlob* buffer = BufferBlob::create("externalDeopt", 1*K);
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
95 CodeBuffer cb(buffer);
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
96 short buffer_locs[20];
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
97 cb.insts()->initialize_shared_locs((relocInfo*)buffer_locs, sizeof(buffer_locs)/sizeof(relocInfo));
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
98 MacroAssembler masm(&cb);
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
99
17033
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
100 int total_args_passed = 6;
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
101
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
102 BasicType* sig_bt = NEW_RESOURCE_ARRAY(BasicType, total_args_passed);
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
103 VMRegPair* regs = NEW_RESOURCE_ARRAY(VMRegPair, total_args_passed);
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
104 int i = 0;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
105 sig_bt[i++] = T_INT;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
106 sig_bt[i++] = T_LONG;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
107 sig_bt[i++] = T_VOID; // long stakes 2 slots
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
108 sig_bt[i++] = T_INT;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
109 sig_bt[i++] = T_OBJECT;
17150
80d021f12b22 fix typo in graalRuntime.cpp
Andreas Woess <andreas.woess@jku.at>
parents: 17033
diff changeset
110 sig_bt[i++] = T_INT; // The number of actual arguments passed to the method.
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
111
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
112 int comp_args_on_stack = SharedRuntime::java_calling_convention(sig_bt, regs, total_args_passed, false);
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
113
17033
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
114 SharedRuntime::gen_i2c_adapter(&masm, total_args_passed, comp_args_on_stack, sig_bt, regs, total_args_passed - 1);
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
115 masm.flush();
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
116
17033
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
117 AdapterBlob* adapter = AdapterBlob::create(&cb);
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
118 if (PrintAdapterHandlers) {
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
119 tty->print_cr("Decoding external_deopt_i2c");
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
120 Disassembler::decode(adapter->code_begin(), adapter->code_end());
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
121 }
2d6dd2eebd51 Fixed HSAIL deopt
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16887
diff changeset
122 return adapter->code_begin();
15582
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
123 }
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
124
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
125 BasicType GraalRuntime::kindToBasicType(jchar ch) {
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
126 switch(ch) {
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
127 case 'z': return T_BOOLEAN;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
128 case 'b': return T_BYTE;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
129 case 's': return T_SHORT;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
130 case 'c': return T_CHAR;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
131 case 'i': return T_INT;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
132 case 'f': return T_FLOAT;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
133 case 'j': return T_LONG;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
134 case 'd': return T_DOUBLE;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
135 case 'a': return T_OBJECT;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
136 case '-': return T_ILLEGAL;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
137 default:
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
138 fatal(err_msg("unexpected Kind: %c", ch));
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
139 break;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
140 }
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
141 return T_ILLEGAL;
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
142 }
063ec2920d21 made Graal runtime initialization in hosted mode lazy
Doug Simon <doug.simon@oracle.com>
parents: 14731
diff changeset
143
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
144 // Simple helper to see if the caller of a runtime stub which
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
145 // entered the VM has been deoptimized
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
146
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
147 static bool caller_is_deopted() {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
148 JavaThread* thread = JavaThread::current();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
149 RegisterMap reg_map(thread, false);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
150 frame runtime_frame = thread->last_frame();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
151 frame caller_frame = runtime_frame.sender(&reg_map);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
152 assert(caller_frame.is_compiled_frame(), "must be compiled");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
153 return caller_frame.is_deoptimized_frame();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
154 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
155
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
156 // Stress deoptimization
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
157 static void deopt_caller() {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
158 if ( !caller_is_deopted()) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
159 JavaThread* thread = JavaThread::current();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
160 RegisterMap reg_map(thread, false);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
161 frame runtime_frame = thread->last_frame();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
162 frame caller_frame = runtime_frame.sender(&reg_map);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
163 Deoptimization::deoptimize_frame(thread, caller_frame.id(), Deoptimization::Reason_constraint);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
164 assert(caller_is_deopted(), "Must be deoptimized");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
165 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
166 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
167
12433
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
168 JRT_BLOCK_ENTRY(void, GraalRuntime::new_instance(JavaThread* thread, Klass* klass))
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
169 JRT_BLOCK;
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
170 assert(klass->is_klass(), "not a class");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
171 instanceKlassHandle h(thread, klass);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
172 h->check_valid_for_instantiation(true, CHECK);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
173 // make sure klass is initialized
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
174 h->initialize(CHECK);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
175 // allocate instance and return via TLS
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
176 oop obj = h->allocate_instance(CHECK);
12433
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
177 thread->set_vm_result(obj);
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
178 JRT_BLOCK_END;
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
179
12366
0991c12c4186 Defer barriers upon slow-path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10953
diff changeset
180 if (GraalDeferredInitBarriers) {
12433
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
181 new_store_pre_barrier(thread);
12366
0991c12c4186 Defer barriers upon slow-path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10953
diff changeset
182 }
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
183 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
184
12433
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
185 JRT_BLOCK_ENTRY(void, GraalRuntime::new_array(JavaThread* thread, Klass* array_klass, jint length))
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
186 JRT_BLOCK;
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
187 // Note: no handle for klass needed since they are not used
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
188 // anymore after new_objArray() and no GC can happen before.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
189 // (This may have to change if this code changes!)
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
190 assert(array_klass->is_klass(), "not a class");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
191 oop obj;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
192 if (array_klass->oop_is_typeArray()) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
193 BasicType elt_type = TypeArrayKlass::cast(array_klass)->element_type();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
194 obj = oopFactory::new_typeArray(elt_type, length, CHECK);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
195 } else {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
196 Klass* elem_klass = ObjArrayKlass::cast(array_klass)->element_klass();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
197 obj = oopFactory::new_objArray(elem_klass, length, CHECK);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
198 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
199 thread->set_vm_result(obj);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
200 // This is pretty rare but this runtime patch is stressful to deoptimization
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
201 // if we deoptimize here so force a deopt to stress the path.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
202 if (DeoptimizeALot) {
9338
0266549ff6e0 added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9232
diff changeset
203 static int deopts = 0;
0266549ff6e0 added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9232
diff changeset
204 // Alternate between deoptimizing and raising an error (which will also cause a deopt)
0266549ff6e0 added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9232
diff changeset
205 if (deopts++ % 2 == 0) {
0266549ff6e0 added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9232
diff changeset
206 ResourceMark rm(THREAD);
0266549ff6e0 added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9232
diff changeset
207 THROW(vmSymbols::java_lang_OutOfMemoryError());
0266549ff6e0 added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9232
diff changeset
208 } else {
0266549ff6e0 added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9232
diff changeset
209 deopt_caller();
0266549ff6e0 added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9232
diff changeset
210 }
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
211 }
12433
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
212 JRT_BLOCK_END;
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
213
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
214 if (GraalDeferredInitBarriers) {
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
215 new_store_pre_barrier(thread);
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
216 }
9338
0266549ff6e0 added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9232
diff changeset
217 JRT_END
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
218
12433
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
219 void GraalRuntime::new_store_pre_barrier(JavaThread* thread) {
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
220 // After any safepoint, just before going back to compiled code,
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
221 // we inform the GC that we will be doing initializing writes to
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
222 // this object in the future without emitting card-marks, so
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
223 // GC may take any compensating steps.
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
224 // NOTE: Keep this code consistent with GraphKit::store_barrier.
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
225
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
226 oop new_obj = thread->vm_result();
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
227 if (new_obj == NULL) return;
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
228
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
229 assert(Universe::heap()->can_elide_tlab_store_barriers(),
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
230 "compiler must check this first");
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
231 // GC may decide to give back a safer copy of new_obj.
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
232 new_obj = Universe::heap()->new_store_pre_barrier(thread, new_obj);
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
233 thread->set_vm_result(new_obj);
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
234 }
808348377021 Fix inconsistent oops in slow path allocation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 12372
diff changeset
235
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
236 JRT_ENTRY(void, GraalRuntime::new_multi_array(JavaThread* thread, Klass* klass, int rank, jint* dims))
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
237 assert(klass->is_klass(), "not a class");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
238 assert(rank >= 1, "rank must be nonzero");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
239 oop obj = ArrayKlass::cast(klass)->multi_allocate(rank, dims, CHECK);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
240 thread->set_vm_result(obj);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
241 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
242
12423
370b5f07f9e2 The runtime entries need to use oopDesc* rather than oop in their signature
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12372
diff changeset
243 JRT_ENTRY(void, GraalRuntime::dynamic_new_array(JavaThread* thread, oopDesc* element_mirror, jint length))
10542
554f67e4ff3f Use slow-path stub call instead of deopt in lowering of DynamicNewArrayNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 10475
diff changeset
244 oop obj = Reflection::reflect_new_array(element_mirror, length, CHECK);
554f67e4ff3f Use slow-path stub call instead of deopt in lowering of DynamicNewArrayNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 10475
diff changeset
245 thread->set_vm_result(obj);
554f67e4ff3f Use slow-path stub call instead of deopt in lowering of DynamicNewArrayNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 10475
diff changeset
246 JRT_END
554f67e4ff3f Use slow-path stub call instead of deopt in lowering of DynamicNewArrayNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 10475
diff changeset
247
13578
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
248 JRT_ENTRY(void, GraalRuntime::dynamic_new_instance(JavaThread* thread, oopDesc* type_mirror))
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
249 instanceKlassHandle klass(THREAD, java_lang_Class::as_Klass(type_mirror));
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
250
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
251 if (klass == NULL) {
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
252 ResourceMark rm(THREAD);
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
253 THROW(vmSymbols::java_lang_InstantiationException());
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
254 }
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
255
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
256 // Create new instance (the receiver)
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
257 klass->check_valid_for_instantiation(false, CHECK);
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
258
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
259 // Make sure klass gets initialized
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
260 klass->initialize(CHECK);
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
261
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
262 oop obj = klass->allocate_instance(CHECK);
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
263 thread->set_vm_result(obj);
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
264 JRT_END
d8143c431d63 Add DynamicNewInstanceNode and use it to intrinsify Unsafe.allocateInstance
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12668
diff changeset
265
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
266 extern void vm_exit(int code);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
267
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
268 // Enter this method from compiled code handler below. This is where we transition
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
269 // to VM mode. This is done as a helper routine so that the method called directly
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
270 // from compiled code does not have to transition to VM. This allows the entry
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
271 // method to see if the nmethod that we have just looked up a handler for has
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
272 // been deoptimized while we were in the vm. This simplifies the assembly code
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
273 // cpu directories.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
274 //
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
275 // We are entering here from exception stub (via the entry method below)
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
276 // If there is a compiled exception handler in this method, we will continue there;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
277 // otherwise we will unwind the stack and continue at the caller of top frame method
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
278 // Note: we enter in Java using a special JRT wrapper. This wrapper allows us to
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
279 // control the area where we can allow a safepoint. After we exit the safepoint area we can
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
280 // check to see if the handler we are going to return is now in a nmethod that has
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
281 // been deoptimized. If that is the case we return the deopt blob
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
282 // unpack_with_exception entry instead. This makes life for the exception blob easier
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
283 // because making that same check and diverting is painful from assembly language.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
284 JRT_ENTRY_NO_ASYNC(static address, exception_handler_for_pc_helper(JavaThread* thread, oopDesc* ex, address pc, nmethod*& nm))
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
285 // Reset method handle flag.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
286 thread->set_is_method_handle_return(false);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
287
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
288 Handle exception(thread, ex);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
289 nm = CodeCache::find_nmethod(pc);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
290 assert(nm != NULL, "this is not an nmethod");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
291 // Adjust the pc as needed/
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
292 if (nm->is_deopt_pc(pc)) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
293 RegisterMap map(thread, false);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
294 frame exception_frame = thread->last_frame().sender(&map);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
295 // if the frame isn't deopted then pc must not correspond to the caller of last_frame
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
296 assert(exception_frame.is_deoptimized_frame(), "must be deopted");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
297 pc = exception_frame.pc();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
298 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
299 #ifdef ASSERT
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
300 assert(exception.not_null(), "NULL exceptions should be handled by throw_exception");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
301 assert(exception->is_oop(), "just checking");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
302 // Check that exception is a subclass of Throwable, otherwise we have a VerifyError
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
303 if (!(exception->is_a(SystemDictionary::Throwable_klass()))) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
304 if (ExitVMOnVerifyError) vm_exit(-1);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
305 ShouldNotReachHere();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
306 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
307 #endif
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
308
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
309 // Check the stack guard pages and reenable them if necessary and there is
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
310 // enough space on the stack to do so. Use fast exceptions only if the guard
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
311 // pages are enabled.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
312 bool guard_pages_enabled = thread->stack_yellow_zone_enabled();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
313 if (!guard_pages_enabled) guard_pages_enabled = thread->reguard_stack();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
314
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
315 if (JvmtiExport::can_post_on_exceptions()) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
316 // To ensure correct notification of exception catches and throws
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
317 // we have to deoptimize here. If we attempted to notify the
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
318 // catches and throws during this exception lookup it's possible
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
319 // we could deoptimize on the way out of the VM and end back in
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
320 // the interpreter at the throw site. This would result in double
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
321 // notifications since the interpreter would also notify about
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
322 // these same catches and throws as it unwound the frame.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
323
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
324 RegisterMap reg_map(thread);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
325 frame stub_frame = thread->last_frame();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
326 frame caller_frame = stub_frame.sender(&reg_map);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
327
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
328 // We don't really want to deoptimize the nmethod itself since we
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
329 // can actually continue in the exception handler ourselves but I
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
330 // don't see an easy way to have the desired effect.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
331 Deoptimization::deoptimize_frame(thread, caller_frame.id(), Deoptimization::Reason_constraint);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
332 assert(caller_is_deopted(), "Must be deoptimized");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
333
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
334 return SharedRuntime::deopt_blob()->unpack_with_exception_in_tls();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
335 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
336
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
337 // ExceptionCache is used only for exceptions at call sites and not for implicit exceptions
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
338 if (guard_pages_enabled) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
339 address fast_continuation = nm->handler_for_exception_and_pc(exception, pc);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
340 if (fast_continuation != NULL) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
341 // Set flag if return address is a method handle call site.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
342 thread->set_is_method_handle_return(nm->is_method_handle_return(pc));
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
343 return fast_continuation;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
344 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
345 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
346
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
347 // If the stack guard pages are enabled, check whether there is a handler in
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
348 // the current method. Otherwise (guard pages disabled), force an unwind and
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
349 // skip the exception cache update (i.e., just leave continuation==NULL).
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
350 address continuation = NULL;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
351 if (guard_pages_enabled) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
352
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
353 // New exception handling mechanism can support inlined methods
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
354 // with exception handlers since the mappings are from PC to PC
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
355
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
356 // debugging support
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
357 // tracing
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
358 if (TraceExceptions) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
359 ttyLocker ttyl;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
360 ResourceMark rm;
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
361 tty->print_cr("Exception <%s> (" INTPTR_FORMAT ") thrown in compiled method <%s> at PC " INTPTR_FORMAT " for thread " INTPTR_FORMAT "",
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
362 exception->print_value_string(), p2i((address)exception()), nm->method()->print_value_string(), p2i(pc), p2i(thread));
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
363 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
364 // for AbortVMOnException flag
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
365 NOT_PRODUCT(Exceptions::debug_check_abort(exception));
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
366
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
367 // Clear out the exception oop and pc since looking up an
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
368 // exception handler can cause class loading, which might throw an
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
369 // exception and those fields are expected to be clear during
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
370 // normal bytecode execution.
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
371 thread->clear_exception_oop_and_pc();
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
372
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
373 continuation = SharedRuntime::compute_compiled_exc_handler(nm, pc, exception, false, false);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
374 // If an exception was thrown during exception dispatch, the exception oop may have changed
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
375 thread->set_exception_oop(exception());
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
376 thread->set_exception_pc(pc);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
377
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
378 // the exception cache is used only by non-implicit exceptions
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
379 if (continuation != NULL && !SharedRuntime::deopt_blob()->contains(continuation)) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
380 nm->add_handler_for_exception_and_pc(exception, pc, continuation);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
381 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
382 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
383
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
384 // Set flag if return address is a method handle call site.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
385 thread->set_is_method_handle_return(nm->is_method_handle_return(pc));
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
386
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
387 if (TraceExceptions) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
388 ttyLocker ttyl;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
389 ResourceMark rm;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
390 tty->print_cr("Thread " PTR_FORMAT " continuing at PC " PTR_FORMAT " for exception thrown at PC " PTR_FORMAT,
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
391 p2i(thread), p2i(continuation), p2i(pc));
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
392 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
393
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
394 return continuation;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
395 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
396
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
397 // Enter this method from compiled code only if there is a Java exception handler
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
398 // in the method handling the exception.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
399 // We are entering here from exception stub. We don't do a normal VM transition here.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
400 // We do it in a helper. This is so we can check to see if the nmethod we have just
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
401 // searched for an exception handler has been deoptimized in the meantime.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
402 address GraalRuntime::exception_handler_for_pc(JavaThread* thread) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
403 oop exception = thread->exception_oop();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
404 address pc = thread->exception_pc();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
405 // Still in Java mode
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
406 DEBUG_ONLY(ResetNoHandleMark rnhm);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
407 nmethod* nm = NULL;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
408 address continuation = NULL;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
409 {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
410 // Enter VM mode by calling the helper
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
411 ResetNoHandleMark rnhm;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
412 continuation = exception_handler_for_pc_helper(thread, exception, pc, nm);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
413 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
414 // Back in JAVA, use no oops DON'T safepoint
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
415
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
416 // Now check to see if the nmethod we were called from is now deoptimized.
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
417 // If so we must return to the deopt blob and deoptimize the nmethod
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
418 if (nm != NULL && caller_is_deopted()) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
419 continuation = SharedRuntime::deopt_blob()->unpack_with_exception_in_tls();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
420 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
421
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
422 assert(continuation != NULL, "no handler found");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
423 return continuation;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
424 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
425
7911
983f7bdb85ff removed redundant graal_ prefix from Graal specific functions and variable in native code
Doug Simon <doug.simon@oracle.com>
parents: 7735
diff changeset
426 JRT_ENTRY(void, GraalRuntime::create_null_exception(JavaThread* thread))
12668
e27f3169460e notify JVMTI about exception throws from runtime
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 12435
diff changeset
427 SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_NullPointerException());
e27f3169460e notify JVMTI about exception throws from runtime
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 12435
diff changeset
428 thread->set_vm_result(PENDING_EXCEPTION);
e27f3169460e notify JVMTI about exception throws from runtime
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 12435
diff changeset
429 CLEAR_PENDING_EXCEPTION;
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
430 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
431
7911
983f7bdb85ff removed redundant graal_ prefix from Graal specific functions and variable in native code
Doug Simon <doug.simon@oracle.com>
parents: 7735
diff changeset
432 JRT_ENTRY(void, GraalRuntime::create_out_of_bounds_exception(JavaThread* thread, jint index))
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
433 char message[jintAsStringSize];
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
434 sprintf(message, "%d", index);
12668
e27f3169460e notify JVMTI about exception throws from runtime
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 12435
diff changeset
435 SharedRuntime::throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), message);
e27f3169460e notify JVMTI about exception throws from runtime
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 12435
diff changeset
436 thread->set_vm_result(PENDING_EXCEPTION);
e27f3169460e notify JVMTI about exception throws from runtime
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 12435
diff changeset
437 CLEAR_PENDING_EXCEPTION;
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
438 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
439
7911
983f7bdb85ff removed redundant graal_ prefix from Graal specific functions and variable in native code
Doug Simon <doug.simon@oracle.com>
parents: 7735
diff changeset
440 JRT_ENTRY_NO_ASYNC(void, GraalRuntime::monitorenter(JavaThread* thread, oopDesc* obj, BasicLock* lock))
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
441 if (TraceGraal >= 3) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
442 char type[O_BUFLEN];
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
443 obj->klass()->name()->as_C_string(type, O_BUFLEN);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
444 markOop mark = obj->mark();
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
445 tty->print_cr("%s: entered locking slow case with obj=" INTPTR_FORMAT ", type=%s, mark=" INTPTR_FORMAT ", lock=" INTPTR_FORMAT, thread->name(), p2i(obj), type, p2i(mark), p2i(lock));
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
446 tty->flush();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
447 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
448 #ifdef ASSERT
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
449 if (PrintBiasedLockingStatistics) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
450 Atomic::inc(BiasedLocking::slow_path_entry_count_addr());
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
451 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
452 #endif
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
453 Handle h_obj(thread, obj);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
454 assert(h_obj()->is_oop(), "must be NULL or an object");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
455 if (UseBiasedLocking) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
456 // Retry fast entry if bias is revoked to avoid unnecessary inflation
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
457 ObjectSynchronizer::fast_enter(h_obj, lock, true, CHECK);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
458 } else {
7226
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7222 7154
diff changeset
459 if (GraalUseFastLocking) {
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
460 // When using fast locking, the compiled code has already tried the fast case
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
461 ObjectSynchronizer::slow_enter(h_obj, lock, THREAD);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
462 } else {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
463 ObjectSynchronizer::fast_enter(h_obj, lock, false, THREAD);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
464 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
465 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
466 if (TraceGraal >= 3) {
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
467 tty->print_cr("%s: exiting locking slow with obj=" INTPTR_FORMAT, thread->name(), p2i(obj));
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
468 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
469 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
470
7911
983f7bdb85ff removed redundant graal_ prefix from Graal specific functions and variable in native code
Doug Simon <doug.simon@oracle.com>
parents: 7735
diff changeset
471 JRT_LEAF(void, GraalRuntime::monitorexit(JavaThread* thread, oopDesc* obj, BasicLock* lock))
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
472 assert(thread == JavaThread::current(), "threads must correspond");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
473 assert(thread->last_Java_sp(), "last_Java_sp must be set");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
474 // monitorexit is non-blocking (leaf routine) => no exceptions can be thrown
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
475 EXCEPTION_MARK;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
476
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
477 #ifdef DEBUG
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
478 if (!obj->is_oop()) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
479 ResetNoHandleMark rhm;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
480 nmethod* method = thread->last_frame().cb()->as_nmethod_or_null();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
481 if (method != NULL) {
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
482 tty->print_cr("ERROR in monitorexit in method %s wrong obj " INTPTR_FORMAT, method->name(), p2i(obj));
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
483 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
484 thread->print_stack_on(tty);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
485 assert(false, "invalid lock object pointer dected");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
486 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
487 #endif
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
488
7226
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7222 7154
diff changeset
489 if (GraalUseFastLocking) {
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
490 // When using fast locking, the compiled code has already tried the fast case
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
491 ObjectSynchronizer::slow_exit(obj, lock, THREAD);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
492 } else {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
493 ObjectSynchronizer::fast_exit(obj, lock, THREAD);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
494 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
495 if (TraceGraal >= 3) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
496 char type[O_BUFLEN];
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
497 obj->klass()->name()->as_C_string(type, O_BUFLEN);
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
498 tty->print_cr("%s: exited locking slow case with obj=" INTPTR_FORMAT ", type=%s, mark=" INTPTR_FORMAT ", lock=" INTPTR_FORMAT, thread->name(), p2i(obj), type, p2i(obj->mark()), p2i(lock));
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
499 tty->flush();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
500 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
501 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
502
16887
aa412e64808e logObject and logPrimitive should be leaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16876
diff changeset
503 JRT_LEAF(void, GraalRuntime::log_object(JavaThread* thread, oopDesc* obj, jint flags))
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
504 bool string = mask_bits_are_true(flags, LOG_OBJECT_STRING);
12356
359f7e70ae7f Reduce HotSpot diff and fix previous merge
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 10953
diff changeset
505 bool addr = mask_bits_are_true(flags, LOG_OBJECT_ADDRESS);
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
506 bool newline = mask_bits_are_true(flags, LOG_OBJECT_NEWLINE);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
507 if (!string) {
12356
359f7e70ae7f Reduce HotSpot diff and fix previous merge
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 10953
diff changeset
508 if (!addr && obj->is_oop_or_null(true)) {
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
509 char buf[O_BUFLEN];
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
510 tty->print("%s@" INTPTR_FORMAT, obj->klass()->name()->as_C_string(buf, O_BUFLEN), p2i(obj));
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
511 } else {
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
512 tty->print(INTPTR_FORMAT, p2i(obj));
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
513 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
514 } else {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
515 ResourceMark rm;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
516 assert(obj != NULL && java_lang_String::is_instance(obj), "must be");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
517 char *buf = java_lang_String::as_utf8_string(obj);
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
518 tty->print_raw(buf);
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
519 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
520 if (newline) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
521 tty->cr();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
522 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
523 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
524
10434
8b22524df53b Add G1 Barriers' foreign calls
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10072
diff changeset
525 JRT_LEAF(void, GraalRuntime::write_barrier_pre(JavaThread* thread, oopDesc* obj))
8b22524df53b Add G1 Barriers' foreign calls
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10072
diff changeset
526 thread->satb_mark_queue().enqueue(obj);
8b22524df53b Add G1 Barriers' foreign calls
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10072
diff changeset
527 JRT_END
8b22524df53b Add G1 Barriers' foreign calls
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10072
diff changeset
528
8b22524df53b Add G1 Barriers' foreign calls
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10072
diff changeset
529 JRT_LEAF(void, GraalRuntime::write_barrier_post(JavaThread* thread, void* card_addr))
8b22524df53b Add G1 Barriers' foreign calls
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10072
diff changeset
530 thread->dirty_card_queue().enqueue(card_addr);
8b22524df53b Add G1 Barriers' foreign calls
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10072
diff changeset
531 JRT_END
8b22524df53b Add G1 Barriers' foreign calls
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10072
diff changeset
532
12356
359f7e70ae7f Reduce HotSpot diff and fix previous merge
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 10953
diff changeset
533 JRT_LEAF(jboolean, GraalRuntime::validate_object(JavaThread* thread, oopDesc* parent, oopDesc* child))
10953
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
534 bool ret = true;
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
535 if(!Universe::heap()->is_in_closed_subset(parent)) {
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
536 tty->print_cr("Parent Object "INTPTR_FORMAT" not in heap", p2i(parent));
10953
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
537 parent->print();
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
538 ret=false;
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
539 }
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
540 if(!Universe::heap()->is_in_closed_subset(child)) {
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
541 tty->print_cr("Child Object "INTPTR_FORMAT" not in heap", p2i(child));
10953
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
542 child->print();
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
543 ret=false;
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
544 }
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
545 return (jint)ret;
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
546 JRT_END
97e282186b5b Add heap sanity checker with premature hard crash for debugging write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 10542
diff changeset
547
14731
0cb5c4d276d4 use raw data support to fix incorrect use of String.intern() for embedding strings in code
Doug Simon <doug.simon@oracle.com>
parents: 14608
diff changeset
548 JRT_ENTRY(void, GraalRuntime::vm_error(JavaThread* thread, jlong where, jlong format, jlong value))
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
549 ResourceMark rm;
14731
0cb5c4d276d4 use raw data support to fix incorrect use of String.intern() for embedding strings in code
Doug Simon <doug.simon@oracle.com>
parents: 14608
diff changeset
550 const char *error_msg = where == 0L ? "<internal Graal error>" : (char*) (address) where;
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
551 char *detail_msg = NULL;
14731
0cb5c4d276d4 use raw data support to fix incorrect use of String.intern() for embedding strings in code
Doug Simon <doug.simon@oracle.com>
parents: 14608
diff changeset
552 if (format != 0L) {
0cb5c4d276d4 use raw data support to fix incorrect use of String.intern() for embedding strings in code
Doug Simon <doug.simon@oracle.com>
parents: 14608
diff changeset
553 const char* buf = (char*) (address) format;
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
554 size_t detail_msg_length = strlen(buf) * 2;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
555 detail_msg = (char *) NEW_RESOURCE_ARRAY(u_char, detail_msg_length);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
556 jio_snprintf(detail_msg, detail_msg_length, buf, value);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
557 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
558 report_vm_error(__FILE__, __LINE__, error_msg, detail_msg);
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
559 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
560
12423
370b5f07f9e2 The runtime entries need to use oopDesc* rather than oop in their signature
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12372
diff changeset
561 JRT_LEAF(oopDesc*, GraalRuntime::load_and_clear_exception(JavaThread* thread))
9820
1b60f639ac4b implemented alternative implementation for loading the exception object from the thread at the start of an exception dispatcher
Doug Simon <doug.simon@oracle.com>
parents: 9596
diff changeset
562 oop exception = thread->exception_oop();
1b60f639ac4b implemented alternative implementation for loading the exception object from the thread at the start of an exception dispatcher
Doug Simon <doug.simon@oracle.com>
parents: 9596
diff changeset
563 assert(exception != NULL, "npe");
1b60f639ac4b implemented alternative implementation for loading the exception object from the thread at the start of an exception dispatcher
Doug Simon <doug.simon@oracle.com>
parents: 9596
diff changeset
564 thread->set_exception_oop(NULL);
1b60f639ac4b implemented alternative implementation for loading the exception object from the thread at the start of an exception dispatcher
Doug Simon <doug.simon@oracle.com>
parents: 9596
diff changeset
565 thread->set_exception_pc(0);
1b60f639ac4b implemented alternative implementation for loading the exception object from the thread at the start of an exception dispatcher
Doug Simon <doug.simon@oracle.com>
parents: 9596
diff changeset
566 return exception;
1b60f639ac4b implemented alternative implementation for loading the exception object from the thread at the start of an exception dispatcher
Doug Simon <doug.simon@oracle.com>
parents: 9596
diff changeset
567 JRT_END
8506
c3657d00e343 -Merge with tip
Christos Kotselidis <christos.kotselidis@oracle.com>
parents: 8504 8127
diff changeset
568
12423
370b5f07f9e2 The runtime entries need to use oopDesc* rather than oop in their signature
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12372
diff changeset
569 JRT_LEAF(void, GraalRuntime::log_printf(JavaThread* thread, oopDesc* format, jlong v1, jlong v2, jlong v3))
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
570 ResourceMark rm;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
571 assert(format != NULL && java_lang_String::is_instance(format), "must be");
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
572 char *buf = java_lang_String::as_utf8_string(format);
7235
a6bd253a770f expanded LOG_PRINTF stub to handle up to 3 arguments in addition to the format string
Doug Simon <doug.simon@oracle.com>
parents: 7226
diff changeset
573 tty->print(buf, v1, v2, v3);
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
574 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
575
9573
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
576 static void decipher(jlong v, bool ignoreZero) {
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
577 if (v != 0 || !ignoreZero) {
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
578 void* p = (void *)(address) v;
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
579 CodeBlob* cb = CodeCache::find_blob(p);
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
580 if (cb) {
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
581 if (cb->is_nmethod()) {
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
582 char buf[O_BUFLEN];
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
583 tty->print("%s [" INTPTR_FORMAT "+" JLONG_FORMAT "]", cb->as_nmethod_or_null()->method()->name_and_sig_as_C_string(buf, O_BUFLEN), p2i(cb->code_begin()), (jlong)((address)v - cb->code_begin()));
9573
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
584 return;
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
585 }
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
586 cb->print_value_on(tty);
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
587 return;
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
588 }
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
589 if (Universe::heap()->is_in(p)) {
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
590 oop obj = oop(p);
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
591 obj->print_value_on(tty);
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
592 return;
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
593 }
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
594 tty->print(INTPTR_FORMAT " [long: " JLONG_FORMAT ", double %lf, char %c]",p2i((void *)v), (jlong)v, (jdouble)v, (char)v);
9573
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
595 }
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
596 }
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
597
9471
5fa54bf57f8c replaced exception_handler_nofpu assembler stub with a compiled stub (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9457
diff changeset
598 JRT_LEAF(void, GraalRuntime::vm_message(jboolean vmError, jlong format, jlong v1, jlong v2, jlong v3))
9232
bb2447c64055 strings used in compiled stubs are lowered to malloc'ed C strings so that there are no embedded oops (for the strings) in the resulting installed code
Doug Simon <doug.simon@oracle.com>
parents: 8506
diff changeset
599 ResourceMark rm;
bb2447c64055 strings used in compiled stubs are lowered to malloc'ed C strings so that there are no embedded oops (for the strings) in the resulting installed code
Doug Simon <doug.simon@oracle.com>
parents: 8506
diff changeset
600 char *buf = (char*) (address) format;
9471
5fa54bf57f8c replaced exception_handler_nofpu assembler stub with a compiled stub (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9457
diff changeset
601 if (vmError) {
9573
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
602 if (buf != NULL) {
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
603 fatal(err_msg(buf, v1, v2, v3));
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
604 } else {
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
605 fatal("<anonymous error>");
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
606 }
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
607 } else if (buf != NULL) {
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
608 tty->print(buf, v1, v2, v3);
9471
5fa54bf57f8c replaced exception_handler_nofpu assembler stub with a compiled stub (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9457
diff changeset
609 } else {
9573
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
610 assert(v2 == 0, "v2 != 0");
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
611 assert(v3 == 0, "v3 != 0");
a79e8020ad4b added Stub.decipher() to print information about values in stubs
Doug Simon <doug.simon@oracle.com>
parents: 9565
diff changeset
612 decipher(v1, false);
9471
5fa54bf57f8c replaced exception_handler_nofpu assembler stub with a compiled stub (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents: 9457
diff changeset
613 }
9232
bb2447c64055 strings used in compiled stubs are lowered to malloc'ed C strings so that there are no embedded oops (for the strings) in the resulting installed code
Doug Simon <doug.simon@oracle.com>
parents: 8506
diff changeset
614 JRT_END
bb2447c64055 strings used in compiled stubs are lowered to malloc'ed C strings so that there are no embedded oops (for the strings) in the resulting installed code
Doug Simon <doug.simon@oracle.com>
parents: 8506
diff changeset
615
16887
aa412e64808e logObject and logPrimitive should be leaf
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 16876
diff changeset
616 JRT_LEAF(void, GraalRuntime::log_primitive(JavaThread* thread, jchar typeChar, jlong value, jboolean newline))
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
617 union {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
618 jlong l;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
619 jdouble d;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
620 jfloat f;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
621 } uu;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
622 uu.l = value;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
623 switch (typeChar) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
624 case 'z': tty->print(value == 0 ? "false" : "true"); break;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
625 case 'b': tty->print("%d", (jbyte) value); break;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
626 case 'c': tty->print("%c", (jchar) value); break;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
627 case 's': tty->print("%d", (jshort) value); break;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
628 case 'i': tty->print("%d", (jint) value); break;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
629 case 'f': tty->print("%f", uu.f); break;
18657
74f612049e4e fixed format string issues
Doug Simon <doug.simon@oracle.com>
parents: 18634
diff changeset
630 case 'j': tty->print(JLONG_FORMAT, value); break;
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
631 case 'd': tty->print("%lf", uu.d); break;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
632 default: assert(false, "unknown typeChar"); break;
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
633 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
634 if (newline) {
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
635 tty->cr();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
636 }
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
637 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
638
12423
370b5f07f9e2 The runtime entries need to use oopDesc* rather than oop in their signature
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12372
diff changeset
639 JRT_ENTRY(jint, GraalRuntime::identity_hash_code(JavaThread* thread, oopDesc* obj))
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
640 return (jint) obj->identity_hash();
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
641 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
642
12423
370b5f07f9e2 The runtime entries need to use oopDesc* rather than oop in their signature
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12372
diff changeset
643 JRT_ENTRY(jboolean, GraalRuntime::thread_is_interrupted(JavaThread* thread, oopDesc* receiver, jboolean clear_interrupted))
7220
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7216
diff changeset
644 // Ensure that the C++ Thread and OSThread structures aren't freed before we operate
fcae6d960acd added more compiler intrinsics
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7216
diff changeset
645 Handle receiverHandle(thread, receiver);
12423
370b5f07f9e2 The runtime entries need to use oopDesc* rather than oop in their signature
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 12372
diff changeset
646 MutexLockerEx ml(thread->threadObj() == (void*)receiver ? NULL : Threads_lock);
7386
707e9cca11de fixed HotSpot windows build
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7235
diff changeset
647 JavaThread* receiverThread = java_lang_Thread::thread(receiverHandle());
14608
682fba1bcf95 add missing null check in is_interrupted
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13578
diff changeset
648 if (receiverThread == NULL) {
682fba1bcf95 add missing null check in is_interrupted
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13578
diff changeset
649 // The other thread may exit during this process, which is ok so return false.
682fba1bcf95 add missing null check in is_interrupted
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13578
diff changeset
650 return JNI_FALSE;
682fba1bcf95 add missing null check in is_interrupted
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13578
diff changeset
651 } else {
682fba1bcf95 add missing null check in is_interrupted
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13578
diff changeset
652 return (jint) Thread::is_interrupted(receiverThread, clear_interrupted != 0);
682fba1bcf95 add missing null check in is_interrupted
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13578
diff changeset
653 }
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
654 JRT_END
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
655
18227
bcb1e5c232d8 Test deoptimization inside ForeignCallNode
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18043
diff changeset
656 JRT_ENTRY(jint, GraalRuntime::test_deoptimize_call_int(JavaThread* thread, int value))
bcb1e5c232d8 Test deoptimization inside ForeignCallNode
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18043
diff changeset
657 deopt_caller();
bcb1e5c232d8 Test deoptimization inside ForeignCallNode
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18043
diff changeset
658 return value;
bcb1e5c232d8 Test deoptimization inside ForeignCallNode
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18043
diff changeset
659 JRT_END
bcb1e5c232d8 Test deoptimization inside ForeignCallNode
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18043
diff changeset
660
18614
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
661 // private static void Factory.init()
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
662 JVM_ENTRY(void, JVM_InitGraalClassLoader(JNIEnv *env, jclass c, jobject loader_handle))
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
663 SystemDictionary::init_graal_loader(JNIHandles::resolve(loader_handle));
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
664 SystemDictionary::WKID scan = SystemDictionary::FIRST_GRAAL_WKID;
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
665 SystemDictionary::initialize_wk_klasses_through(SystemDictionary::LAST_GRAAL_WKID, scan, CHECK);
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
666 JVM_END
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
667
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
668 // private static GraalRuntime Graal.initializeRuntime()
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
669 JVM_ENTRY(jobject, JVM_GetGraalRuntime(JNIEnv *env, jclass c))
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
670 return GraalRuntime::get_HotSpotGraalRuntime_jobject();
7221
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7220 7145
diff changeset
671 JVM_END
10475
3489047ffea2 Restructure the handling of HotSpotInstalledCode and their link to nmethods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10434
diff changeset
672
15916
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
673 // private static String[] Graal.getServiceImpls(Class service)
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
674 JVM_ENTRY(jobject, JVM_GetGraalServiceImpls(JNIEnv *env, jclass c, jclass serviceClass))
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
675 HandleMark hm;
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
676 KlassHandle serviceKlass(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(serviceClass)));
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
677 return JNIHandles::make_local(THREAD, GraalRuntime::get_service_impls(serviceKlass, THREAD)());
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
678 JVM_END
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
679
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
680 // private static TruffleRuntime Truffle.createRuntime()
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
681 JVM_ENTRY(jobject, JVM_CreateTruffleRuntime(JNIEnv *env, jclass c))
18634
b4071daf1892 ensure Graal class loader is initialized prior to loading HotSpotTruffleRuntime
Andreas Woess <andreas.woess@jku.at>
parents: 18628
diff changeset
682 GraalRuntime::ensure_graal_class_loader_is_initialized();
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
683 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime", CHECK_NULL);
16395
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
684 KlassHandle klass = GraalRuntime::resolve_or_fail(name, CHECK_NULL);
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
685
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
686 TempNewSymbol makeInstance = SymbolTable::new_symbol("makeInstance", CHECK_NULL);
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
687 TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/graal/truffle/hotspot/HotSpotTruffleRuntime;", CHECK_NULL);
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
688 JavaValue result(T_OBJECT);
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
689 JavaCalls::call_static(&result, klass, makeInstance, sig, CHECK_NULL);
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
690 return JNIHandles::make_local((oop) result.get_jobject());
10475
3489047ffea2 Restructure the handling of HotSpotInstalledCode and their link to nmethods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 10434
diff changeset
691 JVM_END
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
692
16691
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
693 // private static NativeFunctionInterfaceRuntime.createInterface()
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
694 JVM_ENTRY(jobject, JVM_CreateNativeFunctionInterface(JNIEnv *env, jclass c))
16717
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
695 const char* backendName = NULL;
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
696 #ifdef TARGET_ARCH_x86
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
697 #ifdef _LP64
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
698 backendName = "com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend";
18748
3d6e630a72f1 Fix GNFI class loader problem
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 18711
diff changeset
699 #endif
16717
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
700 #endif
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
701
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
702 if (backendName == NULL) {
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
703 return NULL;
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
704 }
18748
3d6e630a72f1 Fix GNFI class loader problem
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 18711
diff changeset
705 GraalRuntime::ensure_graal_class_loader_is_initialized();
16717
91e7d77cfb81 NFI: initialization only if platform is x86
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16691
diff changeset
706 TempNewSymbol name = SymbolTable::new_symbol(backendName, CHECK_NULL);
16691
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
707 KlassHandle klass = GraalRuntime::resolve_or_fail(name, CHECK_NULL);
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
708
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
709 TempNewSymbol makeInstance = SymbolTable::new_symbol("createNativeFunctionInterface", CHECK_NULL);
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
710 TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/nfi/api/NativeFunctionInterface;", CHECK_NULL);
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
711 JavaValue result(T_OBJECT);
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
712 JavaCalls::call_static(&result, klass, makeInstance, sig, CHECK_NULL);
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
713 return JNIHandles::make_local((oop) result.get_jobject());
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
714 JVM_END
dd8449afc086 GNFI: move GNFI interfaces to oracle.nfi - interface does not depend on graal
Matthias Grimmer <grimmer@ssw.jku.at>
parents: 16683
diff changeset
715
16628
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
716 void GraalRuntime::check_generated_sources_sha1(TRAPS) {
18711
88c280297bd2 put GeneratedSourcesSha1 into com.oracle.graal.hotspot.sourcegen package
Doug Simon <doug.simon@oracle.com>
parents: 18657
diff changeset
717 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/sourcegen/GeneratedSourcesSha1", CHECK_ABORT);
16628
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
718 KlassHandle klass = load_required_class(name);
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
719 fieldDescriptor fd;
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
720 if (!InstanceKlass::cast(klass())->find_field(vmSymbols::value_name(), vmSymbols::string_signature(), true, &fd)) {
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
721 THROW_MSG(vmSymbols::java_lang_NoSuchFieldError(), "GeneratedSourcesSha1.value");
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
722 }
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
723
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
724 Symbol* value = java_lang_String::as_symbol(klass->java_mirror()->obj_field(fd.offset()), CHECK);
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
725 if (!value->equals(_generated_sources_sha1)) {
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
726 char buf[200];
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
727 jio_snprintf(buf, sizeof(buf), "Generated sources SHA1 check failed (%s != %s) - need to rebuild the VM", value->as_C_string(), _generated_sources_sha1);
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
728 THROW_MSG(vmSymbols::java_lang_InternalError(), buf);
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
729 }
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
730 }
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
731
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
732 Handle GraalRuntime::get_HotSpotGraalRuntime() {
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
733 if (JNIHandles::resolve(_HotSpotGraalRuntime_instance) == NULL) {
16683
4d0d1dc5db00 introduce extra field to record when HotSpotGraalRuntime has been initialized to avoid spurious errors during VM shutdown for short lived applications
Doug Simon <doug.simon@oracle.com>
parents: 16679
diff changeset
734 guarantee(!_HotSpotGraalRuntime_initialized, "cannot reinitialize HotSpotGraalRuntime");
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
735 Thread* THREAD = Thread::current();
16628
d3fec84757ed improved generated sources up-to-date check by using SHA1 digests
Doug Simon <doug.simon@oracle.com>
parents: 16580
diff changeset
736 check_generated_sources_sha1(CHECK_ABORT_(Handle()));
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
737 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotGraalRuntime", CHECK_ABORT_(Handle()));
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
738 KlassHandle klass = load_required_class(name);
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
739 TempNewSymbol runtime = SymbolTable::new_symbol("runtime", CHECK_ABORT_(Handle()));
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
740 TempNewSymbol sig = SymbolTable::new_symbol("()Lcom/oracle/graal/hotspot/HotSpotGraalRuntime;", CHECK_ABORT_(Handle()));
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
741 JavaValue result(T_OBJECT);
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
742 JavaCalls::call_static(&result, klass, runtime, sig, CHECK_ABORT_(Handle()));
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
743 _HotSpotGraalRuntime_instance = JNIHandles::make_global((oop) result.get_jobject());
16683
4d0d1dc5db00 introduce extra field to record when HotSpotGraalRuntime has been initialized to avoid spurious errors during VM shutdown for short lived applications
Doug Simon <doug.simon@oracle.com>
parents: 16679
diff changeset
744 _HotSpotGraalRuntime_initialized = true;
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
745 }
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
746 return Handle(JNIHandles::resolve_non_null(_HotSpotGraalRuntime_instance));
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
747 }
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
748
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
749 // private static void CompilerToVMImpl.init()
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
750 JVM_ENTRY(void, JVM_InitializeGraalNatives(JNIEnv *env, jclass c2vmClass))
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
751 GraalRuntime::initialize_natives(env, c2vmClass);
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
752 JVM_END
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
753
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
754 // private static boolean HotSpotOptions.parseVMOptions()
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
755 JVM_ENTRY(jboolean, JVM_ParseGraalOptions(JNIEnv *env, jclass c))
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
756 HandleMark hm;
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
757 KlassHandle hotSpotOptionsClass(THREAD, java_lang_Class::as_Klass(JNIHandles::resolve_non_null(c)));
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
758 bool result = GraalRuntime::parse_arguments(hotSpotOptionsClass, CHECK_false);
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
759 return result;
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
760 JVM_END
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
761
18614
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
762
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
763 void GraalRuntime::ensure_graal_class_loader_is_initialized() {
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
764 // This initialization code is guarded by a static pointer to the Factory class.
18628
4ca70b51c8bb improved comments
Doug Simon <doug.simon@oracle.com>
parents: 18618
diff changeset
765 // Once it is non-null, the Graal class loader and well known Graal classes are
18614
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
766 // guaranteed to have been initialized. By going through the static
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
767 // initializer of Factory, we can rely on class initialization semantics to
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
768 // synchronize threads racing to do the initialization.
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
769 static Klass* _FactoryKlass = NULL;
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
770 if (_FactoryKlass == NULL) {
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
771 Thread* THREAD = Thread::current();
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
772 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/loader/Factory", CHECK_ABORT);
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
773 KlassHandle klass = SystemDictionary::resolve_or_fail(name, true, THREAD);
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
774 if (HAS_PENDING_EXCEPTION) {
18618
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
775 static volatile int seen_error = 0;
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
776 if (!seen_error && Atomic::cmpxchg(1, &seen_error, 0) == 0) {
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
777 // Only report the failure on the first thread that hits it
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
778 abort_on_pending_exception(PENDING_EXCEPTION, "Graal classes are not available");
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
779 } else {
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
780 CLEAR_PENDING_EXCEPTION;
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
781 // Give first thread time to report the error.
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
782 os::sleep(THREAD, 100, false);
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
783 vm_abort(false);
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
784 }
18614
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
785 }
18618
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
786
18628
4ca70b51c8bb improved comments
Doug Simon <doug.simon@oracle.com>
parents: 18618
diff changeset
787 // We cannot use graalJavaAccess for this because we are currently in the
4ca70b51c8bb improved comments
Doug Simon <doug.simon@oracle.com>
parents: 18618
diff changeset
788 // process of initializing that mechanism.
18614
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
789 TempNewSymbol field_name = SymbolTable::new_symbol("useGraalClassLoader", CHECK_ABORT);
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
790 fieldDescriptor field_desc;
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
791 if (klass->find_field(field_name, vmSymbols::bool_signature(), &field_desc) == NULL) {
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
792 ResourceMark rm;
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
793 fatal(err_msg("Invalid layout of %s at %s", field_name->as_C_string(), klass->external_name()));
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
794 }
18618
0aec14bcf006 ensure the error message about missing Graal classes is printed exactly once
Doug Simon <doug.simon@oracle.com>
parents: 18614
diff changeset
795
18614
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
796 InstanceKlass* ik = InstanceKlass::cast(klass());
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
797 address addr = ik->static_field_addr(field_desc.offset() - InstanceMirrorKlass::offset_of_static_fields());
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
798 *((jboolean *) addr) = (jboolean) UseGraalClassLoader;
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
799 klass->initialize(CHECK_ABORT);
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
800 _FactoryKlass = klass();
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
801 }
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
802 }
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
803
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
804 jint GraalRuntime::check_arguments(TRAPS) {
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
805 KlassHandle nullHandle;
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
806 parse_arguments(nullHandle, THREAD);
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
807 if (HAS_PENDING_EXCEPTION) {
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
808 // Errors in parsing Graal arguments cause exceptions.
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
809 // We now load and initialize HotSpotOptions which in turn
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
810 // causes argument parsing to be redone with better error messages.
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
811 CLEAR_PENDING_EXCEPTION;
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
812 TempNewSymbol name = SymbolTable::new_symbol("Lcom/oracle/graal/hotspot/HotSpotOptions;", CHECK_ABORT_(JNI_ERR));
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
813 instanceKlassHandle hotSpotOptionsClass = resolve_or_fail(name, CHECK_ABORT_(JNI_ERR));
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
814
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
815 parse_arguments(hotSpotOptionsClass, THREAD);
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
816 assert(HAS_PENDING_EXCEPTION, "must be");
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
817
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
818 ResourceMark rm;
16273
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
819 Handle exception = PENDING_EXCEPTION;
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
820 CLEAR_PENDING_EXCEPTION;
16273
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
821 oop message = java_lang_Throwable::message(exception);
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
822 if (message != NULL) {
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
823 tty->print_cr("Error parsing Graal options: %s", java_lang_String::as_utf8_string(message));
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
824 } else {
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
825 call_printStackTrace(exception, THREAD);
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
826 }
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
827 return JNI_ERR;
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
828 }
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
829 return JNI_OK;
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
830 }
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
831
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
832 bool GraalRuntime::parse_arguments(KlassHandle hotSpotOptionsClass, TRAPS) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
833 ResourceMark rm(THREAD);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
834
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
835 // Process option overrides from graal.options first
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
836 parse_graal_options_file(hotSpotOptionsClass, CHECK_false);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
837
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
838 // Now process options on the command line
15603
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
839 int numOptions = Arguments::num_graal_args();
b7fb36e57da8 made Graal initialization be driven from Java to simplify sequencing and synchronization
Doug Simon <doug.simon@oracle.com>
parents: 15589
diff changeset
840 for (int i = 0; i < numOptions; i++) {
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
841 char* arg = Arguments::graal_args_array()[i];
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
842 parse_argument(hotSpotOptionsClass, arg, CHECK_false);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
843 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
844 return CITime || CITimeEach;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
845 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
846
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
847 void GraalRuntime::check_required_value(const char* name, size_t name_len, const char* value, TRAPS) {
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
848 if (value == NULL) {
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
849 char buf[200];
16273
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
850 jio_snprintf(buf, sizeof(buf), "Must use '-G:%.*s=<value>' format for %.*s option", name_len, name, name_len, name);
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
851 THROW_MSG(vmSymbols::java_lang_InternalError(), buf);
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
852 }
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
853 }
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
854
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
855 void GraalRuntime::parse_argument(KlassHandle hotSpotOptionsClass, char* arg, TRAPS) {
18614
c307546c7b0a made initialization of the Graal class loader and well known Graal classes lazy
Doug Simon <doug.simon@oracle.com>
parents: 18303
diff changeset
856 ensure_graal_class_loader_is_initialized();
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
857 char first = arg[0];
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
858 char* name;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
859 size_t name_len;
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
860 bool recognized = true;
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
861 if (first == '+' || first == '-') {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
862 name = arg + 1;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
863 name_len = strlen(name);
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
864 recognized = set_option_bool(hotSpotOptionsClass, name, name_len, first, CHECK);
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
865 } else {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
866 char* sep = strchr(arg, '=');
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
867 name = arg;
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
868 char* value = NULL;
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
869 if (sep != NULL) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
870 name_len = sep - name;
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
871 value = sep + 1;
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
872 } else {
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
873 name_len = strlen(name);
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
874 }
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
875 recognized = set_option(hotSpotOptionsClass, name, name_len, value, CHECK);
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
876 }
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
877
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
878 if (!recognized) {
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
879 bool throw_err = hotSpotOptionsClass.is_null();
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
880 if (!hotSpotOptionsClass.is_null()) {
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
881 set_option_helper(hotSpotOptionsClass, name, name_len, Handle(), ' ', Handle(), 0L);
16275
7af7db0bbfe9 handle unwinding exception through recursive call properly
Doug Simon <doug.simon@oracle.com>
parents: 16274
diff changeset
882 if (!HAS_PENDING_EXCEPTION) {
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
883 throw_err = true;
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
884 }
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
885 }
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
886
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
887 if (throw_err) {
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
888 char buf[200];
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
889 jio_snprintf(buf, sizeof(buf), "Unrecognized Graal option %.*s", name_len, name);
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
890 THROW_MSG(vmSymbols::java_lang_InternalError(), buf);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
891 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
892 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
893 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
894
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
895 void GraalRuntime::parse_graal_options_file(KlassHandle hotSpotOptionsClass, TRAPS) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
896 const char* home = Arguments::get_java_home();
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
897 size_t path_len = strlen(home) + strlen("/lib/graal.options") + 1;
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
898 char* path = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, path_len);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
899 char sep = os::file_separator()[0];
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
900 sprintf(path, "%s%clib%cgraal.options", home, sep, sep);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
901
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
902 struct stat st;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
903 if (os::stat(path, &st) == 0) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
904 int file_handle = os::open(path, 0, 0);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
905 if (file_handle != -1) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
906 char* buffer = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, st.st_size);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
907 int num_read = (int) os::read(file_handle, (char*) buffer, st.st_size);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
908 if (num_read == -1) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
909 warning("Error reading file %s due to %s", path, strerror(errno));
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
910 } else if (num_read != st.st_size) {
18657
74f612049e4e fixed format string issues
Doug Simon <doug.simon@oracle.com>
parents: 18634
diff changeset
911 warning("Only read %d of " SIZE_FORMAT " bytes from %s", num_read, (size_t) st.st_size, path);
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
912 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
913 os::close(file_handle);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
914 if (num_read == st.st_size) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
915 char* line = buffer;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
916 int lineNo = 1;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
917 while (line - buffer < num_read) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
918 char* nl = strchr(line, '\n');
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
919 if (nl != NULL) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
920 *nl = '\0';
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
921 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
922 parse_argument(hotSpotOptionsClass, line, THREAD);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
923 if (HAS_PENDING_EXCEPTION) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
924 warning("Error in %s:%d", path, lineNo);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
925 return;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
926 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
927 if (nl != NULL) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
928 line = nl + 1;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
929 lineNo++;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
930 } else {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
931 // File without newline at the end
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
932 break;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
933 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
934 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
935 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
936 } else {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
937 warning("Error opening file %s due to %s", path, strerror(errno));
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
938 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
939 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
940 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
941
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
942 jlong GraalRuntime::parse_primitive_option_value(char spec, const char* name, size_t name_len, const char* value, TRAPS) {
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
943 check_required_value(name, name_len, value, CHECK_(0L));
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
944 union {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
945 jint i;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
946 jlong l;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
947 double d;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
948 } uu;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
949 uu.l = 0L;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
950 char dummy;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
951 switch (spec) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
952 case 'd':
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
953 case 'f': {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
954 if (sscanf(value, "%lf%c", &uu.d, &dummy) == 1) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
955 return uu.l;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
956 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
957 break;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
958 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
959 case 'i': {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
960 if (sscanf(value, "%d%c", &uu.i, &dummy) == 1) {
17165
5247c895a6ab [SPARC] Use Fzero(d|s) for clearing a fp register
Stefan Anzinger <stefan.anzinger@oracle.com>
parents: 17033
diff changeset
961 return (jlong)uu.i;
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
962 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
963 break;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
964 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
965 default:
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
966 ShouldNotReachHere();
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
967 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
968 ResourceMark rm(THREAD);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
969 char buf[200];
16274
60c3f610183e separate error messages for missing versus invalid non-String option values
Doug Simon <doug.simon@oracle.com>
parents: 16273
diff changeset
970 bool missing = strlen(value) == 0;
60c3f610183e separate error messages for missing versus invalid non-String option values
Doug Simon <doug.simon@oracle.com>
parents: 16273
diff changeset
971 if (missing) {
60c3f610183e separate error messages for missing versus invalid non-String option values
Doug Simon <doug.simon@oracle.com>
parents: 16273
diff changeset
972 jio_snprintf(buf, sizeof(buf), "Missing %s value for Graal option %.*s", (spec == 'i' ? "numeric" : "float/double"), name_len, name);
60c3f610183e separate error messages for missing versus invalid non-String option values
Doug Simon <doug.simon@oracle.com>
parents: 16273
diff changeset
973 } else {
60c3f610183e separate error messages for missing versus invalid non-String option values
Doug Simon <doug.simon@oracle.com>
parents: 16273
diff changeset
974 jio_snprintf(buf, sizeof(buf), "Invalid %s value for Graal option %.*s: %s", (spec == 'i' ? "numeric" : "float/double"), name_len, name, value);
60c3f610183e separate error messages for missing versus invalid non-String option values
Doug Simon <doug.simon@oracle.com>
parents: 16273
diff changeset
975 }
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
976 THROW_MSG_(vmSymbols::java_lang_InternalError(), buf, 0L);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
977 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
978
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
979 void GraalRuntime::set_option_helper(KlassHandle hotSpotOptionsClass, char* name, size_t name_len, Handle option, jchar spec, Handle stringValue, jlong primitiveValue) {
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
980 Thread* THREAD = Thread::current();
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
981 Handle name_handle;
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
982 if (name != NULL) {
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
983 if (strlen(name) > name_len) {
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
984 // Temporarily replace '=' with NULL to create the Java string for the option name
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
985 char save = name[name_len];
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
986 name[name_len] = '\0';
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
987 name_handle = java_lang_String::create_from_str(name, THREAD);
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
988 name[name_len] = '=';
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
989 if (HAS_PENDING_EXCEPTION) {
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
990 return;
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
991 }
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
992 } else {
16876
9d4c73b0646e graalRuntime: name_len shound be a size_t
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 16870
diff changeset
993 assert(strlen(name) == name_len, "must be");
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
994 name_handle = java_lang_String::create_from_str(name, CHECK);
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
995 }
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
996 }
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
997
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
998 TempNewSymbol setOption = SymbolTable::new_symbol("setOption", CHECK);
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
999 TempNewSymbol sig = SymbolTable::new_symbol("(Ljava/lang/String;Lcom/oracle/graal/options/OptionValue;CLjava/lang/String;J)V", CHECK);
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1000 JavaValue result(T_VOID);
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1001 JavaCallArguments args;
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
1002 args.push_oop(name_handle());
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1003 args.push_oop(option());
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1004 args.push_int(spec);
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1005 args.push_oop(stringValue());
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1006 args.push_long(primitiveValue);
16270
d56a09df1a1f implemented eager checking of Graal options (GRAAL-807)
Doug Simon <doug.simon@oracle.com>
parents: 16006
diff changeset
1007 JavaCalls::call_static(&result, hotSpotOptionsClass, setOption, sig, &args, CHECK);
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1008 }
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1009
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1010 Handle GraalRuntime::get_OptionValue(const char* declaringClass, const char* fieldName, const char* fieldSig, TRAPS) {
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1011 TempNewSymbol name = SymbolTable::new_symbol(declaringClass, CHECK_NH);
16395
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1012 Klass* klass = resolve_or_fail(name, CHECK_NH);
15870
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1013
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1014 // The class has been loaded so the field and signature should already be in the symbol
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1015 // table. If they're not there, the field doesn't exist.
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1016 TempNewSymbol fieldname = SymbolTable::probe(fieldName, (int)strlen(fieldName));
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1017 TempNewSymbol signame = SymbolTable::probe(fieldSig, (int)strlen(fieldSig));
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1018 if (fieldname == NULL || signame == NULL) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1019 THROW_MSG_(vmSymbols::java_lang_NoSuchFieldError(), (char*) fieldName, Handle());
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1020 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1021 // Make sure class is initialized before handing id's out to fields
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1022 klass->initialize(CHECK_NH);
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1023
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1024 fieldDescriptor fd;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1025 if (!InstanceKlass::cast(klass)->find_field(fieldname, signame, true, &fd)) {
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1026 THROW_MSG_(vmSymbols::java_lang_NoSuchFieldError(), (char*) fieldName, Handle());
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1027 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1028
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1029 Handle ret = klass->java_mirror()->obj_field(fd.offset());
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1030 return ret;
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1031 }
fe608a56e3f7 made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
Doug Simon <doug.simon@oracle.com>
parents: 15603
diff changeset
1032
15916
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1033 Handle GraalRuntime::create_Service(const char* name, TRAPS) {
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1034 TempNewSymbol kname = SymbolTable::new_symbol(name, CHECK_NH);
16395
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1035 Klass* k = resolve_or_fail(kname, CHECK_NH);
15916
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1036 instanceKlassHandle klass(THREAD, k);
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1037 klass->initialize(CHECK_NH);
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1038 klass->check_valid_for_instantiation(true, CHECK_NH);
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1039 JavaValue result(T_VOID);
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1040 instanceHandle service = klass->allocate_instance_handle(CHECK_NH);
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1041 JavaCalls::call_special(&result, service, klass, vmSymbols::object_initializer_name(), vmSymbols::void_method_signature(), THREAD);
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1042 return service;
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1043 }
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1044
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1045 void GraalRuntime::shutdown() {
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1046 if (_HotSpotGraalRuntime_instance != NULL) {
18303
ab47ef2f2207 disable blocking compilation requests once GraalRuntime::shutdown has been called
Doug Simon <doug.simon@oracle.com>
parents: 18227
diff changeset
1047 _shutdown_called = true;
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1048 JavaThread* THREAD = JavaThread::current();
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1049 HandleMark hm(THREAD);
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1050 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotGraalRuntime", CHECK_ABORT);
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1051 KlassHandle klass = load_required_class(name);
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1052 JavaValue result(T_VOID);
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1053 JavaCallArguments args;
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1054 args.push_oop(get_HotSpotGraalRuntime());
16428
78ddecd6255f added CHECK macros in uses of SymbolTable::new_symbol; added CHECK_ABORT macros for TRAPS functions that must abort the VM if they throw an exception
Doug Simon <doug.simon@oracle.com>
parents: 16399
diff changeset
1055 JavaCalls::call_special(&result, klass, vmSymbols::shutdown_method_name(), vmSymbols::void_method_signature(), &args, CHECK_ABORT);
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1056
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1057 JNIHandles::destroy_global(_HotSpotGraalRuntime_instance);
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1058 _HotSpotGraalRuntime_instance = NULL;
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1059 }
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1060 }
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1061
16273
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1062 void GraalRuntime::call_printStackTrace(Handle exception, Thread* thread) {
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1063 assert(exception->is_a(SystemDictionary::Throwable_klass()), "Throwable instance expected");
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1064 JavaValue result(T_VOID);
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1065 JavaCalls::call_virtual(&result,
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1066 exception,
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1067 KlassHandle(thread,
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1068 SystemDictionary::Throwable_klass()),
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1069 vmSymbols::printStackTrace_name(),
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1070 vmSymbols::void_method_signature(),
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1071 thread);
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1072 }
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1073
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1074 void GraalRuntime::abort_on_pending_exception(Handle exception, const char* message, bool dump_core) {
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1075 Thread* THREAD = Thread::current();
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1076 CLEAR_PENDING_EXCEPTION;
18043
f55f2d400797 Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 17319
diff changeset
1077 tty->print_raw_cr(message);
16273
d6ffc6164830 handle any exception raised during Graal option checking/parsing, not just those with a non-null message
Doug Simon <doug.simon@oracle.com>
parents: 16270
diff changeset
1078 call_printStackTrace(exception, THREAD);
16679
58622d6b1097 give all aborting threads a chance to print Graal related stack traces
Doug Simon <doug.simon@oracle.com>
parents: 16628
diff changeset
1079
58622d6b1097 give all aborting threads a chance to print Graal related stack traces
Doug Simon <doug.simon@oracle.com>
parents: 16628
diff changeset
1080 // Give other aborting threads to also print their stack traces.
58622d6b1097 give all aborting threads a chance to print Graal related stack traces
Doug Simon <doug.simon@oracle.com>
parents: 16628
diff changeset
1081 // This can be very useful when debugging class initialization
58622d6b1097 give all aborting threads a chance to print Graal related stack traces
Doug Simon <doug.simon@oracle.com>
parents: 16628
diff changeset
1082 // failures.
58622d6b1097 give all aborting threads a chance to print Graal related stack traces
Doug Simon <doug.simon@oracle.com>
parents: 16628
diff changeset
1083 os::sleep(THREAD, 200, false);
58622d6b1097 give all aborting threads a chance to print Graal related stack traces
Doug Simon <doug.simon@oracle.com>
parents: 16628
diff changeset
1084
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1085 vm_abort(dump_core);
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1086 }
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1087
16395
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1088 Klass* GraalRuntime::resolve_or_null(Symbol* name, TRAPS) {
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1089 return SystemDictionary::resolve_or_null(name, SystemDictionary::graal_loader(), Handle(), CHECK_NULL);
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1090 }
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1091
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1092 Klass* GraalRuntime::resolve_or_fail(Symbol* name, TRAPS) {
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1093 return SystemDictionary::resolve_or_fail(name, SystemDictionary::graal_loader(), Handle(), true, CHECK_NULL);
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1094 }
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1095
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1096 Klass* GraalRuntime::load_required_class(Symbol* name) {
16395
ad431bf0de07 added support to load classes from graal.jar with a separate class loader
Doug Simon <doug.simon@oracle.com>
parents: 16291
diff changeset
1097 Klass* klass = resolve_or_null(name, Thread::current());
16006
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1098 if (klass == NULL) {
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1099 tty->print_cr("Could not load class %s", name->as_C_string());
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1100 vm_abort(false);
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1101 }
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1102 return klass;
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1103 }
66a9286203a2 decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents: 15916
diff changeset
1104
15916
6aa352b260f4 removed use of ServiceLoader in runtime initialization
Doug Simon <doug.simon@oracle.com>
parents: 15894
diff changeset
1105 #include "graalRuntime.inline.hpp"