Mercurial > hg > graal-compiler
annotate src/share/vm/graal/graalCompilerToVM.cpp @ 18319:56cc1a799a60
(re)converted Value to an interface
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 07 Nov 2014 22:00:11 +0100 |
parents | a8cff27ca2e1 |
children | 6484e5c068c7 |
rev | line source |
---|---|
2516
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
1 /* |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
4 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
7 * published by the Free Software Foundation. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
8 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
13 * accompanied this code). |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
14 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
18 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
21 * questions. |
1410
b30a2cd5e3a2
Added methods to c1x_VMExits.cpp
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1406
diff
changeset
|
22 */ |
b30a2cd5e3a2
Added methods to c1x_VMExits.cpp
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1406
diff
changeset
|
23 |
2045
9c96c873c42b
Fix includes to match new hotspot mechanism.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1942
diff
changeset
|
24 #include "precompiled.hpp" |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
25 #include "code/scopeDesc.hpp" |
6559
d5f7e737827f
fixed compilation issues on Solaris. When using SunStudio compiler, Solaris build with DONT_USE_PRECOMPILED_HEADER
Laurent Daynes <Laurent.Daynes@oracle.com>
parents:
6549
diff
changeset
|
26 #include "memory/oopFactory.hpp" |
d5f7e737827f
fixed compilation issues on Solaris. When using SunStudio compiler, Solaris build with DONT_USE_PRECOMPILED_HEADER
Laurent Daynes <Laurent.Daynes@oracle.com>
parents:
6549
diff
changeset
|
27 #include "oops/generateOopMap.hpp" |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
28 #include "oops/fieldStreams.hpp" |
12356
359f7e70ae7f
Reduce HotSpot diff and fix previous merge
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11852
diff
changeset
|
29 #include "runtime/fieldDescriptor.hpp" |
6559
d5f7e737827f
fixed compilation issues on Solaris. When using SunStudio compiler, Solaris build with DONT_USE_PRECOMPILED_HEADER
Laurent Daynes <Laurent.Daynes@oracle.com>
parents:
6549
diff
changeset
|
30 #include "runtime/javaCalls.hpp" |
7125
1baf7f1e3f23
decoupled C++ Graal runtime from C1
Doug Simon <doug.simon@oracle.com>
parents:
7094
diff
changeset
|
31 #include "graal/graalRuntime.hpp" |
3619
5e9645341ec3
support for new RiRuntime features: add code without making it the default for the method, executing Java tasks on the compile thread, communicate nmethod reference to Java code as HotSpotCompiledMethod
Lukas Stadler <lukas.stadler@jku.at>
parents:
3587
diff
changeset
|
32 #include "compiler/compileBroker.hpp" |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
33 #include "compiler/compilerOracle.hpp" |
7735 | 34 #include "compiler/disassembler.hpp" |
4222
8e2985cdaaa5
Renaming of VMExits and VMEntries part 3.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4220
diff
changeset
|
35 #include "graal/graalCompilerToVM.hpp" |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
36 #include "graal/graalCompiler.hpp" |
3637
ff6a991c6e3c
Use GraalEnv to look up types.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3636
diff
changeset
|
37 #include "graal/graalEnv.hpp" |
2891
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
38 #include "graal/graalJavaAccess.hpp" |
75a99b4f1c98
Rebranded C++ part from C1X to Graal.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2890
diff
changeset
|
39 #include "graal/graalCodeInstaller.hpp" |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
40 #include "gc_implementation/g1/heapRegion.hpp" |
12559
ae412befde21
read HotSpotVMConfig fields from HotSpot's vmStructs via annotations
twisti
parents:
12535
diff
changeset
|
41 #include "runtime/javaCalls.hpp" |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
42 #include "runtime/deoptimization.hpp" |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
43 #include "runtime/vframe.hpp" |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
44 #include "runtime/vframe_hp.hpp" |
12559
ae412befde21
read HotSpotVMConfig fields from HotSpot's vmStructs via annotations
twisti
parents:
12535
diff
changeset
|
45 #include "runtime/vmStructs.hpp" |
13819
49db2c1e3bee
added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents:
13796
diff
changeset
|
46 #include "runtime/gpu.hpp" |
6559
d5f7e737827f
fixed compilation issues on Solaris. When using SunStudio compiler, Solaris build with DONT_USE_PRECOMPILED_HEADER
Laurent Daynes <Laurent.Daynes@oracle.com>
parents:
6549
diff
changeset
|
47 |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
48 |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
49 // Entry to native method implementation that transitions current thread to '_thread_in_vm'. |
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
50 #define C2V_VMENTRY(result_type, name, signature) \ |
6588
b89b5038ad7e
removed _'s from method names in CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
6559
diff
changeset
|
51 JNIEXPORT result_type JNICALL c2v_ ## name signature { \ |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
52 TRACE_graal_3("CompilerToVM::" #name); \ |
7126
ce248dc0a656
removed all Graal modifications to ci and c1
Doug Simon <doug.simon@oracle.com>
parents:
7125
diff
changeset
|
53 GRAAL_VM_ENTRY_MARK; \ |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
54 |
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
55 #define C2V_END } |
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
56 |
14106 | 57 extern "C" { |
58 extern VMStructEntry* gHotSpotVMStructs; | |
59 extern uint64_t gHotSpotVMStructEntryTypeNameOffset; | |
60 extern uint64_t gHotSpotVMStructEntryFieldNameOffset; | |
61 extern uint64_t gHotSpotVMStructEntryTypeStringOffset; | |
62 extern uint64_t gHotSpotVMStructEntryIsStaticOffset; | |
63 extern uint64_t gHotSpotVMStructEntryOffsetOffset; | |
64 extern uint64_t gHotSpotVMStructEntryAddressOffset; | |
65 extern uint64_t gHotSpotVMStructEntryArrayStride; | |
66 | |
67 extern VMTypeEntry* gHotSpotVMTypes; | |
68 extern uint64_t gHotSpotVMTypeEntryTypeNameOffset; | |
69 extern uint64_t gHotSpotVMTypeEntrySuperclassNameOffset; | |
70 extern uint64_t gHotSpotVMTypeEntryIsOopTypeOffset; | |
71 extern uint64_t gHotSpotVMTypeEntryIsIntegerTypeOffset; | |
72 extern uint64_t gHotSpotVMTypeEntryIsUnsignedOffset; | |
73 extern uint64_t gHotSpotVMTypeEntrySizeOffset; | |
74 extern uint64_t gHotSpotVMTypeEntryArrayStride; | |
75 | |
76 extern VMIntConstantEntry* gHotSpotVMIntConstants; | |
77 extern uint64_t gHotSpotVMIntConstantEntryNameOffset; | |
78 extern uint64_t gHotSpotVMIntConstantEntryValueOffset; | |
79 extern uint64_t gHotSpotVMIntConstantEntryArrayStride; | |
80 | |
81 extern VMLongConstantEntry* gHotSpotVMLongConstants; | |
82 extern uint64_t gHotSpotVMLongConstantEntryNameOffset; | |
83 extern uint64_t gHotSpotVMLongConstantEntryValueOffset; | |
84 extern uint64_t gHotSpotVMLongConstantEntryArrayStride; | |
85 } | |
86 | |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
87 C2V_VMENTRY(void, initializeConfiguration, (JNIEnv *, jobject, jobject config)) |
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
88 VMStructs::initHotSpotVMConfig(JNIHandles::resolve(config)); |
14106 | 89 C2V_END |
90 | |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
91 C2V_VMENTRY(jbyteArray, getBytecode, (JNIEnv *, jobject, jlong metaspace_method)) |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
92 methodHandle method = asMethod(metaspace_method); |
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
93 ResourceMark rm; |
8945
7ef66078d837
add basic invokedynamic support
Andreas Woess <andreas.woess@jku.at>
parents:
8613
diff
changeset
|
94 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
95 int code_size = method->code_size(); |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
96 typeArrayOop reconstituted_code = oopFactory::new_byteArray(code_size, CHECK_NULL); |
11513
8d4e5e08d83f
Fix graalCompilerToVM::initializeBytecode regarding bytecode rewritting for methods that are not rewritten.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11381
diff
changeset
|
97 |
11519
a3b39ab7c453
Make is_rewritten a guarantee in initializeBytecode
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11513
diff
changeset
|
98 guarantee(method->method_holder()->is_rewritten(), "Method's holder should be rewritten"); |
11513
8d4e5e08d83f
Fix graalCompilerToVM::initializeBytecode regarding bytecode rewritting for methods that are not rewritten.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11381
diff
changeset
|
99 // iterate over all bytecodes and replace non-Java bytecodes |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
100 |
11513
8d4e5e08d83f
Fix graalCompilerToVM::initializeBytecode regarding bytecode rewritting for methods that are not rewritten.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11381
diff
changeset
|
101 for (BytecodeStream s(method); s.next() != Bytecodes::_illegal; ) { |
8d4e5e08d83f
Fix graalCompilerToVM::initializeBytecode regarding bytecode rewritting for methods that are not rewritten.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11381
diff
changeset
|
102 Bytecodes::Code code = s.code(); |
8d4e5e08d83f
Fix graalCompilerToVM::initializeBytecode regarding bytecode rewritting for methods that are not rewritten.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11381
diff
changeset
|
103 Bytecodes::Code raw_code = s.raw_code(); |
8d4e5e08d83f
Fix graalCompilerToVM::initializeBytecode regarding bytecode rewritting for methods that are not rewritten.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11381
diff
changeset
|
104 int bci = s.bci(); |
8d4e5e08d83f
Fix graalCompilerToVM::initializeBytecode regarding bytecode rewritting for methods that are not rewritten.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11381
diff
changeset
|
105 int len = s.instruction_size(); |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
106 |
11513
8d4e5e08d83f
Fix graalCompilerToVM::initializeBytecode regarding bytecode rewritting for methods that are not rewritten.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11381
diff
changeset
|
107 // Restore original byte code. |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
108 reconstituted_code->byte_at_put(bci, (jbyte) (s.is_wide()? Bytecodes::_wide : code)); |
11513
8d4e5e08d83f
Fix graalCompilerToVM::initializeBytecode regarding bytecode rewritting for methods that are not rewritten.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11381
diff
changeset
|
109 if (len > 1) { |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
110 memcpy(reconstituted_code->byte_at_addr(bci + 1), s.bcp()+1, len-1); |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
111 } |
10567 | 112 |
11519
a3b39ab7c453
Make is_rewritten a guarantee in initializeBytecode
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
11513
diff
changeset
|
113 if (len > 1) { |
10567 | 114 // Restore the big-endian constant pool indexes. |
115 // Cf. Rewriter::scan_method | |
116 switch (code) { | |
117 case Bytecodes::_getstatic: | |
118 case Bytecodes::_putstatic: | |
119 case Bytecodes::_getfield: | |
120 case Bytecodes::_putfield: | |
121 case Bytecodes::_invokevirtual: | |
122 case Bytecodes::_invokespecial: | |
123 case Bytecodes::_invokestatic: | |
124 case Bytecodes::_invokeinterface: | |
125 case Bytecodes::_invokehandle: { | |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
126 int cp_index = Bytes::get_native_u2((address) reconstituted_code->byte_at_addr(bci + 1)); |
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
127 Bytes::put_Java_u2((address) reconstituted_code->byte_at_addr(bci + 1), (u2) cp_index); |
10567 | 128 break; |
129 } | |
130 | |
131 case Bytecodes::_invokedynamic: | |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
132 int cp_index = Bytes::get_native_u4((address) reconstituted_code->byte_at_addr(bci + 1)); |
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
133 Bytes::put_Java_u4((address) reconstituted_code->byte_at_addr(bci + 1), (u4) cp_index); |
10567 | 134 break; |
135 } | |
136 | |
137 // Not all ldc byte code are rewritten. | |
138 switch (raw_code) { | |
139 case Bytecodes::_fast_aldc: { | |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
140 int cpc_index = reconstituted_code->byte_at(bci + 1) & 0xff; |
10567 | 141 int cp_index = method->constants()->object_to_cp_index(cpc_index); |
142 assert(cp_index < method->constants()->length(), "sanity check"); | |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
143 reconstituted_code->byte_at_put(bci + 1, (jbyte) cp_index); |
10567 | 144 break; |
145 } | |
146 | |
147 case Bytecodes::_fast_aldc_w: { | |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
148 int cpc_index = Bytes::get_native_u2((address) reconstituted_code->byte_at_addr(bci + 1)); |
10567 | 149 int cp_index = method->constants()->object_to_cp_index(cpc_index); |
150 assert(cp_index < method->constants()->length(), "sanity check"); | |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
151 Bytes::put_Java_u2((address) reconstituted_code->byte_at_addr(bci + 1), (u2) cp_index); |
10567 | 152 break; |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
153 } |
5154
ae72dd38eeb1
bugfix, parallel GC seems stable
Christian Haeubl <christian.haeubl@oracle.com>
parents:
5150
diff
changeset
|
154 } |
5150
fdd9dd4508fa
some GC fixes
Christian Haeubl <christian.haeubl@oracle.com>
parents:
5130
diff
changeset
|
155 } |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
156 } |
5150
fdd9dd4508fa
some GC fixes
Christian Haeubl <christian.haeubl@oracle.com>
parents:
5130
diff
changeset
|
157 |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
158 return (jbyteArray) JNIHandles::make_local(reconstituted_code); |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
159 C2V_END |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
160 |
14105 | 161 C2V_VMENTRY(jint, exceptionTableLength, (JNIEnv *, jobject, jlong metaspace_method)) |
162 ResourceMark rm; | |
163 methodHandle method = asMethod(metaspace_method); | |
164 return method->exception_table_length(); | |
165 C2V_END | |
166 | |
13305
a63d65b682a8
moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents:
13295
diff
changeset
|
167 C2V_VMENTRY(jlong, exceptionTableStart, (JNIEnv *, jobject, jlong metaspace_method)) |
3650
0e8a2a629afb
Pass-by compilation broker.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3649
diff
changeset
|
168 ResourceMark rm; |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
169 methodHandle method = asMethod(metaspace_method); |
13305
a63d65b682a8
moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents:
13295
diff
changeset
|
170 assert(method->exception_table_length() != 0, "should be handled in Java code"); |
a63d65b682a8
moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents:
13295
diff
changeset
|
171 return (jlong) (address) method->exception_table_start(); |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
172 C2V_END |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
173 |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
174 C2V_VMENTRY(jint, hasBalancedMonitors, (JNIEnv *, jobject, jlong metaspace_method)) |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
175 // Analyze the method to see if monitors are used properly. |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
176 methodHandle method(THREAD, asMethod(metaspace_method)); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
177 { |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
178 EXCEPTION_MARK; |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
179 ResourceMark rm(THREAD); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
180 GeneratePairingInfo gpi(method); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
181 gpi.compute_map(CATCH); |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
182 if (!gpi.monitor_safe()) { |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
183 return false; |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
184 } |
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
185 method->set_guaranteed_monitor_matching(); |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
186 } |
3559
f70a4cc629e7
remove some dependencies on ci interface
Lukas Stadler <lukas.stadler@jku.at>
parents:
3555
diff
changeset
|
187 return true; |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
188 C2V_END |
1433
efba53f86c4f
various fixes and enhancements
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1432
diff
changeset
|
189 |
13264
b23cbfb4366a
merged CompilerToVM.getMetaspaceConstructor into CompilerToVM.getMetaspaceMethod
twisti
parents:
13263
diff
changeset
|
190 C2V_VMENTRY(jlong, getMetaspaceMethod, (JNIEnv *, jobject, jclass holder_handle, jint slot)) |
b23cbfb4366a
merged CompilerToVM.getMetaspaceConstructor into CompilerToVM.getMetaspaceMethod
twisti
parents:
13263
diff
changeset
|
191 oop java_class = JNIHandles::resolve(holder_handle); |
b23cbfb4366a
merged CompilerToVM.getMetaspaceConstructor into CompilerToVM.getMetaspaceMethod
twisti
parents:
13263
diff
changeset
|
192 Klass* holder = java_lang_Class::as_Klass(java_class); |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
193 methodHandle method = InstanceKlass::cast(holder)->method_with_idnum(slot); |
7044
34753b057324
added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents:
7037
diff
changeset
|
194 return (jlong) (address) method(); |
34753b057324
added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents:
7037
diff
changeset
|
195 } |
34753b057324
added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents:
7037
diff
changeset
|
196 |
16184
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16089
diff
changeset
|
197 C2V_VMENTRY(jlong, findUniqueConcreteMethod, (JNIEnv *, jobject, jlong metaspace_klass, jlong metaspace_method)) |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
198 methodHandle method = asMethod(metaspace_method); |
16184
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16089
diff
changeset
|
199 KlassHandle holder = asKlass(metaspace_klass); |
13373
430c9f08728d
moved most CompilerToVM.getUniqueConcreteMethod logic up to Java and replace getUniqueConcreteMethod with findUniqueConcreteMethod
twisti
parents:
13364
diff
changeset
|
200 assert(!holder->is_interface(), "should be handled in Java code"); |
430c9f08728d
moved most CompilerToVM.getUniqueConcreteMethod logic up to Java and replace getUniqueConcreteMethod with findUniqueConcreteMethod
twisti
parents:
13364
diff
changeset
|
201 ResourceMark rm; |
430c9f08728d
moved most CompilerToVM.getUniqueConcreteMethod logic up to Java and replace getUniqueConcreteMethod with findUniqueConcreteMethod
twisti
parents:
13364
diff
changeset
|
202 MutexLocker locker(Compile_lock); |
430c9f08728d
moved most CompilerToVM.getUniqueConcreteMethod logic up to Java and replace getUniqueConcreteMethod with findUniqueConcreteMethod
twisti
parents:
13364
diff
changeset
|
203 Method* ucm = Dependencies::find_unique_concrete_method(holder(), method()); |
430c9f08728d
moved most CompilerToVM.getUniqueConcreteMethod logic up to Java and replace getUniqueConcreteMethod with findUniqueConcreteMethod
twisti
parents:
13364
diff
changeset
|
204 return (jlong) (address) ucm; |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
205 C2V_END |
2049
7e09ea4a8f36
Added leaf method assumptions.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2048
diff
changeset
|
206 |
13478
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13461
diff
changeset
|
207 C2V_VMENTRY(jlong, getKlassImplementor, (JNIEnv *, jobject, jlong metaspace_klass)) |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13461
diff
changeset
|
208 InstanceKlass* klass = (InstanceKlass*) asKlass(metaspace_klass); |
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13461
diff
changeset
|
209 return (jlong) (address) klass->implementor(); |
7226 | 210 C2V_END |
211 | |
14717 | 212 C2V_VMENTRY(jboolean, methodIsIgnoredBySecurityStackWalk,(JNIEnv *, jobject, jlong metaspace_method)) |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
213 methodHandle method = asMethod(metaspace_method); |
14717 | 214 return method->is_ignored_by_security_stack_walk(); |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
215 C2V_END |
2926
0e3ec0a4eda4
RiTypeProfile information and invocation counters for RiMethods
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
216 |
13953
d587baa55dd7
Add shouldBeInlined method to ResolvedJavaMethod, implement it for HotSpot and use it in the inlining phase
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13895
diff
changeset
|
217 C2V_VMENTRY(jboolean, canInlineMethod,(JNIEnv *, jobject, jlong metaspace_method)) |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
218 methodHandle method = asMethod(metaspace_method); |
13953
d587baa55dd7
Add shouldBeInlined method to ResolvedJavaMethod, implement it for HotSpot and use it in the inlining phase
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13895
diff
changeset
|
219 return !method->is_not_compilable() && !CompilerOracle::should_not_inline(method) && !method->dont_inline(); |
d587baa55dd7
Add shouldBeInlined method to ResolvedJavaMethod, implement it for HotSpot and use it in the inlining phase
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13895
diff
changeset
|
220 C2V_END |
d587baa55dd7
Add shouldBeInlined method to ResolvedJavaMethod, implement it for HotSpot and use it in the inlining phase
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13895
diff
changeset
|
221 |
d587baa55dd7
Add shouldBeInlined method to ResolvedJavaMethod, implement it for HotSpot and use it in the inlining phase
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13895
diff
changeset
|
222 C2V_VMENTRY(jboolean, shouldInlineMethod,(JNIEnv *, jobject, jlong metaspace_method)) |
d587baa55dd7
Add shouldBeInlined method to ResolvedJavaMethod, implement it for HotSpot and use it in the inlining phase
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13895
diff
changeset
|
223 methodHandle method = asMethod(metaspace_method); |
d587baa55dd7
Add shouldBeInlined method to ResolvedJavaMethod, implement it for HotSpot and use it in the inlining phase
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13895
diff
changeset
|
224 return CompilerOracle::should_inline(method) || method->force_inline(); |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
225 C2V_END |
4441
4e3aaf14cbc6
fixed graal to hotspot
Christian Haeubl <christian.haeubl@oracle.com>
parents:
4439
diff
changeset
|
226 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
227 C2V_VMENTRY(jlong, lookupType, (JNIEnv*, jobject, jstring jname, jclass accessing_class, jboolean resolve)) |
3650
0e8a2a629afb
Pass-by compilation broker.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3649
diff
changeset
|
228 ResourceMark rm; |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
229 Handle name = JNIHandles::resolve(jname); |
13483
37ec2cabf397
moved JavaType creation in CompilerToVM.lookupType into Java
twisti
parents:
13479
diff
changeset
|
230 Symbol* class_name = java_lang_String::as_symbol(name, THREAD); |
37ec2cabf397
moved JavaType creation in CompilerToVM.lookupType into Java
twisti
parents:
13479
diff
changeset
|
231 assert(class_name != NULL, "name to symbol creation failed"); |
37ec2cabf397
moved JavaType creation in CompilerToVM.lookupType into Java
twisti
parents:
13479
diff
changeset
|
232 assert(class_name->size() > 1, "primitive types should be handled in Java code"); |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
233 |
13483
37ec2cabf397
moved JavaType creation in CompilerToVM.lookupType into Java
twisti
parents:
13479
diff
changeset
|
234 Klass* resolved_klass = NULL; |
37ec2cabf397
moved JavaType creation in CompilerToVM.lookupType into Java
twisti
parents:
13479
diff
changeset
|
235 Handle class_loader; |
37ec2cabf397
moved JavaType creation in CompilerToVM.lookupType into Java
twisti
parents:
13479
diff
changeset
|
236 Handle protection_domain; |
16492
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16405
diff
changeset
|
237 if (JNIHandles::resolve(accessing_class) == NULL) { |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16405
diff
changeset
|
238 THROW_(vmSymbols::java_lang_NullPointerException(), 0L); |
13258
fdd6ef90d66d
move HotSpotResolvedPrimitiveType's from VMToCompilerImpl to HotSpotGraalRuntime
twisti
parents:
13254
diff
changeset
|
239 } |
16492
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16405
diff
changeset
|
240 Klass* accessing_klass = java_lang_Class::as_Klass(JNIHandles::resolve(accessing_class)); |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16405
diff
changeset
|
241 class_loader = accessing_klass->class_loader(); |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16405
diff
changeset
|
242 protection_domain = accessing_klass->protection_domain(); |
8853b9304083
made type resolution require an accessing class context
Doug Simon <doug.simon@oracle.com>
parents:
16405
diff
changeset
|
243 |
13258
fdd6ef90d66d
move HotSpotResolvedPrimitiveType's from VMToCompilerImpl to HotSpotGraalRuntime
twisti
parents:
13254
diff
changeset
|
244 |
14117
2b2f0022900f
removed unnecessary lookupKlassByName method
Doug Simon <doug.simon@oracle.com>
parents:
14107
diff
changeset
|
245 if (resolve) { |
13483
37ec2cabf397
moved JavaType creation in CompilerToVM.lookupType into Java
twisti
parents:
13479
diff
changeset
|
246 resolved_klass = SystemDictionary::resolve_or_fail(class_name, class_loader, protection_domain, true, THREAD); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
247 } else { |
13483
37ec2cabf397
moved JavaType creation in CompilerToVM.lookupType into Java
twisti
parents:
13479
diff
changeset
|
248 resolved_klass = SystemDictionary::resolve_or_null(class_name, class_loader, protection_domain, THREAD); |
13258
fdd6ef90d66d
move HotSpotResolvedPrimitiveType's from VMToCompilerImpl to HotSpotGraalRuntime
twisti
parents:
13254
diff
changeset
|
249 } |
7027
58dbea9fb973
CompilerToVM.lookupType() now fails with an exception if eagerResolve is true and resolution fails
Doug Simon <doug.simon@oracle.com>
parents:
7019
diff
changeset
|
250 |
13483
37ec2cabf397
moved JavaType creation in CompilerToVM.lookupType into Java
twisti
parents:
13479
diff
changeset
|
251 return (jlong) (address) resolved_klass; |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
252 C2V_END |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
253 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
254 C2V_VMENTRY(jobject, resolveConstantInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
13259
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
255 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; |
14529 | 256 oop result = cp->resolve_constant_at(index, CHECK_NULL); |
257 return JNIHandles::make_local(THREAD, result); | |
258 C2V_END | |
259 | |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
260 C2V_VMENTRY(jobject, resolvePossiblyCachedConstantInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
14529 | 261 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; |
262 oop result = cp->resolve_possibly_cached_constant_at(index, CHECK_NULL); | |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
263 return JNIHandles::make_local(THREAD, result); |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
264 C2V_END |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
265 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
266 C2V_VMENTRY(jint, lookupNameAndTypeRefIndexInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
14093 | 267 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
268 return cp->name_and_type_ref_index_at(index); | |
269 C2V_END | |
270 | |
15968
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
271 C2V_VMENTRY(jobject, lookupNameRefInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
14093 | 272 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
15968
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
273 Handle sym = java_lang_String::create_from_symbol(cp->name_ref_at(index), CHECK_NULL); |
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
274 return JNIHandles::make_local(THREAD, sym()); |
14093 | 275 C2V_END |
276 | |
15968
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
277 C2V_VMENTRY(jobject, lookupSignatureRefInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
14093 | 278 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
15968
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
279 Handle sym = java_lang_String::create_from_symbol(cp->signature_ref_at(index), CHECK_NULL); |
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
280 return JNIHandles::make_local(THREAD, sym()); |
14093 | 281 C2V_END |
282 | |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
283 C2V_VMENTRY(jint, lookupKlassRefIndexInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
14093 | 284 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
285 return cp->klass_ref_index_at(index); | |
286 C2V_END | |
287 | |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
288 C2V_VMENTRY(jlong, constantPoolKlassAt, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
14530
d87b84dade7d
moved CompilerToVM.loadReferencedTypeInPool logic into Java
twisti
parents:
14529
diff
changeset
|
289 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; |
d87b84dade7d
moved CompilerToVM.loadReferencedTypeInPool logic into Java
twisti
parents:
14529
diff
changeset
|
290 return (jlong) (address) cp->klass_at(index, THREAD); |
d87b84dade7d
moved CompilerToVM.loadReferencedTypeInPool logic into Java
twisti
parents:
14529
diff
changeset
|
291 C2V_END |
d87b84dade7d
moved CompilerToVM.loadReferencedTypeInPool logic into Java
twisti
parents:
14529
diff
changeset
|
292 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
293 C2V_VMENTRY(jlong, lookupKlassInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode)) |
14093 | 294 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
295 KlassHandle loading_klass(cp->pool_holder()); | |
296 bool is_accessible = false; | |
297 KlassHandle klass = GraalEnv::get_klass_by_index(cp, index, is_accessible, loading_klass); | |
298 if (klass.is_null()) { | |
299 // We have to lock the cpool to keep the oop from being resolved | |
300 // while we are accessing it. | |
301 MonitorLockerEx ml(cp->lock()); | |
302 constantTag tag = cp->tag_at(index); | |
303 if (tag.is_klass()) { | |
304 // The klass has been inserted into the constant pool | |
305 // very recently. | |
306 return (jlong) CompilerToVM::tag_pointer(cp->resolved_klass_at(index)); | |
307 } else if (tag.is_symbol()) { | |
308 return (jlong) CompilerToVM::tag_pointer(cp->symbol_at(index)); | |
309 } else { | |
310 assert(cp->tag_at(index).is_unresolved_klass(), "wrong tag"); | |
311 return (jlong) CompilerToVM::tag_pointer(cp->unresolved_klass_at(index)); | |
312 } | |
313 } | |
314 return (jlong) CompilerToVM::tag_pointer(klass()); | |
315 C2V_END | |
316 | |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
317 C2V_VMENTRY(jobject, lookupAppendixInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
13259
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
318 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
319 oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, index); |
8945
7ef66078d837
add basic invokedynamic support
Andreas Woess <andreas.woess@jku.at>
parents:
8613
diff
changeset
|
320 return JNIHandles::make_local(THREAD, appendix_oop); |
7ef66078d837
add basic invokedynamic support
Andreas Woess <andreas.woess@jku.at>
parents:
8613
diff
changeset
|
321 C2V_END |
7ef66078d837
add basic invokedynamic support
Andreas Woess <andreas.woess@jku.at>
parents:
8613
diff
changeset
|
322 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
323 C2V_VMENTRY(jlong, lookupMethodInPool, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode)) |
13259
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
324 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
3670
f198b24093f3
put back in thread transitions.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3669
diff
changeset
|
325 instanceKlassHandle pool_holder(cp->pool_holder()); |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
326 Bytecodes::Code bc = (Bytecodes::Code) (((int) opcode) & 0xFF); |
14052
361acb279104
moved to-constant-pool-index conversion up to Java
twisti
parents:
14012
diff
changeset
|
327 methodHandle method = GraalEnv::get_method_by_index(cp, index, bc, pool_holder); |
14093 | 328 return (jlong) (address) method(); |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
329 C2V_END |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
330 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
331 C2V_VMENTRY(jint, constantPoolRemapInstructionOperandFromCache, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
13259
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
332 ConstantPool* cp = (ConstantPool*) metaspace_constant_pool; |
14530
d87b84dade7d
moved CompilerToVM.loadReferencedTypeInPool logic into Java
twisti
parents:
14529
diff
changeset
|
333 return cp->remap_instruction_operand_from_cache(index); |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
334 C2V_END |
3577
96c40b338c1a
Added new method that loads and initializes a class that is referenced by a cp entry.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3572
diff
changeset
|
335 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
336 C2V_VMENTRY(jlong, resolveField, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index, jbyte opcode, jlongArray info_handle)) |
3650
0e8a2a629afb
Pass-by compilation broker.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3649
diff
changeset
|
337 ResourceMark rm; |
13259
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
338 constantPoolHandle cp = (ConstantPool*) metaspace_constant_pool; |
14093 | 339 Bytecodes::Code code = (Bytecodes::Code)(((int) opcode) & 0xFF); |
340 fieldDescriptor result; | |
341 LinkResolver::resolve_field_access(result, cp, index, Bytecodes::java_code(code), true, false, CHECK_0); | |
14069
2f37b0e442fe
removed remaining VMToCompiler calls for allocating Graal API objects
Doug Simon <doug.simon@oracle.com>
parents:
14052
diff
changeset
|
342 typeArrayOop info = (typeArrayOop) JNIHandles::resolve(info_handle); |
14093 | 343 assert(info != NULL && info->length() == 2, "must be"); |
344 info->long_at_put(0, (jlong) result.access_flags().as_int()); | |
345 info->long_at_put(1, (jlong) result.offset()); | |
346 return (jlong) (address) result.field_holder(); | |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
347 C2V_END |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
348 |
15725
ef6b8d1898e6
Add resolved receiver type to ResolvedJavaMethod.isInVirtualMethodTable in order to be able to do vtable-calls for miranda and default methods
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15722
diff
changeset
|
349 C2V_VMENTRY(jint, getVtableIndexForInterface, (JNIEnv *, jobject, jlong metaspace_klass, jlong metaspace_method)) |
ef6b8d1898e6
Add resolved receiver type to ResolvedJavaMethod.isInVirtualMethodTable in order to be able to do vtable-calls for miranda and default methods
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15722
diff
changeset
|
350 Klass* klass = (Klass*) metaspace_klass; |
ef6b8d1898e6
Add resolved receiver type to ResolvedJavaMethod.isInVirtualMethodTable in order to be able to do vtable-calls for miranda and default methods
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15722
diff
changeset
|
351 Method* method = (Method*) metaspace_method; |
15784
fb530b9fa474
ResolvedJavaType.resolveMethod: fix javadoc, add assert in native code. update changelog
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15726
diff
changeset
|
352 assert(!klass->is_interface(), ""); |
15725
ef6b8d1898e6
Add resolved receiver type to ResolvedJavaMethod.isInVirtualMethodTable in order to be able to do vtable-calls for miranda and default methods
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15722
diff
changeset
|
353 return LinkResolver::vtable_index_of_interface_method(klass, method); |
ef6b8d1898e6
Add resolved receiver type to ResolvedJavaMethod.isInVirtualMethodTable in order to be able to do vtable-calls for miranda and default methods
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15722
diff
changeset
|
354 C2V_END |
ef6b8d1898e6
Add resolved receiver type to ResolvedJavaMethod.isInVirtualMethodTable in order to be able to do vtable-calls for miranda and default methods
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15722
diff
changeset
|
355 |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
356 C2V_VMENTRY(jlong, resolveMethod, (JNIEnv *, jobject, jlong metaspace_klass_receiver, jlong metaspace_method, jlong metaspace_klass_caller)) |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
357 Klass* recv_klass = (Klass*) metaspace_klass_receiver; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
358 Klass* caller_klass = (Klass*) metaspace_klass_caller; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
359 Method* method = (Method*) metaspace_method; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
360 |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
361 if (recv_klass->oop_is_array() || (InstanceKlass::cast(recv_klass)->is_linked())) { |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
362 Klass* holder_klass = method->method_holder(); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
363 Symbol* method_name = method->name(); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
364 Symbol* method_signature = method->signature(); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
365 |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
366 |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
367 if (holder_klass->is_interface()) { |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
368 // do link-time resolution to check all access rules. |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
369 methodHandle resolved_method; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
370 LinkResolver::linktime_resolve_interface_method(resolved_method, holder_klass, method_name, method_signature, caller_klass, true, CHECK_AND_CLEAR_0); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
371 if (resolved_method->is_private()) { |
16089
8d164bec9807
Changed (jlong) NULL to (jlong) (address) NULL to remove warning that cause build failures on old version of gcc (4.1.2 as used on Oracle Linux Server 5.8).
Laurent Daynes <Laurent.Daynes@oracle.com>
parents:
16006
diff
changeset
|
372 return (jlong) (address) NULL; |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
373 } |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
374 assert(recv_klass->is_subtype_of(holder_klass), ""); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
375 // do actual lookup |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
376 methodHandle sel_method; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
377 LinkResolver::lookup_instance_method_in_klasses(sel_method, recv_klass, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
378 resolved_method->name(), |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
379 resolved_method->signature(), CHECK_AND_CLEAR_0); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
380 return (jlong) (address) sel_method(); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
381 } else { |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
382 // do link-time resolution to check all access rules. |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
383 methodHandle resolved_method; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
384 LinkResolver::linktime_resolve_virtual_method(resolved_method, holder_klass, method_name, method_signature, caller_klass, true, CHECK_AND_CLEAR_0); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
385 // do actual lookup (see LinkResolver::runtime_resolve_virtual_method) |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
386 int vtable_index = Method::invalid_vtable_index; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
387 Method* selected_method; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
388 |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
389 if (resolved_method->method_holder()->is_interface()) { // miranda method |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
390 vtable_index = LinkResolver::vtable_index_of_interface_method(holder_klass, resolved_method); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
391 assert(vtable_index >= 0 , "we should have valid vtable index at this point"); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
392 |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
393 InstanceKlass* inst = InstanceKlass::cast(recv_klass); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
394 selected_method = inst->method_at_vtable(vtable_index); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
395 } else { |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
396 // at this point we are sure that resolved_method is virtual and not |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
397 // a miranda method; therefore, it must have a valid vtable index. |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
398 assert(!resolved_method->has_itable_index(), ""); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
399 vtable_index = resolved_method->vtable_index(); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
400 // We could get a negative vtable_index for final methods, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
401 // because as an optimization they are they are never put in the vtable, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
402 // unless they override an existing method. |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
403 // If we do get a negative, it means the resolved method is the the selected |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
404 // method, and it can never be changed by an override. |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
405 if (vtable_index == Method::nonvirtual_vtable_index) { |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
406 assert(resolved_method->can_be_statically_bound(), "cannot override this method"); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
407 selected_method = resolved_method(); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
408 } else { |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
409 // recv_klass might be an arrayKlassOop but all vtables start at |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
410 // the same place. The cast is to avoid virtual call and assertion. |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
411 InstanceKlass* inst = (InstanceKlass*)recv_klass; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
412 selected_method = inst->method_at_vtable(vtable_index); |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
413 } |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
414 } |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
415 return (jlong) (address) selected_method; |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
416 } |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
417 } |
16089
8d164bec9807
Changed (jlong) NULL to (jlong) (address) NULL to remove warning that cause build failures on old version of gcc (4.1.2 as used on Oracle Linux Server 5.8).
Laurent Daynes <Laurent.Daynes@oracle.com>
parents:
16006
diff
changeset
|
418 return (jlong) (address) NULL; |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
419 C2V_END |
1414
e1a275dbc8cd
Executing a+b with C1X on HotSpot ;-) !
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1413
diff
changeset
|
420 |
14104 | 421 C2V_VMENTRY(jboolean, hasFinalizableSubclass,(JNIEnv *, jobject, jlong metaspace_klass)) |
422 Klass* klass = (Klass*) metaspace_klass; | |
9126
bc26f978b0ce
HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly
Bernhard Urban <bernhard.urban@jku.at>
parents:
9108
diff
changeset
|
423 assert(klass != NULL, "method must not be called for primitive types"); |
bc26f978b0ce
HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly
Bernhard Urban <bernhard.urban@jku.at>
parents:
9108
diff
changeset
|
424 return Dependencies::find_finalizable_subclass(klass) != NULL; |
bc26f978b0ce
HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly
Bernhard Urban <bernhard.urban@jku.at>
parents:
9108
diff
changeset
|
425 C2V_END |
bc26f978b0ce
HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly
Bernhard Urban <bernhard.urban@jku.at>
parents:
9108
diff
changeset
|
426 |
14104 | 427 C2V_VMENTRY(jlong, getClassInitializer, (JNIEnv *, jobject, jlong metaspace_klass)) |
428 InstanceKlass* klass = (InstanceKlass*) metaspace_klass; | |
429 return (jlong) (address) klass->class_initializer(); | |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
430 C2V_END |
3090
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3055
diff
changeset
|
431 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
432 C2V_VMENTRY(jlong, getMaxCallTargetOffset, (JNIEnv*, jobject, jlong addr)) |
9649 | 433 address target_addr = (address) addr; |
3563
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
434 if (target_addr != 0x0) { |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
435 int64_t off_low = (int64_t)target_addr - ((int64_t)CodeCache::low_bound() + sizeof(int)); |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
436 int64_t off_high = (int64_t)target_addr - ((int64_t)CodeCache::high_bound() + sizeof(int)); |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
437 return MAX2(ABS(off_low), ABS(off_high)); |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
438 } |
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
439 return -1; |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
440 C2V_END |
3563
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3559
diff
changeset
|
441 |
12535
cee7f686c470
rename CompilerToVm.dontInline to doNotInlineOrCompile
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
12533
diff
changeset
|
442 C2V_VMENTRY(void, doNotInlineOrCompile,(JNIEnv *, jobject, jlong metaspace_method)) |
12532
9b1cc2628961
Extend the CompilerToVM interface to explicitly avoid compilation and inlining of methods
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
12409
diff
changeset
|
443 methodHandle method = asMethod(metaspace_method); |
9b1cc2628961
Extend the CompilerToVM interface to explicitly avoid compilation and inlining of methods
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
12409
diff
changeset
|
444 method->set_not_c1_compilable(); |
9b1cc2628961
Extend the CompilerToVM interface to explicitly avoid compilation and inlining of methods
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
12409
diff
changeset
|
445 method->set_not_c2_compilable(); |
9b1cc2628961
Extend the CompilerToVM interface to explicitly avoid compilation and inlining of methods
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
12409
diff
changeset
|
446 method->set_dont_inline(true); |
9b1cc2628961
Extend the CompilerToVM interface to explicitly avoid compilation and inlining of methods
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
12409
diff
changeset
|
447 C2V_END |
9b1cc2628961
Extend the CompilerToVM interface to explicitly avoid compilation and inlining of methods
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
12409
diff
changeset
|
448 |
13641
5a9afbf72714
Add a speculation oop for uncommon trap deoptimization. Save it in the SpeculationLog during deoptimization.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13630
diff
changeset
|
449 C2V_VMENTRY(jint, installCode0, (JNIEnv *jniEnv, jobject, jobject compiled_code, jobject installed_code, jobject speculation_log)) |
3669
53636e2c9d03
No longer use shared ciFactory. Remove make_global usage in code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3667
diff
changeset
|
450 ResourceMark rm; |
3670
f198b24093f3
put back in thread transitions.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3669
diff
changeset
|
451 HandleMark hm; |
9669
ed6202820ecf
renamed HotSpotCompilationResult to HotSpotCompiledCode and added subclasses HotSpotCompiledNmethod and HotSpotCompiledRuntimeStub
Doug Simon <doug.simon@oracle.com>
parents:
9668
diff
changeset
|
452 Handle compiled_code_handle = JNIHandles::resolve(compiled_code); |
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
|
453 CodeBlob* cb = NULL; |
7000
bf2ea3ed3bce
Fixed nmethod not being unloaded after their classloader has been unloaded by initializing _graal_installed_code in an nmethod's constructor
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
6990
diff
changeset
|
454 Handle installed_code_handle = JNIHandles::resolve(installed_code); |
13641
5a9afbf72714
Add a speculation oop for uncommon trap deoptimization. Save it in the SpeculationLog during deoptimization.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13630
diff
changeset
|
455 Handle speculation_log_handle = JNIHandles::resolve(speculation_log); |
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
|
456 |
17374
4a6e24a8fc2c
Track code installation time
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16492
diff
changeset
|
457 TraceTime install_time("installCode", GraalCompiler::codeInstallTimer()); |
13493
03bb0ee05409
made CodeInstaller subclassable and virtualized the methods for creating ScopeValues
Doug Simon <doug.simon@oracle.com>
parents:
13483
diff
changeset
|
458 CodeInstaller installer; |
13641
5a9afbf72714
Add a speculation oop for uncommon trap deoptimization. Save it in the SpeculationLog during deoptimization.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13630
diff
changeset
|
459 GraalEnv::CodeInstallResult result = installer.install(compiled_code_handle, cb, installed_code_handle, speculation_log_handle); |
7019
6838696d54ac
cleanly handle a failure to install Graal compiled code due to failed dependency (re)checking
Doug Simon <doug.simon@oracle.com>
parents:
7002
diff
changeset
|
460 |
8526
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
461 if (PrintCodeCacheOnCompilation) { |
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
462 stringStream s; |
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
463 // Dump code cache into a buffer before locking the tty, |
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
464 { |
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
465 MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); |
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
466 CodeCache::print_summary(&s, false); |
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
467 } |
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
468 ttyLocker ttyl; |
18043
f55f2d400797
Fix some format strings
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
17374
diff
changeset
|
469 tty->print_raw_cr(s.as_string()); |
8526
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
470 } |
3a105dec912f
Respect the PrintCodeCacheOnCompilation flag in the graal compiler
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8513
diff
changeset
|
471 |
7089
af30115c9d0e
added metering of code installation failure rate to detect excessive failure caused by overly optimistic assumptions
Doug Simon <doug.simon@oracle.com>
parents:
7084
diff
changeset
|
472 if (result != GraalEnv::ok) { |
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
|
473 assert(cb == NULL, "should be"); |
7089
af30115c9d0e
added metering of code installation failure rate to detect excessive failure caused by overly optimistic assumptions
Doug Simon <doug.simon@oracle.com>
parents:
7084
diff
changeset
|
474 } else { |
af30115c9d0e
added metering of code installation failure rate to detect excessive failure caused by overly optimistic assumptions
Doug Simon <doug.simon@oracle.com>
parents:
7084
diff
changeset
|
475 if (!installed_code_handle.is_null()) { |
15161
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
476 assert(installed_code_handle->is_a(InstalledCode::klass()), "wrong type"); |
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
477 InstalledCode::set_address(installed_code_handle, (jlong) cb); |
15166
7bc92bdfd322
Introduce versioning of installed code.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15161
diff
changeset
|
478 InstalledCode::set_version(installed_code_handle, InstalledCode::version(installed_code_handle) + 1); |
10577
9c7d9e2c8326
PTX kernel execution - no args or return value
Morris Meyer <morris.meyer@oracle.com>
parents:
10567
diff
changeset
|
479 oop comp_result = HotSpotCompiledCode::comp(compiled_code_handle); |
9c7d9e2c8326
PTX kernel execution - no args or return value
Morris Meyer <morris.meyer@oracle.com>
parents:
10567
diff
changeset
|
480 if (comp_result->is_a(ExternalCompilationResult::klass())) { |
10879
d55f24eac4b1
PTX support for Linux
Morris Meyer <morris.meyer@oracle.com>
parents:
10772
diff
changeset
|
481 if (TraceGPUInteraction) { |
10588
b0b368d38b40
CR-1032 - change ExternalCompilationResult kernel -> entryPoint
Morris Meyer <morris.meyer@oracle.com>
parents:
10577
diff
changeset
|
482 tty->print_cr("installCode0: ExternalCompilationResult"); |
b0b368d38b40
CR-1032 - change ExternalCompilationResult kernel -> entryPoint
Morris Meyer <morris.meyer@oracle.com>
parents:
10577
diff
changeset
|
483 } |
11381
001c41b01d13
HotSpotInstalledCode: moved getCode to Java and added the ability to get the whole blob
twisti
parents:
11238
diff
changeset
|
484 HotSpotInstalledCode::set_codeStart(installed_code_handle, ExternalCompilationResult::entryPoint(comp_result)); |
15161
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
485 } else if (installed_code_handle->is_a(HotSpotInstalledCode::klass())) { |
11381
001c41b01d13
HotSpotInstalledCode: moved getCode to Java and added the ability to get the whole blob
twisti
parents:
11238
diff
changeset
|
486 HotSpotInstalledCode::set_size(installed_code_handle, cb->size()); |
001c41b01d13
HotSpotInstalledCode: moved getCode to Java and added the ability to get the whole blob
twisti
parents:
11238
diff
changeset
|
487 HotSpotInstalledCode::set_codeStart(installed_code_handle, (jlong) cb->code_begin()); |
001c41b01d13
HotSpotInstalledCode: moved getCode to Java and added the ability to get the whole blob
twisti
parents:
11238
diff
changeset
|
488 HotSpotInstalledCode::set_codeSize(installed_code_handle, cb->code_size()); |
10577
9c7d9e2c8326
PTX kernel execution - no args or return value
Morris Meyer <morris.meyer@oracle.com>
parents:
10567
diff
changeset
|
489 } |
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
|
490 nmethod* nm = cb->as_nmethod_or_null(); |
7089
af30115c9d0e
added metering of code installation failure rate to detect excessive failure caused by overly optimistic assumptions
Doug Simon <doug.simon@oracle.com>
parents:
7084
diff
changeset
|
491 assert(nm == NULL || !installed_code_handle->is_scavengable() || nm->on_scavenge_root_list(), "nm should be scavengable if installed_code is scavengable"); |
af30115c9d0e
added metering of code installation failure rate to detect excessive failure caused by overly optimistic assumptions
Doug Simon <doug.simon@oracle.com>
parents:
7084
diff
changeset
|
492 } |
3683
345c3bbf9c3c
store RiCompiledMethod in nmethod and:
Lukas Stadler <lukas.stadler@jku.at>
parents:
3632
diff
changeset
|
493 } |
7089
af30115c9d0e
added metering of code installation failure rate to detect excessive failure caused by overly optimistic assumptions
Doug Simon <doug.simon@oracle.com>
parents:
7084
diff
changeset
|
494 return result; |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
495 C2V_END |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
496 |
13103
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
497 C2V_VMENTRY(void, notifyCompilationStatistics, (JNIEnv *jniEnv, jobject, jint id, jobject hotspot_method, jboolean osr, jint processedBytecodes, jlong time, jlong timeUnitsPerSecond, jobject installed_code)) |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
498 CompilerStatistics* stats = GraalCompiler::instance()->stats(); |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
499 |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
500 elapsedTimer timer = elapsedTimer(time, timeUnitsPerSecond); |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
501 if (osr) { |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
502 stats->_osr.update(timer, processedBytecodes); |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
503 } else { |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
504 stats->_standard.update(timer, processedBytecodes); |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
505 } |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
506 Handle installed_code_handle = JNIHandles::resolve(installed_code); |
15161
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
507 if (installed_code_handle->is_a(HotSpotInstalledCode::klass())) { |
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
508 stats->_nmethods_size += HotSpotInstalledCode::size(installed_code_handle); |
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
509 stats->_nmethods_code_size += HotSpotInstalledCode::codeSize(installed_code_handle); |
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
510 } |
13103
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
511 |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
512 if (CITimeEach) { |
18222
a8cff27ca2e1
converted HotSpotResolvedJavaMethod to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18172
diff
changeset
|
513 methodHandle method = asMethod(HotSpotResolvedJavaMethodImpl::metaspaceMethod(hotspot_method)); |
13103
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
514 float bytes_per_sec = 1.0 * processedBytecodes / timer.seconds(); |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
515 tty->print_cr("%3d seconds: %f bytes/sec: %f (bytes %d)", |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
516 id, timer.seconds(), bytes_per_sec, processedBytecodes); |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
517 } |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
518 C2V_END |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
519 |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
520 C2V_VMENTRY(void, resetCompilationStatistics, (JNIEnv *jniEnv, jobject)) |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
521 CompilerStatistics* stats = GraalCompiler::instance()->stats(); |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
15968
diff
changeset
|
522 stats->_standard.reset(); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
15968
diff
changeset
|
523 stats->_osr.reset(); |
13103
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
524 C2V_END |
c0b0974dd509
moved notification of Graal compilation statistics from VMToCompiler to CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
12779
diff
changeset
|
525 |
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
|
526 C2V_VMENTRY(jobject, disassembleCodeBlob, (JNIEnv *jniEnv, jobject, jlong codeBlob)) |
8349
8d6ea1915d42
merged CodeInfo into InstalledCode (GRAAL-156)
Doug Simon <doug.simon@oracle.com>
parents:
8348
diff
changeset
|
527 ResourceMark rm; |
8d6ea1915d42
merged CodeInfo into InstalledCode (GRAAL-156)
Doug Simon <doug.simon@oracle.com>
parents:
8348
diff
changeset
|
528 HandleMark hm; |
8d6ea1915d42
merged CodeInfo into InstalledCode (GRAAL-156)
Doug Simon <doug.simon@oracle.com>
parents:
8348
diff
changeset
|
529 |
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
|
530 CodeBlob* cb = (CodeBlob*) (address) codeBlob; |
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
|
531 if (cb == NULL) { |
8349
8d6ea1915d42
merged CodeInfo into InstalledCode (GRAAL-156)
Doug Simon <doug.simon@oracle.com>
parents:
8348
diff
changeset
|
532 return NULL; |
8d6ea1915d42
merged CodeInfo into InstalledCode (GRAAL-156)
Doug Simon <doug.simon@oracle.com>
parents:
8348
diff
changeset
|
533 } |
8d6ea1915d42
merged CodeInfo into InstalledCode (GRAAL-156)
Doug Simon <doug.simon@oracle.com>
parents:
8348
diff
changeset
|
534 |
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
|
535 // We don't want the stringStream buffer to resize during disassembly as it |
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
|
536 // uses scoped resource memory. If a nested function called during disassembly uses |
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
|
537 // a ResourceMark and the buffer expands within the scope of the mark, |
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
|
538 // the buffer becomes garbage when that scope is exited. Experience shows that |
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
|
539 // the disassembled code is typically about 10x the code size so a fixed buffer |
13236
25da0f4e5c77
added extra space to disassembler buffer to account for disassembly header
Doug Simon <doug.simon@oracle.com>
parents:
13181
diff
changeset
|
540 // sized to 20x code size plus a fixed amount for header info should be sufficient. |
25da0f4e5c77
added extra space to disassembler buffer to account for disassembly header
Doug Simon <doug.simon@oracle.com>
parents:
13181
diff
changeset
|
541 int bufferSize = cb->code_size() * 20 + 1024; |
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
|
542 char* buffer = NEW_RESOURCE_ARRAY(char, bufferSize); |
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
|
543 stringStream st(buffer, bufferSize); |
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
|
544 if (cb->is_nmethod()) { |
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
|
545 nmethod* nm = (nmethod*) cb; |
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
|
546 if (!nm->is_alive()) { |
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
|
547 return NULL; |
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
|
548 } |
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
|
549 Disassembler::decode(nm, &st); |
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
|
550 } 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
|
551 Disassembler::decode(cb, &st); |
7784
016e23829147
added HotSpot implementation of disassembling APIs
Doug Simon <doug.simon@oracle.com>
parents:
7760
diff
changeset
|
552 } |
13772
284aea4028ca
Fix: HotSpotDisassemblerProvider should return null when the code could not be disassembled.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13769
diff
changeset
|
553 if (st.size() <= 0) { |
284aea4028ca
Fix: HotSpotDisassemblerProvider should return null when the code could not be disassembled.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13769
diff
changeset
|
554 return NULL; |
284aea4028ca
Fix: HotSpotDisassemblerProvider should return null when the code could not be disassembled.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13769
diff
changeset
|
555 } |
7784
016e23829147
added HotSpot implementation of disassembling APIs
Doug Simon <doug.simon@oracle.com>
parents:
7760
diff
changeset
|
556 |
016e23829147
added HotSpot implementation of disassembling APIs
Doug Simon <doug.simon@oracle.com>
parents:
7760
diff
changeset
|
557 Handle result = java_lang_String::create_from_platform_dependent_str(st.as_string(), CHECK_NULL); |
016e23829147
added HotSpot implementation of disassembling APIs
Doug Simon <doug.simon@oracle.com>
parents:
7760
diff
changeset
|
558 return JNIHandles::make_local(result()); |
016e23829147
added HotSpot implementation of disassembling APIs
Doug Simon <doug.simon@oracle.com>
parents:
7760
diff
changeset
|
559 C2V_END |
016e23829147
added HotSpot implementation of disassembling APIs
Doug Simon <doug.simon@oracle.com>
parents:
7760
diff
changeset
|
560 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
561 C2V_VMENTRY(jobject, getStackTraceElement, (JNIEnv*, jobject, jlong metaspace_method, int bci)) |
5238
cce31bc56c00
made HotSpotResolvedMethodImpl.toStackTraceElement() call into native code to get an object containing source file info
Doug Simon <doug.simon@oracle.com>
parents:
5154
diff
changeset
|
562 ResourceMark rm; |
cce31bc56c00
made HotSpotResolvedMethodImpl.toStackTraceElement() call into native code to get an object containing source file info
Doug Simon <doug.simon@oracle.com>
parents:
5154
diff
changeset
|
563 HandleMark hm; |
cce31bc56c00
made HotSpotResolvedMethodImpl.toStackTraceElement() call into native code to get an object containing source file info
Doug Simon <doug.simon@oracle.com>
parents:
5154
diff
changeset
|
564 |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
565 methodHandle method = asMethod(metaspace_method); |
5238
cce31bc56c00
made HotSpotResolvedMethodImpl.toStackTraceElement() call into native code to get an object containing source file info
Doug Simon <doug.simon@oracle.com>
parents:
5154
diff
changeset
|
566 oop element = java_lang_StackTraceElement::create(method, bci, CHECK_NULL); |
cce31bc56c00
made HotSpotResolvedMethodImpl.toStackTraceElement() call into native code to get an object containing source file info
Doug Simon <doug.simon@oracle.com>
parents:
5154
diff
changeset
|
567 return JNIHandles::make_local(element); |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
568 C2V_END |
5238
cce31bc56c00
made HotSpotResolvedMethodImpl.toStackTraceElement() call into native code to get an object containing source file info
Doug Simon <doug.simon@oracle.com>
parents:
5154
diff
changeset
|
569 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
570 C2V_VMENTRY(jobject, executeCompiledMethodVarargs, (JNIEnv*, jobject, jobject args, jobject hotspotInstalledCode)) |
5246
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
571 ResourceMark rm; |
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
572 HandleMark hm; |
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
573 |
15161
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
574 jlong nmethodValue = InstalledCode::address(hotspotInstalledCode); |
13698
c3370b2e1cbc
added check for invalidated code in executeCompiledMethodVarargs
Doug Simon <doug.simon@oracle.com>
parents:
13641
diff
changeset
|
575 if (nmethodValue == 0L) { |
c3370b2e1cbc
added check for invalidated code in executeCompiledMethodVarargs
Doug Simon <doug.simon@oracle.com>
parents:
13641
diff
changeset
|
576 THROW_(vmSymbols::com_oracle_graal_api_code_InvalidInstalledCodeException(), NULL); |
c3370b2e1cbc
added check for invalidated code in executeCompiledMethodVarargs
Doug Simon <doug.simon@oracle.com>
parents:
13641
diff
changeset
|
577 } |
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
|
578 nmethod* nm = (nmethod*) (address) nmethodValue; |
9024
2b840ae76df1
Move nmethod parameter to the last position to keep passed on arguments in the correct registers.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9023
diff
changeset
|
579 methodHandle mh = nm->method(); |
5246
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
580 Symbol* signature = mh->signature(); |
7281
e960cda050d7
fixed bug in executing InstalledCode with more than 8 arguments
Doug Simon <doug.simon@oracle.com>
parents:
7232
diff
changeset
|
581 JavaCallArguments jca(mh->size_of_parameters()); |
5246
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
582 |
5747
120820e30baa
added basic high-level interpreter support to HotSpot
Christian Haeubl <haeubl@ssw.jku.at>
parents:
5624
diff
changeset
|
583 JavaArgumentUnboxer jap(signature, &jca, (arrayOop) JNIHandles::resolve(args), mh->is_static()); |
5246
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
584 JavaValue result(jap.get_ret_type()); |
8151
b8f261ba79c6
Minimize diff to plain HotSpot version.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8127
diff
changeset
|
585 jca.set_alternative_target(nm); |
b8f261ba79c6
Minimize diff to plain HotSpot version.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8127
diff
changeset
|
586 JavaCalls::call(&result, mh, &jca, CHECK_NULL); |
5246
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
587 |
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
588 if (jap.get_ret_type() == T_VOID) { |
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
589 return NULL; |
5395
fc1943f18fef
fixed bug in returning array values from CompilerToVMImpl.executeCompiledMethodVarargs
Doug Simon <doug.simon@oracle.com>
parents:
5318
diff
changeset
|
590 } else if (jap.get_ret_type() == T_OBJECT || jap.get_ret_type() == T_ARRAY) { |
5246
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
591 return JNIHandles::make_local((oop) result.get_jobject()); |
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
592 } else { |
16308
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
593 jvalue *value = (jvalue *) result.get_value_addr(); |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
594 // Narrow the value down if required (Important on big endian machines) |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
595 switch (jap.get_ret_type()) { |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
596 case T_BOOLEAN: |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
597 value->z = (jboolean) value->i; |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
598 break; |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
599 case T_BYTE: |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
600 value->b = (jbyte) value->i; |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
601 break; |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
602 case T_CHAR: |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
603 value->c = (jchar) value->i; |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
604 break; |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
605 case T_SHORT: |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
606 value->s = (jshort) value->i; |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
607 break; |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
608 } |
e5a8608f7d63
Narrowing down the return value (short, char and bool) of called method on Big Endian architectures.
Stefan Anzinger <stefan.anzinger@gmail.com>
parents:
15205
diff
changeset
|
609 oop o = java_lang_boxing_object::create(jap.get_ret_type(), value, CHECK_NULL); |
5246
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
610 return JNIHandles::make_local(o); |
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
611 } |
6376
e957c9ff0bda
put boiler plate for CompilerToVM native methods in macros
Doug Simon <doug.simon@oracle.com>
parents:
6367
diff
changeset
|
612 C2V_END |
5246
8bf2c37c46c4
added RiCompiledMethod.executeVarargs(Object...) to support compiling and calling arbitrary Java methods
Doug Simon <doug.simon@oracle.com>
parents:
5238
diff
changeset
|
613 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
614 C2V_VMENTRY(jlongArray, getLineNumberTable, (JNIEnv *, jobject, jlong metaspace_method)) |
14104 | 615 Method* method = (Method*) metaspace_method; |
8269
985a97ba083c
Fix spacing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8215
diff
changeset
|
616 if (!method->has_linenumber_table()) { |
7310
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
617 return NULL; |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
618 } |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
619 u2 num_entries = 0; |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
620 CompressedLineNumberReadStream streamForSize(method->compressed_linenumber_table()); |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
621 while (streamForSize.read_pair()) { |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
622 num_entries++; |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
623 } |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
624 |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
625 CompressedLineNumberReadStream stream(method->compressed_linenumber_table()); |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
626 typeArrayOop result = oopFactory::new_longArray(2 * num_entries, CHECK_NULL); |
7310
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
627 |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
628 int i = 0; |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
629 jlong value; |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
630 while (stream.read_pair()) { |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
631 value = ((long) stream.bci()); |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
632 result->long_at_put(i, value); |
7310
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
633 value = ((long) stream.line()); |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
634 result->long_at_put(i + 1, value); |
7310
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
635 i += 2; |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
636 } |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
637 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
638 return (jlongArray) JNIHandles::make_local(result); |
7310
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
639 C2V_END |
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
640 |
14104 | 641 C2V_VMENTRY(jlong, getLocalVariableTableStart, (JNIEnv *, jobject, jlong metaspace_method)) |
7786
8bbbde9d0a52
extended ResolvedJavaMethod API by getLocalVariableTable
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
7784
diff
changeset
|
642 ResourceMark rm; |
14104 | 643 Method* method = (Method*) metaspace_method; |
8269
985a97ba083c
Fix spacing.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8215
diff
changeset
|
644 if (!method->has_localvariable_table()) { |
13306
dfb780080923
moved most CompilerToVM.getLocalVariableTable to Java
twisti
parents:
13305
diff
changeset
|
645 return 0; |
7786
8bbbde9d0a52
extended ResolvedJavaMethod API by getLocalVariableTable
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
7784
diff
changeset
|
646 } |
13306
dfb780080923
moved most CompilerToVM.getLocalVariableTable to Java
twisti
parents:
13305
diff
changeset
|
647 return (jlong) (address) method->localvariable_table_start(); |
7786
8bbbde9d0a52
extended ResolvedJavaMethod API by getLocalVariableTable
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
7784
diff
changeset
|
648 C2V_END |
8bbbde9d0a52
extended ResolvedJavaMethod API by getLocalVariableTable
Matthias Grimmer <grimmer@ssw.jku.at>
parents:
7784
diff
changeset
|
649 |
14104 | 650 C2V_VMENTRY(jint, getLocalVariableTableLength, (JNIEnv *, jobject, jlong metaspace_method)) |
13306
dfb780080923
moved most CompilerToVM.getLocalVariableTable to Java
twisti
parents:
13305
diff
changeset
|
651 ResourceMark rm; |
14104 | 652 Method* method = (Method*) metaspace_method; |
13306
dfb780080923
moved most CompilerToVM.getLocalVariableTable to Java
twisti
parents:
13305
diff
changeset
|
653 return method->localvariable_table_length(); |
dfb780080923
moved most CompilerToVM.getLocalVariableTable to Java
twisti
parents:
13305
diff
changeset
|
654 C2V_END |
7310
79a7b761755c
Added getLineNumberTable and getFileName capabilities.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7232
diff
changeset
|
655 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
656 C2V_VMENTRY(void, reprofile, (JNIEnv*, jobject, jlong metaspace_method)) |
8611
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
657 Method* method = asMethod(metaspace_method); |
10408
836a62f43af9
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
Doug Simon <doug.simon@oracle.com>
parents:
10072
diff
changeset
|
658 MethodCounters* mcs = method->method_counters(); |
836a62f43af9
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
Doug Simon <doug.simon@oracle.com>
parents:
10072
diff
changeset
|
659 if (mcs != NULL) { |
836a62f43af9
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
Doug Simon <doug.simon@oracle.com>
parents:
10072
diff
changeset
|
660 mcs->clear_counters(); |
836a62f43af9
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
Doug Simon <doug.simon@oracle.com>
parents:
10072
diff
changeset
|
661 } |
836a62f43af9
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
Doug Simon <doug.simon@oracle.com>
parents:
10072
diff
changeset
|
662 NOT_PRODUCT(method->set_compiled_invocation_count(0)); |
8611
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
663 |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
664 nmethod* code = method->code(); |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
665 if (code != NULL) { |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
666 code->make_not_entrant(); |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
667 } |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
668 |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
669 MethodData* method_data = method->method_data(); |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
670 if (method_data == NULL) { |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
671 ClassLoaderData* loader_data = method->method_holder()->class_loader_data(); |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
672 method_data = MethodData::allocate(loader_data, method, CHECK); |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
673 method->set_method_data(method_data); |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
674 } else { |
18137
94faadc823ea
MethodData::initialize: remove unused argument
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
18043
diff
changeset
|
675 method_data->initialize(); |
8611
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
676 } |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
677 C2V_END |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
678 |
6c4db417385a
added API to reset the profiling information for a method
Christian Haeubl <haeubl@ssw.jku.at>
parents:
8451
diff
changeset
|
679 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
680 C2V_VMENTRY(void, invalidateInstalledCode, (JNIEnv*, jobject, jobject hotspotInstalledCode)) |
15161
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
681 jlong nativeMethod = InstalledCode::address(hotspotInstalledCode); |
9023
f94bb5d20e5d
Rename MethodInvalidatedException to InvalidInstalledCodeException (and make it a checked exception). Make sure that a compiled code object can always be directly called without first doing a check on the native method pointer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8996
diff
changeset
|
682 nmethod* m = (nmethod*)nativeMethod; |
10477
7943479d36f3
Fix for invalidateInstalledCode.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10476
diff
changeset
|
683 if (m != NULL && !m->is_not_entrant()) { |
9025
ff5a32117e02
Implement fast invocation of installed code (direct tail call to the target machine code address).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9024
diff
changeset
|
684 m->mark_for_deoptimization(); |
ff5a32117e02
Implement fast invocation of installed code (direct tail call to the target machine code address).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9024
diff
changeset
|
685 VM_Deoptimize op; |
ff5a32117e02
Implement fast invocation of installed code (direct tail call to the target machine code address).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9024
diff
changeset
|
686 VMThread::execute(&op); |
ff5a32117e02
Implement fast invocation of installed code (direct tail call to the target machine code address).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
9024
diff
changeset
|
687 } |
15161
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
688 InstalledCode::set_address(hotspotInstalledCode, 0); |
9023
f94bb5d20e5d
Rename MethodInvalidatedException to InvalidInstalledCodeException (and make it a checked exception). Make sure that a compiled code object can always be directly called without first doing a check on the native method pointer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8996
diff
changeset
|
689 C2V_END |
f94bb5d20e5d
Rename MethodInvalidatedException to InvalidInstalledCodeException (and make it a checked exception). Make sure that a compiled code object can always be directly called without first doing a check on the native method pointer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8996
diff
changeset
|
690 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
691 C2V_VMENTRY(jobject, getJavaMirror, (JNIEnv*, jobject, jlong metaspace_klass)) |
15052
5e6f29f287d6
added InstanceKlass::_graal_node_class field to accelerate Node.getNodeClass()
Doug Simon <doug.simon@oracle.com>
parents:
14717
diff
changeset
|
692 Klass* klass = asKlass(metaspace_klass); |
5e6f29f287d6
added InstanceKlass::_graal_node_class field to accelerate Node.getNodeClass()
Doug Simon <doug.simon@oracle.com>
parents:
14717
diff
changeset
|
693 return JNIHandles::make_local(klass->java_mirror()); |
5e6f29f287d6
added InstanceKlass::_graal_node_class field to accelerate Node.getNodeClass()
Doug Simon <doug.simon@oracle.com>
parents:
14717
diff
changeset
|
694 C2V_END |
9023
f94bb5d20e5d
Rename MethodInvalidatedException to InvalidInstalledCodeException (and make it a checked exception). Make sure that a compiled code object can always be directly called without first doing a check on the native method pointer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
8996
diff
changeset
|
695 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
696 C2V_VMENTRY(jlong, readUnsafeKlassPointer, (JNIEnv*, jobject, jobject o)) |
10715
c3760150dc29
Add function to read compressed klass pointers of constant objects natively
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
10714
diff
changeset
|
697 oop resolved_o = JNIHandles::resolve(o); |
c3760150dc29
Add function to read compressed klass pointers of constant objects natively
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
10714
diff
changeset
|
698 jlong klass = (jlong)(address)resolved_o->klass(); |
c3760150dc29
Add function to read compressed klass pointers of constant objects natively
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
10714
diff
changeset
|
699 return klass; |
c3760150dc29
Add function to read compressed klass pointers of constant objects natively
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
10714
diff
changeset
|
700 C2V_END |
10536
26c69598db3e
Fix bug in canonicalization of non-compressed object pointers.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10477
diff
changeset
|
701 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
702 C2V_VMENTRY(jlongArray, collectCounters, (JNIEnv*, jobject)) |
13796
8cd953e97e2d
rework of benchmark counters: fix size at VM entry, not at build time
Lukas Stadler <lukas.stadler@jku.at>
parents:
13772
diff
changeset
|
703 typeArrayOop arrayOop = oopFactory::new_longArray(GraalCounterSize, CHECK_NULL); |
11852
d7964e96b0b0
move benchmark counters into separate class and make them correct for multithreaded applications
Lukas Stadler <lukas.stadler@jku.at>
parents:
11520
diff
changeset
|
704 JavaThread::collect_counters(arrayOop); |
d7964e96b0b0
move benchmark counters into separate class and make them correct for multithreaded applications
Lukas Stadler <lukas.stadler@jku.at>
parents:
11520
diff
changeset
|
705 return (jlongArray) JNIHandles::make_local(arrayOop); |
d7964e96b0b0
move benchmark counters into separate class and make them correct for multithreaded applications
Lukas Stadler <lukas.stadler@jku.at>
parents:
11520
diff
changeset
|
706 C2V_END |
d7964e96b0b0
move benchmark counters into separate class and make them correct for multithreaded applications
Lukas Stadler <lukas.stadler@jku.at>
parents:
11520
diff
changeset
|
707 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
708 // In general we should avoid using regular JNI methods to interact with the JVM but this |
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
709 // particular case is just about registering JNI methods so it should be a regular native |
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
710 // method. |
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
711 JNIEXPORT jobject JNICALL c2v_getGPUs (JNIEnv* env, jobject) { |
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
712 TRACE_graal_3("CompilerToVM::getGPUs" ); |
13819
49db2c1e3bee
added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents:
13796
diff
changeset
|
713 #if defined(TARGET_OS_FAMILY_bsd) || defined(TARGET_OS_FAMILY_linux) || defined(TARGET_OS_FAMILY_windows) |
15177
66e3af78ea96
HSAIL: added safepoint support
Doug Simon <doug.simon@oracle.com>
parents:
15169
diff
changeset
|
714 return Gpu::probe_gpus(env); |
13819
49db2c1e3bee
added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents:
13796
diff
changeset
|
715 #else |
49db2c1e3bee
added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents:
13796
diff
changeset
|
716 return env->NewStringUTF(""); |
49db2c1e3bee
added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents:
13796
diff
changeset
|
717 #endif |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
718 } |
13819
49db2c1e3bee
added support for co-existing GPU backends (JBS:GRAAL-1)
Doug Simon <doug.simon@oracle.com>
parents:
13796
diff
changeset
|
719 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
720 C2V_VMENTRY(int, allocateCompileId, (JNIEnv*, jobject, jlong metaspace_method, int entry_bci)) |
13630
b1838411e896
Use compile ids assigned by hotspot
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13578
diff
changeset
|
721 HandleMark hm; |
b1838411e896
Use compile ids assigned by hotspot
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13578
diff
changeset
|
722 ResourceMark rm; |
14104 | 723 Method* method = (Method*) metaspace_method; |
13969
fe034af88233
Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13953
diff
changeset
|
724 return CompileBroker::assign_compile_id_unlocked(THREAD, method, entry_bci); |
13630
b1838411e896
Use compile ids assigned by hotspot
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13578
diff
changeset
|
725 C2V_END |
b1838411e896
Use compile ids assigned by hotspot
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13578
diff
changeset
|
726 |
b1838411e896
Use compile ids assigned by hotspot
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13578
diff
changeset
|
727 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
728 C2V_VMENTRY(jboolean, isMature, (JNIEnv*, jobject, jlong metaspace_method_data)) |
13769
af344056124f
Only use mature method datas
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13698
diff
changeset
|
729 MethodData* mdo = asMethodData(metaspace_method_data); |
af344056124f
Only use mature method datas
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13698
diff
changeset
|
730 return mdo != NULL && mdo->is_mature(); |
af344056124f
Only use mature method datas
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13698
diff
changeset
|
731 C2V_END |
af344056124f
Only use mature method datas
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13698
diff
changeset
|
732 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
733 C2V_VMENTRY(jboolean, hasCompiledCodeForOSR, (JNIEnv*, jobject, jlong metaspace_method, int entry_bci, int comp_level)) |
14107
800057208a2c
enable C1 + Graal tiered
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14106
diff
changeset
|
734 Method* method = asMethod(metaspace_method); |
800057208a2c
enable C1 + Graal tiered
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14106
diff
changeset
|
735 return method->lookup_osr_nmethod_for(entry_bci, comp_level, true) != NULL; |
800057208a2c
enable C1 + Graal tiered
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14106
diff
changeset
|
736 C2V_END |
800057208a2c
enable C1 + Graal tiered
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14106
diff
changeset
|
737 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
738 C2V_VMENTRY(jlong, getTimeStamp, (JNIEnv*, jobject)) |
15045
0286888f792b
fix PrintCompilation formatting and use same time source
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14717
diff
changeset
|
739 // tty->time_stamp is the time since VM start which should be used |
0286888f792b
fix PrintCompilation formatting and use same time source
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14717
diff
changeset
|
740 // for all HotSpot log output when a timestamp is required. |
0286888f792b
fix PrintCompilation formatting and use same time source
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14717
diff
changeset
|
741 return tty->time_stamp().milliseconds(); |
0286888f792b
fix PrintCompilation formatting and use same time source
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14717
diff
changeset
|
742 C2V_END |
0286888f792b
fix PrintCompilation formatting and use same time source
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14717
diff
changeset
|
743 |
15968
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
744 C2V_VMENTRY(jobject, getSymbol, (JNIEnv*, jobject, jlong metaspaceSymbol)) |
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
745 Handle sym = java_lang_String::create_from_symbol((Symbol*)(address)metaspaceSymbol, CHECK_NULL); |
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
746 return JNIHandles::make_local(THREAD, sym()); |
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
747 C2V_END |
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
748 |
15088
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
749 bool matches(jlongArray methods, Method* method) { |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
750 typeArrayOop methods_oop = (typeArrayOop) JNIHandles::resolve(methods); |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
751 |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
752 for (int i = 0; i < methods_oop->length(); i++) { |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
753 if (methods_oop->long_at(i) == (jlong) method) { |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
754 return true; |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
755 } |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
756 } |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
757 return false; |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
758 } |
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
759 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
760 C2V_VMENTRY(jobject, getNextStackFrame, (JNIEnv*, jobject compilerToVM, jobject hs_frame, jlongArray methods, jint initialSkip)) |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
761 ResourceMark rm; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
762 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
763 if (!thread->has_last_Java_frame()) return NULL; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
764 Handle result = InstanceKlass::cast(HotSpotStackFrameReference::klass())->allocate_instance(thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
765 HotSpotStackFrameReference::klass()->initialize(thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
766 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
767 StackFrameStream fst(thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
768 if (hs_frame != NULL) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
769 // look for the correct stack frame if one is given |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
770 intptr_t* stack_pointer = (intptr_t*) HotSpotStackFrameReference::stackPointer(hs_frame); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
771 while (fst.current()->sp() != stack_pointer && !fst.is_done()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
772 fst.next(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
773 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
774 if (fst.current()->sp() != stack_pointer) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
775 THROW_MSG_NULL(vmSymbols::java_lang_IllegalStateException(), "stack frame not found") |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
776 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
777 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
778 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
779 int frame_number = 0; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
780 vframe* vf = vframe::new_vframe(fst.current(), fst.register_map(), thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
781 if (hs_frame != NULL) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
782 // look for the correct vframe within the stack frame if one is given |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
783 int last_frame_number = HotSpotStackFrameReference::frameNumber(hs_frame); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
784 while (frame_number < last_frame_number) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
785 if (vf->is_top()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
786 THROW_MSG_NULL(vmSymbols::java_lang_IllegalStateException(), "invalid frame number") |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
787 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
788 vf = vf->sender(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
789 frame_number ++; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
790 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
791 // move one frame forward |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
792 if (vf->is_top()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
793 if (fst.is_done()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
794 return NULL; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
795 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
796 fst.next(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
797 vf = vframe::new_vframe(fst.current(), fst.register_map(), thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
798 frame_number = 0; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
799 } else { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
800 vf = vf->sender(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
801 frame_number++; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
802 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
803 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
804 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
805 while (true) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
806 // look for the given method |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
807 while (true) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
808 StackValueCollection* locals = NULL; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
809 if (vf->is_compiled_frame()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
810 // compiled method frame |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
811 compiledVFrame* cvf = compiledVFrame::cast(vf); |
15088
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
812 if (methods == NULL || matches(methods, cvf->method())) { |
15092
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
813 if (initialSkip > 0) { |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
814 initialSkip --; |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
815 } else { |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
816 GrowableArray<ScopeValue*>* objects = cvf->scope()->objects(); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
817 bool reallocated = false; |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
818 if (objects != NULL) { |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
819 reallocated = Deoptimization::realloc_objects(thread, fst.current(), objects, THREAD); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
820 if (reallocated) { |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
821 Deoptimization::reassign_fields(fst.current(), fst.register_map(), objects); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
822 } |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
823 |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
824 GrowableArray<ScopeValue*>* local_values = cvf->scope()->locals(); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
825 typeArrayHandle array = oopFactory::new_boolArray(local_values->length(), thread); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
826 for (int i = 0; i < local_values->length(); i++) { |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
827 ScopeValue* value = local_values->at(i); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
828 if (value->is_object()) { |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
829 array->bool_at_put(i, true); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
830 } |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
831 } |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
832 HotSpotStackFrameReference::set_localIsVirtual(result, array()); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
833 } else { |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
834 HotSpotStackFrameReference::set_localIsVirtual(result, NULL); |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
835 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
836 |
15092
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
837 locals = cvf->locals(); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
838 HotSpotStackFrameReference::set_bci(result, cvf->bci()); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
839 HotSpotStackFrameReference::set_metaspaceMethod(result, (jlong) cvf->method()); |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
840 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
841 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
842 } else if (vf->is_interpreted_frame()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
843 // interpreted method frame |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
844 interpretedVFrame* ivf = interpretedVFrame::cast(vf); |
15088
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
845 if (methods == NULL || matches(methods, ivf->method())) { |
15092
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
846 if (initialSkip > 0) { |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
847 initialSkip --; |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
848 } else { |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
849 locals = ivf->locals(); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
850 HotSpotStackFrameReference::set_bci(result, ivf->bci()); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
851 HotSpotStackFrameReference::set_metaspaceMethod(result, (jlong) ivf->method()); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
852 HotSpotStackFrameReference::set_localIsVirtual(result, NULL); |
c73ce0dd3583
add support for skipping stack frames in StackIntrospection.getStackTrace
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15088
diff
changeset
|
853 } |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
854 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
855 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
856 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
857 // locals != NULL means that we found a matching frame and result is already partially initialized |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
858 if (locals != NULL) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
859 HotSpotStackFrameReference::set_compilerToVM(result, JNIHandles::resolve(compilerToVM)); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
860 HotSpotStackFrameReference::set_stackPointer(result, (jlong) fst.current()->sp()); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
861 HotSpotStackFrameReference::set_frameNumber(result, frame_number); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
862 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
863 // initialize the locals array |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
864 objArrayHandle array = oopFactory::new_objectArray(locals->size(), thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
865 for (int i = 0; i < locals->size(); i++) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
866 StackValue* var = locals->at(i); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
867 if (var->type() == T_OBJECT) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
868 array->obj_at_put(i, locals->at(i)->get_obj()()); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
869 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
870 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
871 HotSpotStackFrameReference::set_locals(result, array()); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
872 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
873 return JNIHandles::make_local(thread, result()); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
874 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
875 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
876 if (vf->is_top()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
877 break; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
878 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
879 frame_number++; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
880 vf = vf->sender(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
881 } // end of vframe loop |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
882 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
883 if (fst.is_done()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
884 break; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
885 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
886 fst.next(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
887 vf = vframe::new_vframe(fst.current(), fst.register_map(), thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
888 frame_number = 0; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
889 } // end of frame loop |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
890 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
891 // the end was reached without finding a matching method |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
892 return NULL; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
893 C2V_END |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
894 |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
895 C2V_VMENTRY(void, resolveInvokeDynamic, (JNIEnv*, jobject, jlong metaspace_constant_pool, jint index)) |
15205
affef8631cf4
Add eager resolving for indy call sites
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15177
diff
changeset
|
896 ConstantPool* cp = (ConstantPool*)metaspace_constant_pool; |
affef8631cf4
Add eager resolving for indy call sites
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15177
diff
changeset
|
897 CallInfo callInfo; |
affef8631cf4
Add eager resolving for indy call sites
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15177
diff
changeset
|
898 LinkResolver::resolve_invokedynamic(callInfo, cp, index, CHECK); |
affef8631cf4
Add eager resolving for indy call sites
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15177
diff
changeset
|
899 ConstantPoolCacheEntry* cp_cache_entry = cp->invokedynamic_cp_cache_entry_at(index); |
affef8631cf4
Add eager resolving for indy call sites
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15177
diff
changeset
|
900 cp_cache_entry->set_dynamic_call(cp, callInfo); |
affef8631cf4
Add eager resolving for indy call sites
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15177
diff
changeset
|
901 C2V_END |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
902 |
16243
fb77eab05bd3
Respect the VM's wish to record non-safepoint debug info
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16184
diff
changeset
|
903 C2V_VMENTRY(jboolean, shouldDebugNonSafepoints, (JNIEnv*, jobject)) |
fb77eab05bd3
Respect the VM's wish to record non-safepoint debug info
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16184
diff
changeset
|
904 //see compute_recording_non_safepoints in debugInfroRec.cpp |
fb77eab05bd3
Respect the VM's wish to record non-safepoint debug info
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16184
diff
changeset
|
905 if (JvmtiExport::should_post_compiled_method_load() && FLAG_IS_DEFAULT(DebugNonSafepoints)) { |
fb77eab05bd3
Respect the VM's wish to record non-safepoint debug info
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16184
diff
changeset
|
906 return true; |
fb77eab05bd3
Respect the VM's wish to record non-safepoint debug info
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16184
diff
changeset
|
907 } |
fb77eab05bd3
Respect the VM's wish to record non-safepoint debug info
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16184
diff
changeset
|
908 return DebugNonSafepoints; |
fb77eab05bd3
Respect the VM's wish to record non-safepoint debug info
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16184
diff
changeset
|
909 C2V_END |
fb77eab05bd3
Respect the VM's wish to record non-safepoint debug info
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16184
diff
changeset
|
910 |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
911 // public native void materializeVirtualObjects(HotSpotStackFrameReference stackFrame, boolean invalidate); |
15806
240cc9a901fb
don't use JNI natives to interact with VM metadata
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15805
diff
changeset
|
912 C2V_VMENTRY(void, materializeVirtualObjects, (JNIEnv*, jobject, jobject hs_frame, bool invalidate)) |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
913 ResourceMark rm; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
914 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
915 if (hs_frame == NULL) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
916 THROW_MSG(vmSymbols::java_lang_NullPointerException(), "stack frame is null") |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
917 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
918 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
919 HotSpotStackFrameReference::klass()->initialize(thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
920 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
921 // look for the given stack frame |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
922 StackFrameStream fst(thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
923 intptr_t* stack_pointer = (intptr_t*) HotSpotStackFrameReference::stackPointer(hs_frame); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
924 while (fst.current()->sp() != stack_pointer && !fst.is_done()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
925 fst.next(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
926 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
927 if (fst.current()->sp() != stack_pointer) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
928 THROW_MSG(vmSymbols::java_lang_IllegalStateException(), "stack frame not found") |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
929 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
930 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
931 if (invalidate) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
932 assert(fst.current()->cb()->is_nmethod(), "nmethod expected"); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
933 ((nmethod*) fst.current()->cb())->make_not_entrant(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
934 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
935 Deoptimization::deoptimize(thread, *fst.current(), fst.register_map(), Deoptimization::Reason_none); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
936 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
937 vframe* vf = vframe::new_vframe(fst.current(), fst.register_map(), thread); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
938 if (!vf->is_compiled_frame()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
939 THROW_MSG(vmSymbols::java_lang_IllegalStateException(), "compiled stack frame expected") |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
940 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
941 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
942 GrowableArray<compiledVFrame*>* virtualFrames = new GrowableArray<compiledVFrame*>(10); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
943 while (true) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
944 assert(vf->is_compiled_frame(), "Wrong frame type"); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
945 virtualFrames->push(compiledVFrame::cast(vf)); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
946 if (vf->is_top()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
947 break; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
948 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
949 vf = vf->sender(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
950 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
951 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
952 int last_frame_number = HotSpotStackFrameReference::frameNumber(hs_frame); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
953 if (last_frame_number >= virtualFrames->length()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
954 THROW_MSG(vmSymbols::java_lang_IllegalStateException(), "invalid frame number") |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
955 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
956 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
957 // Reallocate the non-escaping objects and restore their fields. |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
958 assert (virtualFrames->at(last_frame_number)->scope() != NULL,"invalid scope"); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
959 GrowableArray<ScopeValue*>* objects = virtualFrames->at(last_frame_number)->scope()->objects(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
960 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
961 if (objects == NULL) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
962 // no objects to materialize |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
963 return; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
964 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
965 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
966 bool reallocated = Deoptimization::realloc_objects(thread, fst.current(), objects, THREAD); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
967 if (reallocated) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
968 Deoptimization::reassign_fields(fst.current(), fst.register_map(), objects); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
969 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
970 for (int frame_index = 0; frame_index < virtualFrames->length(); frame_index++) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
971 compiledVFrame* cvf = virtualFrames->at(frame_index); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
972 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
973 GrowableArray<ScopeValue*>* scopeLocals = cvf->scope()->locals(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
974 StackValueCollection* locals = cvf->locals(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
975 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
976 if (locals != NULL) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
977 for (int i2 = 0; i2 < locals->size(); i2++) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
978 StackValue* var = locals->at(i2); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
979 if (var->type() == T_OBJECT && scopeLocals->at(i2)->is_object()) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
980 jvalue val; |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
981 val.l = (jobject) locals->at(i2)->get_obj()(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
982 cvf->update_local(T_OBJECT, i2, val); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
983 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
984 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
985 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
986 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
987 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
988 // all locals are materialized by now |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
989 HotSpotStackFrameReference::set_localIsVirtual(hs_frame, NULL); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
990 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
991 // update the locals array |
18172
c59612b9d110
Use arrayOop subclasses in graalJavaAccess
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18137
diff
changeset
|
992 objArrayHandle array = HotSpotStackFrameReference::locals(hs_frame); |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
993 StackValueCollection* locals = virtualFrames->at(last_frame_number)->locals(); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
994 for (int i = 0; i < locals->size(); i++) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
995 StackValue* var = locals->at(i); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
996 if (var->type() == T_OBJECT) { |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
997 array->obj_at_put(i, locals->at(i)->get_obj()()); |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
998 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
999 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
1000 } |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
1001 C2V_END |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
1002 |
16405
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16327
diff
changeset
|
1003 C2V_VMENTRY(void, writeDebugOutput, (JNIEnv*, jobject, jbyteArray bytes, jint offset, jint length)) |
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16327
diff
changeset
|
1004 while (length > 0) { |
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16327
diff
changeset
|
1005 jbyte* start = ((typeArrayOop) JNIHandles::resolve(bytes))->byte_at_addr(offset); |
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16327
diff
changeset
|
1006 tty->write((char*) start, MIN2(length, O_BUFLEN)); |
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16327
diff
changeset
|
1007 length -= O_BUFLEN; |
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16327
diff
changeset
|
1008 offset += O_BUFLEN; |
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16327
diff
changeset
|
1009 } |
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16327
diff
changeset
|
1010 C2V_END |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
1011 |
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
1012 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1013 #define CC (char*) /*cast a literal from (const char*)*/ |
6588
b89b5038ad7e
removed _'s from method names in CompilerToVM
Doug Simon <doug.simon@oracle.com>
parents:
6559
diff
changeset
|
1014 #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &(c2v_ ## f)) |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1015 |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
1016 #define TYPE "Lcom/oracle/graal/api/meta/JavaType;" |
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
1017 #define METHOD "Lcom/oracle/graal/api/meta/JavaMethod;" |
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
1018 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;" |
13641
5a9afbf72714
Add a speculation oop for uncommon trap deoptimization. Save it in the SpeculationLog during deoptimization.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
13630
diff
changeset
|
1019 #define SPECULATION_LOG "Lcom/oracle/graal/api/code/SpeculationLog;" |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
1020 #define STRING "Ljava/lang/String;" |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
1021 #define OBJECT "Ljava/lang/Object;" |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
1022 #define CLASS "Ljava/lang/Class;" |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
1023 #define STACK_TRACE_ELEMENT "Ljava/lang/StackTraceElement;" |
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
1024 #define HS_RESOLVED_METHOD "Lcom/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod;" |
15088
d3add9b82b71
change to StackIntrospection and Truffle getStackTrace implementation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15063
diff
changeset
|
1025 #define RESOLVED_METHOD "Lcom/oracle/graal/api/meta/ResolvedJavaMethod;" |
9669
ed6202820ecf
renamed HotSpotCompilationResult to HotSpotCompiledCode and added subclasses HotSpotCompiledNmethod and HotSpotCompiledRuntimeStub
Doug Simon <doug.simon@oracle.com>
parents:
9668
diff
changeset
|
1026 #define HS_COMPILED_CODE "Lcom/oracle/graal/hotspot/HotSpotCompiledCode;" |
6950
41938af2b3d8
modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents:
6948
diff
changeset
|
1027 #define HS_CONFIG "Lcom/oracle/graal/hotspot/HotSpotVMConfig;" |
15161
2c940b1a48d8
Convert InstalledCode from an interface into an abstract class.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
15104
diff
changeset
|
1028 #define INSTALLED_CODE "Lcom/oracle/graal/api/code/InstalledCode;" |
15052
5e6f29f287d6
added InstanceKlass::_graal_node_class field to accelerate Node.getNodeClass()
Doug Simon <doug.simon@oracle.com>
parents:
14717
diff
changeset
|
1029 #define NODE_CLASS "Lcom/oracle/graal/graph/NodeClass;" |
15063
36e1a11a72b3
new StackIntrospection interface to allow access to stack contents
Lukas Stadler <lukas.stadler@oracle.com>
parents:
15059
diff
changeset
|
1030 #define HS_STACK_FRAME_REF "Lcom/oracle/graal/hotspot/HotSpotStackFrameReference;" |
13478
fe03864a2c72
replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents:
13461
diff
changeset
|
1031 #define METASPACE_KLASS "J" |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
1032 #define METASPACE_METHOD "J" |
13769
af344056124f
Only use mature method datas
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13698
diff
changeset
|
1033 #define METASPACE_METHOD_DATA "J" |
13259
b16fb0b7479b
every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents:
13258
diff
changeset
|
1034 #define METASPACE_CONSTANT_POOL "J" |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1422
diff
changeset
|
1035 |
4220
5c80ccb80036
Renaming of VMExits and VMEntries part 1.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4199
diff
changeset
|
1036 JNINativeMethod CompilerToVM_methods[] = { |
15843
747bc4099ad8
rename initializeBytecode to getBytecode and eliminate extra copy
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15806
diff
changeset
|
1037 {CC"getBytecode", CC"("METASPACE_METHOD")[B", FN_PTR(getBytecode)}, |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1038 {CC"exceptionTableStart", CC"("METASPACE_METHOD")J", FN_PTR(exceptionTableStart)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1039 {CC"exceptionTableLength", CC"("METASPACE_METHOD")I", FN_PTR(exceptionTableLength)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1040 {CC"hasBalancedMonitors", CC"("METASPACE_METHOD")Z", FN_PTR(hasBalancedMonitors)}, |
16184
8fde32ece68e
use receiver type in findUniqueConcreteMethod
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16089
diff
changeset
|
1041 {CC"findUniqueConcreteMethod", CC"("METASPACE_KLASS METASPACE_METHOD")"METASPACE_METHOD, FN_PTR(findUniqueConcreteMethod)}, |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1042 {CC"getKlassImplementor", CC"("METASPACE_KLASS")"METASPACE_KLASS, FN_PTR(getKlassImplementor)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1043 {CC"getStackTraceElement", CC"("METASPACE_METHOD"I)"STACK_TRACE_ELEMENT, FN_PTR(getStackTraceElement)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1044 {CC"methodIsIgnoredBySecurityStackWalk", CC"("METASPACE_METHOD")Z", FN_PTR(methodIsIgnoredBySecurityStackWalk)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1045 {CC"doNotInlineOrCompile", CC"("METASPACE_METHOD")V", FN_PTR(doNotInlineOrCompile)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1046 {CC"canInlineMethod", CC"("METASPACE_METHOD")Z", FN_PTR(canInlineMethod)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1047 {CC"shouldInlineMethod", CC"("METASPACE_METHOD")Z", FN_PTR(shouldInlineMethod)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1048 {CC"lookupType", CC"("STRING CLASS"Z)"METASPACE_KLASS, FN_PTR(lookupType)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1049 {CC"resolveConstantInPool", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(resolveConstantInPool)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1050 {CC"resolvePossiblyCachedConstantInPool", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(resolvePossiblyCachedConstantInPool)}, |
15968
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
1051 {CC"lookupNameRefInPool", CC"("METASPACE_CONSTANT_POOL"I)"STRING, FN_PTR(lookupNameRefInPool)}, |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1052 {CC"lookupNameAndTypeRefIndexInPool", CC"("METASPACE_CONSTANT_POOL"I)I", FN_PTR(lookupNameAndTypeRefIndexInPool)}, |
15968
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
1053 {CC"lookupSignatureRefInPool", CC"("METASPACE_CONSTANT_POOL"I)"STRING, FN_PTR(lookupSignatureRefInPool)}, |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1054 {CC"lookupKlassRefIndexInPool", CC"("METASPACE_CONSTANT_POOL"I)I", FN_PTR(lookupKlassRefIndexInPool)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1055 {CC"constantPoolKlassAt", CC"("METASPACE_CONSTANT_POOL"I)"METASPACE_KLASS, FN_PTR(constantPoolKlassAt)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1056 {CC"lookupKlassInPool", CC"("METASPACE_CONSTANT_POOL"I)"METASPACE_KLASS, FN_PTR(lookupKlassInPool)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1057 {CC"lookupAppendixInPool", CC"("METASPACE_CONSTANT_POOL"I)"OBJECT, FN_PTR(lookupAppendixInPool)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1058 {CC"lookupMethodInPool", CC"("METASPACE_CONSTANT_POOL"IB)"METASPACE_METHOD, FN_PTR(lookupMethodInPool)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1059 {CC"constantPoolRemapInstructionOperandFromCache", CC"("METASPACE_CONSTANT_POOL"I)I", FN_PTR(constantPoolRemapInstructionOperandFromCache)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1060 {CC"resolveField", CC"("METASPACE_CONSTANT_POOL"IB[J)"METASPACE_KLASS, FN_PTR(resolveField)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1061 {CC"resolveInvokeDynamic", CC"("METASPACE_CONSTANT_POOL"I)V", FN_PTR(resolveInvokeDynamic)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1062 {CC"resolveMethod", CC"("METASPACE_KLASS METASPACE_METHOD METASPACE_KLASS")"METASPACE_METHOD, FN_PTR(resolveMethod)}, |
15726
668d158f780c
Rename HotSpotResolvedObjectType.metaspaceKlass to getMetaspaceKlass
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15725
diff
changeset
|
1063 {CC"getVtableIndexForInterface", CC"("METASPACE_KLASS METASPACE_METHOD")I", FN_PTR(getVtableIndexForInterface)}, |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1064 {CC"getClassInitializer", CC"("METASPACE_KLASS")"METASPACE_METHOD, FN_PTR(getClassInitializer)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1065 {CC"hasFinalizableSubclass", CC"("METASPACE_KLASS")Z", FN_PTR(hasFinalizableSubclass)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1066 {CC"getMaxCallTargetOffset", CC"(J)J", FN_PTR(getMaxCallTargetOffset)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1067 {CC"getMetaspaceMethod", CC"("CLASS"I)"METASPACE_METHOD, FN_PTR(getMetaspaceMethod)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1068 {CC"initializeConfiguration", CC"("HS_CONFIG")V", FN_PTR(initializeConfiguration)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1069 {CC"installCode0", CC"("HS_COMPILED_CODE INSTALLED_CODE SPECULATION_LOG")I", FN_PTR(installCode0)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1070 {CC"notifyCompilationStatistics", CC"(I"HS_RESOLVED_METHOD"ZIJJ"INSTALLED_CODE")V", FN_PTR(notifyCompilationStatistics)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1071 {CC"resetCompilationStatistics", CC"()V", FN_PTR(resetCompilationStatistics)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1072 {CC"disassembleCodeBlob", CC"(J)"STRING, FN_PTR(disassembleCodeBlob)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1073 {CC"executeCompiledMethodVarargs", CC"(["OBJECT INSTALLED_CODE")"OBJECT, FN_PTR(executeCompiledMethodVarargs)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1074 {CC"getLineNumberTable", CC"("METASPACE_METHOD")[J", FN_PTR(getLineNumberTable)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1075 {CC"getLocalVariableTableStart", CC"("METASPACE_METHOD")J", FN_PTR(getLocalVariableTableStart)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1076 {CC"getLocalVariableTableLength", CC"("METASPACE_METHOD")I", FN_PTR(getLocalVariableTableLength)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1077 {CC"reprofile", CC"("METASPACE_METHOD")V", FN_PTR(reprofile)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1078 {CC"invalidateInstalledCode", CC"("INSTALLED_CODE")V", FN_PTR(invalidateInstalledCode)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1079 {CC"getJavaMirror", CC"("METASPACE_KLASS")"CLASS, FN_PTR(getJavaMirror)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1080 {CC"readUnsafeKlassPointer", CC"("OBJECT")J", FN_PTR(readUnsafeKlassPointer)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1081 {CC"collectCounters", CC"()[J", FN_PTR(collectCounters)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1082 {CC"getGPUs", CC"()"STRING, FN_PTR(getGPUs)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1083 {CC"allocateCompileId", CC"("METASPACE_METHOD"I)I", FN_PTR(allocateCompileId)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1084 {CC"isMature", CC"("METASPACE_METHOD_DATA")Z", FN_PTR(isMature)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1085 {CC"hasCompiledCodeForOSR", CC"("METASPACE_METHOD"II)Z", FN_PTR(hasCompiledCodeForOSR)}, |
15968
42eaa579e134
more improvements to runtime initialization:
Doug Simon <doug.simon@oracle.com>
parents:
15843
diff
changeset
|
1086 {CC"getSymbol", CC"(J)"STRING, FN_PTR(getSymbol)}, |
15722
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1087 {CC"getTimeStamp", CC"()J", FN_PTR(getTimeStamp)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1088 {CC"getNextStackFrame", CC"("HS_STACK_FRAME_REF "[JI)"HS_STACK_FRAME_REF, FN_PTR(getNextStackFrame)}, |
c583759bbcfd
ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15456
diff
changeset
|
1089 {CC"materializeVirtualObjects", CC"("HS_STACK_FRAME_REF"Z)V", FN_PTR(materializeVirtualObjects)}, |
16243
fb77eab05bd3
Respect the VM's wish to record non-safepoint debug info
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16184
diff
changeset
|
1090 {CC"shouldDebugNonSafepoints", CC"()Z", FN_PTR(shouldDebugNonSafepoints)}, |
16405
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16327
diff
changeset
|
1091 {CC"writeDebugOutput", CC"([BII)V", FN_PTR(writeDebugOutput)}, |
1412
9195b99c841b
Added first VM entry method.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1410
diff
changeset
|
1092 }; |
9195b99c841b
Added first VM entry method.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
1410
diff
changeset
|
1093 |
4220
5c80ccb80036
Renaming of VMExits and VMEntries part 1.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4199
diff
changeset
|
1094 int CompilerToVM_methods_count() { |
5c80ccb80036
Renaming of VMExits and VMEntries part 1.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4199
diff
changeset
|
1095 return sizeof(CompilerToVM_methods) / sizeof(JNINativeMethod); |
1421
6223633ce7dd
changed VMExit/VMEntries to non-static, added eclipse c++ project, CIR interface changes
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1419
diff
changeset
|
1096 } |
3703
50a1d38cd7ac
Add newlines at the end of files, otherwise my version of gcc complains
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3701
diff
changeset
|
1097 |