annotate src/share/vm/code/codeBlob.hpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents 469216acdb28
children 096c224171c4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
12146
9758d9f36299 8021954: VM SIGSEGV during classloading on MacOS; hs_err_pid file produced
coleenp
parents: 8767
diff changeset
2 * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1299
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1299
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1299
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
25 #ifndef SHARE_VM_CODE_CODEBLOB_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
26 #define SHARE_VM_CODE_CODEBLOB_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
28 #include "asm/codeBuffer.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
29 #include "compiler/oopMap.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
30 #include "runtime/frame.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
31 #include "runtime/handles.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
32
0
a61af66fc99e Initial load
duke
parents:
diff changeset
33 // CodeBlob - superclass for all entries in the CodeCache.
a61af66fc99e Initial load
duke
parents:
diff changeset
34 //
a61af66fc99e Initial load
duke
parents:
diff changeset
35 // Suptypes are:
a61af66fc99e Initial load
duke
parents:
diff changeset
36 // nmethod : Compiled Java methods (include method that calls to native code)
a61af66fc99e Initial load
duke
parents:
diff changeset
37 // RuntimeStub : Call to VM runtime methods
a61af66fc99e Initial load
duke
parents:
diff changeset
38 // DeoptimizationBlob : Used for deoptimizatation
a61af66fc99e Initial load
duke
parents:
diff changeset
39 // ExceptionBlob : Used for stack unrolling
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // SafepointBlob : Used to handle illegal instruction exceptions
a61af66fc99e Initial load
duke
parents:
diff changeset
41 //
a61af66fc99e Initial load
duke
parents:
diff changeset
42 //
a61af66fc99e Initial load
duke
parents:
diff changeset
43 // Layout:
a61af66fc99e Initial load
duke
parents:
diff changeset
44 // - header
a61af66fc99e Initial load
duke
parents:
diff changeset
45 // - relocation
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
46 // - content space
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
47 // - instruction space
0
a61af66fc99e Initial load
duke
parents:
diff changeset
48 // - data space
a61af66fc99e Initial load
duke
parents:
diff changeset
49 class DeoptimizationBlob;
a61af66fc99e Initial load
duke
parents:
diff changeset
50
a61af66fc99e Initial load
duke
parents:
diff changeset
51 class CodeBlob VALUE_OBJ_CLASS_SPEC {
a61af66fc99e Initial load
duke
parents:
diff changeset
52
a61af66fc99e Initial load
duke
parents:
diff changeset
53 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
54
a61af66fc99e Initial load
duke
parents:
diff changeset
55 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
56 const char* _name;
a61af66fc99e Initial load
duke
parents:
diff changeset
57 int _size; // total size of CodeBlob in bytes
a61af66fc99e Initial load
duke
parents:
diff changeset
58 int _header_size; // size of header (depends on subclass)
a61af66fc99e Initial load
duke
parents:
diff changeset
59 int _relocation_size; // size of relocation
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
60 int _content_offset; // offset to where content region begins (this includes consts, insts, stubs)
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
61 int _code_offset; // offset to where instructions region begins (this includes insts, stubs)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
62 int _frame_complete_offset; // instruction offsets in [0.._frame_complete_offset) have
a61af66fc99e Initial load
duke
parents:
diff changeset
63 // not finished setting up their frame. Beware of pc's in
a61af66fc99e Initial load
duke
parents:
diff changeset
64 // that range. There is a similar range(s) on returns
a61af66fc99e Initial load
duke
parents:
diff changeset
65 // which we don't detect.
a61af66fc99e Initial load
duke
parents:
diff changeset
66 int _data_offset; // offset to where data region begins
a61af66fc99e Initial load
duke
parents:
diff changeset
67 int _frame_size; // size of stack frame
a61af66fc99e Initial load
duke
parents:
diff changeset
68 OopMapSet* _oop_maps; // OopMap for this CodeBlob
8767
a5de0cc2f91c 8008555: Debugging code in compiled method sometimes leaks memory
roland
parents: 6796
diff changeset
69 CodeStrings _strings;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
70
a61af66fc99e Initial load
duke
parents:
diff changeset
71 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
72 // Returns the space needed for CodeBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
73 static unsigned int allocation_size(CodeBuffer* cb, int header_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
74
a61af66fc99e Initial load
duke
parents:
diff changeset
75 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
76 // a) simple CodeBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
77 // frame_complete is the offset from the beginning of the instructions
a61af66fc99e Initial load
duke
parents:
diff changeset
78 // to where the frame setup (from stackwalk viewpoint) is complete.
a61af66fc99e Initial load
duke
parents:
diff changeset
79 CodeBlob(const char* name, int header_size, int size, int frame_complete, int locs_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
80
a61af66fc99e Initial load
duke
parents:
diff changeset
81 // b) full CodeBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
82 CodeBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
83 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
84 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
85 int header_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
86 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
87 int frame_complete,
a61af66fc99e Initial load
duke
parents:
diff changeset
88 int frame_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
89 OopMapSet* oop_maps
a61af66fc99e Initial load
duke
parents:
diff changeset
90 );
a61af66fc99e Initial load
duke
parents:
diff changeset
91
a61af66fc99e Initial load
duke
parents:
diff changeset
92 // Deletion
a61af66fc99e Initial load
duke
parents:
diff changeset
93 void flush();
a61af66fc99e Initial load
duke
parents:
diff changeset
94
a61af66fc99e Initial load
duke
parents:
diff changeset
95 // Typing
3363
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
96 virtual bool is_buffer_blob() const { return false; }
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
97 virtual bool is_nmethod() const { return false; }
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
98 virtual bool is_runtime_stub() const { return false; }
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
99 virtual bool is_deoptimization_stub() const { return false; }
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
100 virtual bool is_uncommon_trap_stub() const { return false; }
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
101 virtual bool is_exception_stub() const { return false; }
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
102 virtual bool is_safepoint_stub() const { return false; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
103 virtual bool is_adapter_blob() const { return false; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
104 virtual bool is_method_handles_adapter_blob() const { return false; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
105
a61af66fc99e Initial load
duke
parents:
diff changeset
106 virtual bool is_compiled_by_c2() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
107 virtual bool is_compiled_by_c1() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
108
1135
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 989
diff changeset
109 // Casting
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 989
diff changeset
110 nmethod* as_nmethod_or_null() { return is_nmethod() ? (nmethod*) this : NULL; }
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 989
diff changeset
111
0
a61af66fc99e Initial load
duke
parents:
diff changeset
112 // Boundaries
a61af66fc99e Initial load
duke
parents:
diff changeset
113 address header_begin() const { return (address) this; }
a61af66fc99e Initial load
duke
parents:
diff changeset
114 address header_end() const { return ((address) this) + _header_size; };
a61af66fc99e Initial load
duke
parents:
diff changeset
115 relocInfo* relocation_begin() const { return (relocInfo*) header_end(); };
a61af66fc99e Initial load
duke
parents:
diff changeset
116 relocInfo* relocation_end() const { return (relocInfo*)(header_end() + _relocation_size); }
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
117 address content_begin() const { return (address) header_begin() + _content_offset; }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
118 address content_end() const { return (address) header_begin() + _data_offset; }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
119 address code_begin() const { return (address) header_begin() + _code_offset; }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
120 address code_end() const { return (address) header_begin() + _data_offset; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
121 address data_begin() const { return (address) header_begin() + _data_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
122 address data_end() const { return (address) header_begin() + _size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
123
a61af66fc99e Initial load
duke
parents:
diff changeset
124 // Offsets
a61af66fc99e Initial load
duke
parents:
diff changeset
125 int relocation_offset() const { return _header_size; }
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
126 int content_offset() const { return _content_offset; }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
127 int code_offset() const { return _code_offset; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
128 int data_offset() const { return _data_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
129
a61af66fc99e Initial load
duke
parents:
diff changeset
130 // Sizes
a61af66fc99e Initial load
duke
parents:
diff changeset
131 int size() const { return _size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
132 int header_size() const { return _header_size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
133 int relocation_size() const { return (address) relocation_end() - (address) relocation_begin(); }
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
134 int content_size() const { return content_end() - content_begin(); }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
135 int code_size() const { return code_end() - code_begin(); }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
136 int data_size() const { return data_end() - data_begin(); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
137
a61af66fc99e Initial load
duke
parents:
diff changeset
138 // Containment
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
139 bool blob_contains(address addr) const { return header_begin() <= addr && addr < data_end(); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
140 bool relocation_contains(relocInfo* addr) const{ return relocation_begin() <= addr && addr < relocation_end(); }
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
141 bool content_contains(address addr) const { return content_begin() <= addr && addr < content_end(); }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
142 bool code_contains(address addr) const { return code_begin() <= addr && addr < code_end(); }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
143 bool data_contains(address addr) const { return data_begin() <= addr && addr < data_end(); }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
144 bool contains(address addr) const { return content_contains(addr); }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
145 bool is_frame_complete_at(address addr) const { return code_contains(addr) &&
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
146 addr >= code_begin() + _frame_complete_offset; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
147
a61af66fc99e Initial load
duke
parents:
diff changeset
148 // CodeCache support: really only used by the nmethods, but in order to get
a61af66fc99e Initial load
duke
parents:
diff changeset
149 // asserts and certain bookkeeping to work in the CodeCache they are defined
a61af66fc99e Initial load
duke
parents:
diff changeset
150 // virtual here.
a61af66fc99e Initial load
duke
parents:
diff changeset
151 virtual bool is_zombie() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
152 virtual bool is_locked_by_vm() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
153
a61af66fc99e Initial load
duke
parents:
diff changeset
154 virtual bool is_unloaded() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
155 virtual bool is_not_entrant() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
156
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // GC support
a61af66fc99e Initial load
duke
parents:
diff changeset
158 virtual bool is_alive() const = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
159
a61af66fc99e Initial load
duke
parents:
diff changeset
160 // OopMap for frame
a61af66fc99e Initial load
duke
parents:
diff changeset
161 OopMapSet* oop_maps() const { return _oop_maps; }
a61af66fc99e Initial load
duke
parents:
diff changeset
162 void set_oop_maps(OopMapSet* p);
a61af66fc99e Initial load
duke
parents:
diff changeset
163 OopMap* oop_map_for_return_address(address return_address);
a61af66fc99e Initial load
duke
parents:
diff changeset
164 virtual void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { ShouldNotReachHere(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
165
a61af66fc99e Initial load
duke
parents:
diff changeset
166 // Frame support
a61af66fc99e Initial load
duke
parents:
diff changeset
167 int frame_size() const { return _frame_size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
168 void set_frame_size(int size) { _frame_size = size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
169
a61af66fc99e Initial load
duke
parents:
diff changeset
170 // Returns true, if the next frame is responsible for GC'ing oops passed as arguments
a61af66fc99e Initial load
duke
parents:
diff changeset
171 virtual bool caller_must_gc_arguments(JavaThread* thread) const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
172
a61af66fc99e Initial load
duke
parents:
diff changeset
173 // Naming
a61af66fc99e Initial load
duke
parents:
diff changeset
174 const char* name() const { return _name; }
a61af66fc99e Initial load
duke
parents:
diff changeset
175 void set_name(const char* name) { _name = name; }
a61af66fc99e Initial load
duke
parents:
diff changeset
176
a61af66fc99e Initial load
duke
parents:
diff changeset
177 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
178 virtual void verify();
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
179 void print() const { print_on(tty); }
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
180 virtual void print_on(outputStream* st) const;
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
181 virtual void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
182
3363
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
183 // Deal with Disassembler, VTune, Forte, JvmtiExport, MemoryService.
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
184 static void trace_new_stub(CodeBlob* blob, const char* name1, const char* name2 = "");
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
185
0
a61af66fc99e Initial load
duke
parents:
diff changeset
186 // Print the comment associated with offset on stream, if there is one
6796
b31471cdc53e 7200163: add CodeComments functionality to assember stubs
kvn
parents: 6725
diff changeset
187 virtual void print_block_comment(outputStream* stream, address block_begin) const {
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
188 intptr_t offset = (intptr_t)(block_begin - code_begin());
8767
a5de0cc2f91c 8008555: Debugging code in compiled method sometimes leaks memory
roland
parents: 6796
diff changeset
189 _strings.print_block_comment(stream, offset);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
190 }
a61af66fc99e Initial load
duke
parents:
diff changeset
191
a61af66fc99e Initial load
duke
parents:
diff changeset
192 // Transfer ownership of comments to this CodeBlob
8767
a5de0cc2f91c 8008555: Debugging code in compiled method sometimes leaks memory
roland
parents: 6796
diff changeset
193 void set_strings(CodeStrings& strings) {
a5de0cc2f91c 8008555: Debugging code in compiled method sometimes leaks memory
roland
parents: 6796
diff changeset
194 _strings.assign(strings);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
195 }
a61af66fc99e Initial load
duke
parents:
diff changeset
196 };
a61af66fc99e Initial load
duke
parents:
diff changeset
197
a61af66fc99e Initial load
duke
parents:
diff changeset
198
a61af66fc99e Initial load
duke
parents:
diff changeset
199 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
200 // BufferBlob: used to hold non-relocatable machine code such as the interpreter, stubroutines, etc.
a61af66fc99e Initial load
duke
parents:
diff changeset
201
a61af66fc99e Initial load
duke
parents:
diff changeset
202 class BufferBlob: public CodeBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
203 friend class VMStructs;
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
204 friend class AdapterBlob;
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
205 friend class MethodHandlesAdapterBlob;
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
206
0
a61af66fc99e Initial load
duke
parents:
diff changeset
207 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
208 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
209 BufferBlob(const char* name, int size);
a61af66fc99e Initial load
duke
parents:
diff changeset
210 BufferBlob(const char* name, int size, CodeBuffer* cb);
a61af66fc99e Initial load
duke
parents:
diff changeset
211
12880
469216acdb28 8023014: CodeSweeperSweepNoFlushTest.java fails with HS crash
anoll
parents: 12146
diff changeset
212 void* operator new(size_t s, unsigned size, bool is_critical = false) throw();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
213
a61af66fc99e Initial load
duke
parents:
diff changeset
214 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
215 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
216 static BufferBlob* create(const char* name, int buffer_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
217 static BufferBlob* create(const char* name, CodeBuffer* cb);
a61af66fc99e Initial load
duke
parents:
diff changeset
218
a61af66fc99e Initial load
duke
parents:
diff changeset
219 static void free(BufferBlob* buf);
a61af66fc99e Initial load
duke
parents:
diff changeset
220
a61af66fc99e Initial load
duke
parents:
diff changeset
221 // Typing
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
222 virtual bool is_buffer_blob() const { return true; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
223
a61af66fc99e Initial load
duke
parents:
diff changeset
224 // GC/Verification support
a61af66fc99e Initial load
duke
parents:
diff changeset
225 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
226 bool is_alive() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
227
a61af66fc99e Initial load
duke
parents:
diff changeset
228 void verify();
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
229 void print_on(outputStream* st) const;
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
230 void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
231 };
a61af66fc99e Initial load
duke
parents:
diff changeset
232
a61af66fc99e Initial load
duke
parents:
diff changeset
233
a61af66fc99e Initial load
duke
parents:
diff changeset
234 //----------------------------------------------------------------------------------------------------
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
235 // AdapterBlob: used to hold C2I/I2C adapters
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
236
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
237 class AdapterBlob: public BufferBlob {
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
238 private:
1663
7139e81efd2d 6970566: runThese fails with SIGSEGV
never
parents: 1579
diff changeset
239 AdapterBlob(int size, CodeBuffer* cb);
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
240
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
241 public:
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
242 // Creation
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
243 static AdapterBlob* create(CodeBuffer* cb);
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
244
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
245 // Typing
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
246 virtual bool is_adapter_blob() const { return true; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
247 };
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
248
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
249
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
250 //----------------------------------------------------------------------------------------------------
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
251 // MethodHandlesAdapterBlob: used to hold MethodHandles adapters
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
252
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
253 class MethodHandlesAdapterBlob: public BufferBlob {
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
254 private:
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
255 MethodHandlesAdapterBlob(int size) : BufferBlob("MethodHandles adapters", size) {}
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
256
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
257 public:
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
258 // Creation
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
259 static MethodHandlesAdapterBlob* create(int buffer_size);
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
260
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
261 // Typing
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
262 virtual bool is_method_handles_adapter_blob() const { return true; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
263 };
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
264
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
265
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
266 //----------------------------------------------------------------------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
267 // RuntimeStub: describes stubs used by compiled code to call a (static) C++ runtime routine
a61af66fc99e Initial load
duke
parents:
diff changeset
268
a61af66fc99e Initial load
duke
parents:
diff changeset
269 class RuntimeStub: public CodeBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
270 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
271 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
272 bool _caller_must_gc_arguments;
a61af66fc99e Initial load
duke
parents:
diff changeset
273
a61af66fc99e Initial load
duke
parents:
diff changeset
274 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
275 RuntimeStub(
a61af66fc99e Initial load
duke
parents:
diff changeset
276 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
277 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
278 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
279 int frame_complete,
a61af66fc99e Initial load
duke
parents:
diff changeset
280 int frame_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
281 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
282 bool caller_must_gc_arguments
a61af66fc99e Initial load
duke
parents:
diff changeset
283 );
a61af66fc99e Initial load
duke
parents:
diff changeset
284
12146
9758d9f36299 8021954: VM SIGSEGV during classloading on MacOS; hs_err_pid file produced
coleenp
parents: 8767
diff changeset
285 void* operator new(size_t s, unsigned size) throw();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
286
a61af66fc99e Initial load
duke
parents:
diff changeset
287 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
288 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
289 static RuntimeStub* new_runtime_stub(
a61af66fc99e Initial load
duke
parents:
diff changeset
290 const char* stub_name,
a61af66fc99e Initial load
duke
parents:
diff changeset
291 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
292 int frame_complete,
a61af66fc99e Initial load
duke
parents:
diff changeset
293 int frame_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
294 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
295 bool caller_must_gc_arguments
a61af66fc99e Initial load
duke
parents:
diff changeset
296 );
a61af66fc99e Initial load
duke
parents:
diff changeset
297
a61af66fc99e Initial load
duke
parents:
diff changeset
298 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
299 bool is_runtime_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
300
a61af66fc99e Initial load
duke
parents:
diff changeset
301 // GC support
a61af66fc99e Initial load
duke
parents:
diff changeset
302 bool caller_must_gc_arguments(JavaThread* thread) const { return _caller_must_gc_arguments; }
a61af66fc99e Initial load
duke
parents:
diff changeset
303
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
304 address entry_point() { return code_begin(); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
305
a61af66fc99e Initial load
duke
parents:
diff changeset
306 // GC/Verification support
a61af66fc99e Initial load
duke
parents:
diff changeset
307 void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
308 bool is_alive() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
309
a61af66fc99e Initial load
duke
parents:
diff changeset
310 void verify();
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
311 void print_on(outputStream* st) const;
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
312 void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
313 };
a61af66fc99e Initial load
duke
parents:
diff changeset
314
a61af66fc99e Initial load
duke
parents:
diff changeset
315
a61af66fc99e Initial load
duke
parents:
diff changeset
316 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
317 // Super-class for all blobs that exist in only one instance. Implements default behaviour.
a61af66fc99e Initial load
duke
parents:
diff changeset
318
a61af66fc99e Initial load
duke
parents:
diff changeset
319 class SingletonBlob: public CodeBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
320 friend class VMStructs;
3363
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
321
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
322 protected:
12146
9758d9f36299 8021954: VM SIGSEGV during classloading on MacOS; hs_err_pid file produced
coleenp
parents: 8767
diff changeset
323 void* operator new(size_t s, unsigned size) throw();
3363
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
324
167b70ff3abc 6939861: JVM should handle more conversion operations
never
parents: 1972
diff changeset
325 public:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
326 SingletonBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
327 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
328 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
329 int header_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
330 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
331 int frame_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
332 OopMapSet* oop_maps
a61af66fc99e Initial load
duke
parents:
diff changeset
333 )
a61af66fc99e Initial load
duke
parents:
diff changeset
334 : CodeBlob(name, cb, header_size, size, CodeOffsets::frame_never_safe, frame_size, oop_maps)
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
335 {};
0
a61af66fc99e Initial load
duke
parents:
diff changeset
336
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
337 address entry_point() { return code_begin(); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
338
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
339 bool is_alive() const { return true; }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
340
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
341 void verify(); // does nothing
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
342 void print_on(outputStream* st) const;
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
343 void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
344 };
a61af66fc99e Initial load
duke
parents:
diff changeset
345
a61af66fc99e Initial load
duke
parents:
diff changeset
346
a61af66fc99e Initial load
duke
parents:
diff changeset
347 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
348 // DeoptimizationBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
349
a61af66fc99e Initial load
duke
parents:
diff changeset
350 class DeoptimizationBlob: public SingletonBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
351 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
352 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
353 int _unpack_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
354 int _unpack_with_exception;
a61af66fc99e Initial load
duke
parents:
diff changeset
355 int _unpack_with_reexecution;
a61af66fc99e Initial load
duke
parents:
diff changeset
356
a61af66fc99e Initial load
duke
parents:
diff changeset
357 int _unpack_with_exception_in_tls;
a61af66fc99e Initial load
duke
parents:
diff changeset
358
a61af66fc99e Initial load
duke
parents:
diff changeset
359 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
360 DeoptimizationBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
361 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
362 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
363 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
364 int unpack_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
365 int unpack_with_exception_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
366 int unpack_with_reexecution_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
367 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
368 );
a61af66fc99e Initial load
duke
parents:
diff changeset
369
a61af66fc99e Initial load
duke
parents:
diff changeset
370 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
371 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
372 static DeoptimizationBlob* create(
a61af66fc99e Initial load
duke
parents:
diff changeset
373 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
374 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
375 int unpack_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
376 int unpack_with_exception_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
377 int unpack_with_reexecution_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
378 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
379 );
a61af66fc99e Initial load
duke
parents:
diff changeset
380
a61af66fc99e Initial load
duke
parents:
diff changeset
381 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
382 bool is_deoptimization_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
383 bool exception_address_is_unpack_entry(address pc) const {
a61af66fc99e Initial load
duke
parents:
diff changeset
384 address unpack_pc = unpack();
a61af66fc99e Initial load
duke
parents:
diff changeset
385 return (pc == unpack_pc || (pc + frame::pc_return_offset) == unpack_pc);
a61af66fc99e Initial load
duke
parents:
diff changeset
386 }
a61af66fc99e Initial load
duke
parents:
diff changeset
387
a61af66fc99e Initial load
duke
parents:
diff changeset
388
a61af66fc99e Initial load
duke
parents:
diff changeset
389
a61af66fc99e Initial load
duke
parents:
diff changeset
390
a61af66fc99e Initial load
duke
parents:
diff changeset
391 // GC for args
a61af66fc99e Initial load
duke
parents:
diff changeset
392 void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) { /* Nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
393
a61af66fc99e Initial load
duke
parents:
diff changeset
394 // Printing
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
395 void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
396
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
397 address unpack() const { return code_begin() + _unpack_offset; }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
398 address unpack_with_exception() const { return code_begin() + _unpack_with_exception; }
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
399 address unpack_with_reexecution() const { return code_begin() + _unpack_with_reexecution; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
400
a61af66fc99e Initial load
duke
parents:
diff changeset
401 // Alternate entry point for C1 where the exception and issuing pc
a61af66fc99e Initial load
duke
parents:
diff changeset
402 // are in JavaThread::_exception_oop and JavaThread::_exception_pc
a61af66fc99e Initial load
duke
parents:
diff changeset
403 // instead of being in registers. This is needed because C1 doesn't
a61af66fc99e Initial load
duke
parents:
diff changeset
404 // model exception paths in a way that keeps these registers free so
a61af66fc99e Initial load
duke
parents:
diff changeset
405 // there may be live values in those registers during deopt.
a61af66fc99e Initial load
duke
parents:
diff changeset
406 void set_unpack_with_exception_in_tls_offset(int offset) {
a61af66fc99e Initial load
duke
parents:
diff changeset
407 _unpack_with_exception_in_tls = offset;
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
408 assert(code_contains(code_begin() + _unpack_with_exception_in_tls), "must be PC inside codeblob");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
409 }
1748
3e8fbc61cee8 6978355: renaming for 6961697
twisti
parents: 1681
diff changeset
410 address unpack_with_exception_in_tls() const { return code_begin() + _unpack_with_exception_in_tls; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
411 };
a61af66fc99e Initial load
duke
parents:
diff changeset
412
a61af66fc99e Initial load
duke
parents:
diff changeset
413
a61af66fc99e Initial load
duke
parents:
diff changeset
414 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
415 // UncommonTrapBlob (currently only used by Compiler 2)
a61af66fc99e Initial load
duke
parents:
diff changeset
416
a61af66fc99e Initial load
duke
parents:
diff changeset
417 #ifdef COMPILER2
a61af66fc99e Initial load
duke
parents:
diff changeset
418
a61af66fc99e Initial load
duke
parents:
diff changeset
419 class UncommonTrapBlob: public SingletonBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
420 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
421 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
422 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
423 UncommonTrapBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
424 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
425 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
426 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
427 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
428 );
a61af66fc99e Initial load
duke
parents:
diff changeset
429
a61af66fc99e Initial load
duke
parents:
diff changeset
430 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
431 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
432 static UncommonTrapBlob* create(
a61af66fc99e Initial load
duke
parents:
diff changeset
433 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
434 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
435 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
436 );
a61af66fc99e Initial load
duke
parents:
diff changeset
437
a61af66fc99e Initial load
duke
parents:
diff changeset
438 // GC for args
a61af66fc99e Initial load
duke
parents:
diff changeset
439 void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
440
a61af66fc99e Initial load
duke
parents:
diff changeset
441 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
442 bool is_uncommon_trap_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
443 };
a61af66fc99e Initial load
duke
parents:
diff changeset
444
a61af66fc99e Initial load
duke
parents:
diff changeset
445
a61af66fc99e Initial load
duke
parents:
diff changeset
446 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
447 // ExceptionBlob: used for exception unwinding in compiled code (currently only used by Compiler 2)
a61af66fc99e Initial load
duke
parents:
diff changeset
448
a61af66fc99e Initial load
duke
parents:
diff changeset
449 class ExceptionBlob: public SingletonBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
450 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
451 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
452 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
453 ExceptionBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
454 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
455 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
456 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
457 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
458 );
a61af66fc99e Initial load
duke
parents:
diff changeset
459
a61af66fc99e Initial load
duke
parents:
diff changeset
460 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
461 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
462 static ExceptionBlob* create(
a61af66fc99e Initial load
duke
parents:
diff changeset
463 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
464 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
465 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
466 );
a61af66fc99e Initial load
duke
parents:
diff changeset
467
a61af66fc99e Initial load
duke
parents:
diff changeset
468 // GC for args
a61af66fc99e Initial load
duke
parents:
diff changeset
469 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
470
a61af66fc99e Initial load
duke
parents:
diff changeset
471 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
472 bool is_exception_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
473 };
a61af66fc99e Initial load
duke
parents:
diff changeset
474 #endif // COMPILER2
a61af66fc99e Initial load
duke
parents:
diff changeset
475
a61af66fc99e Initial load
duke
parents:
diff changeset
476
a61af66fc99e Initial load
duke
parents:
diff changeset
477 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
478 // SafepointBlob: handles illegal_instruction exceptions during a safepoint
a61af66fc99e Initial load
duke
parents:
diff changeset
479
a61af66fc99e Initial load
duke
parents:
diff changeset
480 class SafepointBlob: public SingletonBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
481 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
482 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
483 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
484 SafepointBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
485 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
486 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
487 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
488 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
489 );
a61af66fc99e Initial load
duke
parents:
diff changeset
490
a61af66fc99e Initial load
duke
parents:
diff changeset
491 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
492 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
493 static SafepointBlob* create(
a61af66fc99e Initial load
duke
parents:
diff changeset
494 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
495 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
496 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
497 );
a61af66fc99e Initial load
duke
parents:
diff changeset
498
a61af66fc99e Initial load
duke
parents:
diff changeset
499 // GC for args
a61af66fc99e Initial load
duke
parents:
diff changeset
500 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
501
a61af66fc99e Initial load
duke
parents:
diff changeset
502 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
503 bool is_safepoint_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
504 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
505
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1748
diff changeset
506 #endif // SHARE_VM_CODE_CODEBLOB_HPP