annotate src/share/vm/code/codeBlob.hpp @ 1721:413ad0331a0c

6977924: Changes for 6975078 produce build error with certain gcc versions Summary: The changes introduced for 6975078 assign badHeapOopVal to the _allocation field in the ResourceObj class. In 32 bit linux builds with certain versions of gcc this assignment will be flagged as an error while compiling allocation.cpp. In 32 bit builds the constant value badHeapOopVal (which is cast to an intptr_t) is negative. The _allocation field is typed as an unsigned intptr_t and gcc catches this as an error. Reviewed-by: jcoomes, ysr, phh
author johnc
date Wed, 18 Aug 2010 10:59:06 -0700
parents 126ea7725993
children 3e8fbc61cee8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1299
diff changeset
2 * Copyright (c) 1998, 2010, 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
a61af66fc99e Initial load
duke
parents:
diff changeset
25 // CodeBlob - superclass for all entries in the CodeCache.
a61af66fc99e Initial load
duke
parents:
diff changeset
26 //
a61af66fc99e Initial load
duke
parents:
diff changeset
27 // Suptypes are:
a61af66fc99e Initial load
duke
parents:
diff changeset
28 // nmethod : Compiled Java methods (include method that calls to native code)
a61af66fc99e Initial load
duke
parents:
diff changeset
29 // RuntimeStub : Call to VM runtime methods
a61af66fc99e Initial load
duke
parents:
diff changeset
30 // DeoptimizationBlob : Used for deoptimizatation
a61af66fc99e Initial load
duke
parents:
diff changeset
31 // ExceptionBlob : Used for stack unrolling
a61af66fc99e Initial load
duke
parents:
diff changeset
32 // SafepointBlob : Used to handle illegal instruction exceptions
a61af66fc99e Initial load
duke
parents:
diff changeset
33 //
a61af66fc99e Initial load
duke
parents:
diff changeset
34 //
a61af66fc99e Initial load
duke
parents:
diff changeset
35 // Layout:
a61af66fc99e Initial load
duke
parents:
diff changeset
36 // - header
a61af66fc99e Initial load
duke
parents:
diff changeset
37 // - relocation
a61af66fc99e Initial load
duke
parents:
diff changeset
38 // - instruction space
a61af66fc99e Initial load
duke
parents:
diff changeset
39 // - data space
a61af66fc99e Initial load
duke
parents:
diff changeset
40 class DeoptimizationBlob;
a61af66fc99e Initial load
duke
parents:
diff changeset
41
a61af66fc99e Initial load
duke
parents:
diff changeset
42 class CodeBlob VALUE_OBJ_CLASS_SPEC {
a61af66fc99e Initial load
duke
parents:
diff changeset
43
a61af66fc99e Initial load
duke
parents:
diff changeset
44 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
45
a61af66fc99e Initial load
duke
parents:
diff changeset
46 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
47 const char* _name;
a61af66fc99e Initial load
duke
parents:
diff changeset
48 int _size; // total size of CodeBlob in bytes
a61af66fc99e Initial load
duke
parents:
diff changeset
49 int _header_size; // size of header (depends on subclass)
a61af66fc99e Initial load
duke
parents:
diff changeset
50 int _relocation_size; // size of relocation
a61af66fc99e Initial load
duke
parents:
diff changeset
51 int _instructions_offset; // offset to where instructions region begins
a61af66fc99e Initial load
duke
parents:
diff changeset
52 int _frame_complete_offset; // instruction offsets in [0.._frame_complete_offset) have
a61af66fc99e Initial load
duke
parents:
diff changeset
53 // not finished setting up their frame. Beware of pc's in
a61af66fc99e Initial load
duke
parents:
diff changeset
54 // that range. There is a similar range(s) on returns
a61af66fc99e Initial load
duke
parents:
diff changeset
55 // which we don't detect.
a61af66fc99e Initial load
duke
parents:
diff changeset
56 int _data_offset; // offset to where data region begins
a61af66fc99e Initial load
duke
parents:
diff changeset
57 int _frame_size; // size of stack frame
a61af66fc99e Initial load
duke
parents:
diff changeset
58 OopMapSet* _oop_maps; // OopMap for this CodeBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
59 CodeComments _comments;
a61af66fc99e Initial load
duke
parents:
diff changeset
60
a61af66fc99e Initial load
duke
parents:
diff changeset
61 friend class OopRecorder;
a61af66fc99e Initial load
duke
parents:
diff changeset
62
a61af66fc99e Initial load
duke
parents:
diff changeset
63 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
64 // Returns the space needed for CodeBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
65 static unsigned int allocation_size(CodeBuffer* cb, int header_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
66
a61af66fc99e Initial load
duke
parents:
diff changeset
67 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
68 // a) simple CodeBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // frame_complete is the offset from the beginning of the instructions
a61af66fc99e Initial load
duke
parents:
diff changeset
70 // to where the frame setup (from stackwalk viewpoint) is complete.
a61af66fc99e Initial load
duke
parents:
diff changeset
71 CodeBlob(const char* name, int header_size, int size, int frame_complete, int locs_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
72
a61af66fc99e Initial load
duke
parents:
diff changeset
73 // b) full CodeBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
74 CodeBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
75 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
76 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
77 int header_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
78 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
79 int frame_complete,
a61af66fc99e Initial load
duke
parents:
diff changeset
80 int frame_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
81 OopMapSet* oop_maps
a61af66fc99e Initial load
duke
parents:
diff changeset
82 );
a61af66fc99e Initial load
duke
parents:
diff changeset
83
a61af66fc99e Initial load
duke
parents:
diff changeset
84 // Deletion
a61af66fc99e Initial load
duke
parents:
diff changeset
85 void flush();
a61af66fc99e Initial load
duke
parents:
diff changeset
86
a61af66fc99e Initial load
duke
parents:
diff changeset
87 // Typing
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
88 virtual bool is_buffer_blob() const { return false; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
89 virtual bool is_nmethod() const { return false; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
90 virtual bool is_runtime_stub() const { return false; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
91 virtual bool is_deoptimization_stub() const { return false; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
92 virtual bool is_uncommon_trap_stub() const { return false; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
93 virtual bool is_exception_stub() const { return false; }
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
94 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
95 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
96 virtual bool is_method_handles_adapter_blob() const { return false; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
97
a61af66fc99e Initial load
duke
parents:
diff changeset
98 virtual bool is_compiled_by_c2() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
99 virtual bool is_compiled_by_c1() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
100
1135
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 989
diff changeset
101 // Casting
e66fd840cb6b 6893081: method handle & invokedynamic code needs additional cleanup (post 6815692, 6858164)
twisti
parents: 989
diff changeset
102 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
103
0
a61af66fc99e Initial load
duke
parents:
diff changeset
104 // Boundaries
a61af66fc99e Initial load
duke
parents:
diff changeset
105 address header_begin() const { return (address) this; }
a61af66fc99e Initial load
duke
parents:
diff changeset
106 address header_end() const { return ((address) this) + _header_size; };
a61af66fc99e Initial load
duke
parents:
diff changeset
107 relocInfo* relocation_begin() const { return (relocInfo*) header_end(); };
a61af66fc99e Initial load
duke
parents:
diff changeset
108 relocInfo* relocation_end() const { return (relocInfo*)(header_end() + _relocation_size); }
a61af66fc99e Initial load
duke
parents:
diff changeset
109 address instructions_begin() const { return (address) header_begin() + _instructions_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
110 address instructions_end() const { return (address) header_begin() + _data_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
111 address data_begin() const { return (address) header_begin() + _data_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
112 address data_end() const { return (address) header_begin() + _size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
113
a61af66fc99e Initial load
duke
parents:
diff changeset
114 // Offsets
a61af66fc99e Initial load
duke
parents:
diff changeset
115 int relocation_offset() const { return _header_size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
116 int instructions_offset() const { return _instructions_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
117 int data_offset() const { return _data_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
118
a61af66fc99e Initial load
duke
parents:
diff changeset
119 // Sizes
a61af66fc99e Initial load
duke
parents:
diff changeset
120 int size() const { return _size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
121 int header_size() const { return _header_size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
122 int relocation_size() const { return (address) relocation_end() - (address) relocation_begin(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
123 int instructions_size() const { return instructions_end() - instructions_begin(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
124 int data_size() const { return data_end() - data_begin(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
125
a61af66fc99e Initial load
duke
parents:
diff changeset
126 // Containment
a61af66fc99e Initial load
duke
parents:
diff changeset
127 bool blob_contains(address addr) const { return header_begin() <= addr && addr < data_end(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
128 bool relocation_contains(relocInfo* addr) const{ return relocation_begin() <= addr && addr < relocation_end(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
129 bool instructions_contains(address addr) const { return instructions_begin() <= addr && addr < instructions_end(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
130 bool data_contains(address addr) const { return data_begin() <= addr && addr < data_end(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
131 bool contains(address addr) const { return instructions_contains(addr); }
a61af66fc99e Initial load
duke
parents:
diff changeset
132 bool is_frame_complete_at(address addr) const { return instructions_contains(addr) &&
a61af66fc99e Initial load
duke
parents:
diff changeset
133 addr >= instructions_begin() + _frame_complete_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
134
a61af66fc99e Initial load
duke
parents:
diff changeset
135 // CodeCache support: really only used by the nmethods, but in order to get
a61af66fc99e Initial load
duke
parents:
diff changeset
136 // asserts and certain bookkeeping to work in the CodeCache they are defined
a61af66fc99e Initial load
duke
parents:
diff changeset
137 // virtual here.
a61af66fc99e Initial load
duke
parents:
diff changeset
138 virtual bool is_zombie() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
139 virtual bool is_locked_by_vm() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
140
a61af66fc99e Initial load
duke
parents:
diff changeset
141 virtual bool is_unloaded() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
142 virtual bool is_not_entrant() const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
143
a61af66fc99e Initial load
duke
parents:
diff changeset
144 // GC support
a61af66fc99e Initial load
duke
parents:
diff changeset
145 virtual bool is_alive() const = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
146
a61af66fc99e Initial load
duke
parents:
diff changeset
147 // OopMap for frame
a61af66fc99e Initial load
duke
parents:
diff changeset
148 OopMapSet* oop_maps() const { return _oop_maps; }
a61af66fc99e Initial load
duke
parents:
diff changeset
149 void set_oop_maps(OopMapSet* p);
a61af66fc99e Initial load
duke
parents:
diff changeset
150 OopMap* oop_map_for_return_address(address return_address);
a61af66fc99e Initial load
duke
parents:
diff changeset
151 virtual void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { ShouldNotReachHere(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
152
a61af66fc99e Initial load
duke
parents:
diff changeset
153 // Frame support
a61af66fc99e Initial load
duke
parents:
diff changeset
154 int frame_size() const { return _frame_size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
155 void set_frame_size(int size) { _frame_size = size; }
a61af66fc99e Initial load
duke
parents:
diff changeset
156
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // Returns true, if the next frame is responsible for GC'ing oops passed as arguments
a61af66fc99e Initial load
duke
parents:
diff changeset
158 virtual bool caller_must_gc_arguments(JavaThread* thread) const { return false; }
a61af66fc99e Initial load
duke
parents:
diff changeset
159
a61af66fc99e Initial load
duke
parents:
diff changeset
160 // Naming
a61af66fc99e Initial load
duke
parents:
diff changeset
161 const char* name() const { return _name; }
a61af66fc99e Initial load
duke
parents:
diff changeset
162 void set_name(const char* name) { _name = name; }
a61af66fc99e Initial load
duke
parents:
diff changeset
163
a61af66fc99e Initial load
duke
parents:
diff changeset
164 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
165 virtual void verify();
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
166 void print() const { print_on(tty); }
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
167 virtual void print_on(outputStream* st) const;
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
168 virtual void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
169
a61af66fc99e Initial load
duke
parents:
diff changeset
170 // Print the comment associated with offset on stream, if there is one
1155
4e6abf09f540 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 1135
diff changeset
171 virtual void print_block_comment(outputStream* stream, address block_begin) {
4e6abf09f540 6912062: disassembler plugin needs to produce symbolic information in product mode
jrose
parents: 1135
diff changeset
172 intptr_t offset = (intptr_t)(block_begin - instructions_begin());
0
a61af66fc99e Initial load
duke
parents:
diff changeset
173 _comments.print_block_comment(stream, offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
174 }
a61af66fc99e Initial load
duke
parents:
diff changeset
175
a61af66fc99e Initial load
duke
parents:
diff changeset
176 // Transfer ownership of comments to this CodeBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
177 void set_comments(CodeComments& comments) {
a61af66fc99e Initial load
duke
parents:
diff changeset
178 _comments.assign(comments);
a61af66fc99e Initial load
duke
parents:
diff changeset
179 }
a61af66fc99e Initial load
duke
parents:
diff changeset
180 };
a61af66fc99e Initial load
duke
parents:
diff changeset
181
a61af66fc99e Initial load
duke
parents:
diff changeset
182
a61af66fc99e Initial load
duke
parents:
diff changeset
183 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
184 // BufferBlob: used to hold non-relocatable machine code such as the interpreter, stubroutines, etc.
a61af66fc99e Initial load
duke
parents:
diff changeset
185
a61af66fc99e Initial load
duke
parents:
diff changeset
186 class BufferBlob: public CodeBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
187 friend class VMStructs;
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
188 friend class AdapterBlob;
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
189 friend class MethodHandlesAdapterBlob;
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
190
0
a61af66fc99e Initial load
duke
parents:
diff changeset
191 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
192 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
193 BufferBlob(const char* name, int size);
a61af66fc99e Initial load
duke
parents:
diff changeset
194 BufferBlob(const char* name, int size, CodeBuffer* cb);
a61af66fc99e Initial load
duke
parents:
diff changeset
195
a61af66fc99e Initial load
duke
parents:
diff changeset
196 void* operator new(size_t s, unsigned size);
a61af66fc99e Initial load
duke
parents:
diff changeset
197
a61af66fc99e Initial load
duke
parents:
diff changeset
198 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
199 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
200 static BufferBlob* create(const char* name, int buffer_size);
a61af66fc99e Initial load
duke
parents:
diff changeset
201 static BufferBlob* create(const char* name, CodeBuffer* cb);
a61af66fc99e Initial load
duke
parents:
diff changeset
202
a61af66fc99e Initial load
duke
parents:
diff changeset
203 static void free(BufferBlob* buf);
a61af66fc99e Initial load
duke
parents:
diff changeset
204
a61af66fc99e Initial load
duke
parents:
diff changeset
205 // Typing
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
206 virtual bool is_buffer_blob() const { return true; }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
207
a61af66fc99e Initial load
duke
parents:
diff changeset
208 // GC/Verification support
a61af66fc99e Initial load
duke
parents:
diff changeset
209 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
210 bool is_alive() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
211
a61af66fc99e Initial load
duke
parents:
diff changeset
212 void verify();
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
213 void print_on(outputStream* st) const;
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
214 void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
215 };
a61af66fc99e Initial load
duke
parents:
diff changeset
216
a61af66fc99e Initial load
duke
parents:
diff changeset
217
a61af66fc99e Initial load
duke
parents:
diff changeset
218 //----------------------------------------------------------------------------------------------------
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
219 // 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
220
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
221 class AdapterBlob: public BufferBlob {
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
222 private:
1663
7139e81efd2d 6970566: runThese fails with SIGSEGV
never
parents: 1579
diff changeset
223 AdapterBlob(int size, CodeBuffer* cb);
1299
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
224
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
225 public:
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
226 // Creation
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
227 static AdapterBlob* create(CodeBuffer* cb);
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
228
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
229 // Typing
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
230 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
231 };
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
232
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
233
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
234 //----------------------------------------------------------------------------------------------------
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
235 // MethodHandlesAdapterBlob: used to hold MethodHandles 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 MethodHandlesAdapterBlob: public BufferBlob {
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
238 private:
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
239 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
240 MethodHandlesAdapterBlob(int size, CodeBuffer* cb) : BufferBlob("MethodHandles adapters", size, cb) {}
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
241
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
242 public:
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
243 // Creation
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
244 static MethodHandlesAdapterBlob* create(int buffer_size);
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
245
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
246 // Typing
9eba43136cb5 6934494: JSR 292 MethodHandles adapters should be generated into their own CodeBlob
twisti
parents: 1155
diff changeset
247 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
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 //----------------------------------------------------------------------------------------------------
0
a61af66fc99e Initial load
duke
parents:
diff changeset
252 // RuntimeStub: describes stubs used by compiled code to call a (static) C++ runtime routine
a61af66fc99e Initial load
duke
parents:
diff changeset
253
a61af66fc99e Initial load
duke
parents:
diff changeset
254 class RuntimeStub: public CodeBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
255 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
256 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
257 bool _caller_must_gc_arguments;
a61af66fc99e Initial load
duke
parents:
diff changeset
258
a61af66fc99e Initial load
duke
parents:
diff changeset
259 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
260 RuntimeStub(
a61af66fc99e Initial load
duke
parents:
diff changeset
261 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
262 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
263 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
264 int frame_complete,
a61af66fc99e Initial load
duke
parents:
diff changeset
265 int frame_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
266 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
267 bool caller_must_gc_arguments
a61af66fc99e Initial load
duke
parents:
diff changeset
268 );
a61af66fc99e Initial load
duke
parents:
diff changeset
269
a61af66fc99e Initial load
duke
parents:
diff changeset
270 void* operator new(size_t s, unsigned size);
a61af66fc99e Initial load
duke
parents:
diff changeset
271
a61af66fc99e Initial load
duke
parents:
diff changeset
272 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
273 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
274 static RuntimeStub* new_runtime_stub(
a61af66fc99e Initial load
duke
parents:
diff changeset
275 const char* stub_name,
a61af66fc99e Initial load
duke
parents:
diff changeset
276 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
277 int frame_complete,
a61af66fc99e Initial load
duke
parents:
diff changeset
278 int frame_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
279 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
280 bool caller_must_gc_arguments
a61af66fc99e Initial load
duke
parents:
diff changeset
281 );
a61af66fc99e Initial load
duke
parents:
diff changeset
282
a61af66fc99e Initial load
duke
parents:
diff changeset
283 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
284 bool is_runtime_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
285
a61af66fc99e Initial load
duke
parents:
diff changeset
286 // GC support
a61af66fc99e Initial load
duke
parents:
diff changeset
287 bool caller_must_gc_arguments(JavaThread* thread) const { return _caller_must_gc_arguments; }
a61af66fc99e Initial load
duke
parents:
diff changeset
288
a61af66fc99e Initial load
duke
parents:
diff changeset
289 address entry_point() { return instructions_begin(); }
a61af66fc99e Initial load
duke
parents:
diff changeset
290
a61af66fc99e Initial load
duke
parents:
diff changeset
291 // GC/Verification support
a61af66fc99e Initial load
duke
parents:
diff changeset
292 void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
293 bool is_alive() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
294
a61af66fc99e Initial load
duke
parents:
diff changeset
295 void verify();
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
296 void print_on(outputStream* st) const;
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
297 void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
298 };
a61af66fc99e Initial load
duke
parents:
diff changeset
299
a61af66fc99e Initial load
duke
parents:
diff changeset
300
a61af66fc99e Initial load
duke
parents:
diff changeset
301 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
302 // Super-class for all blobs that exist in only one instance. Implements default behaviour.
a61af66fc99e Initial load
duke
parents:
diff changeset
303
a61af66fc99e Initial load
duke
parents:
diff changeset
304 class SingletonBlob: public CodeBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
305 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
306 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
307 SingletonBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
308 const char* name,
a61af66fc99e Initial load
duke
parents:
diff changeset
309 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
310 int header_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
311 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
312 int frame_size,
a61af66fc99e Initial load
duke
parents:
diff changeset
313 OopMapSet* oop_maps
a61af66fc99e Initial load
duke
parents:
diff changeset
314 )
a61af66fc99e Initial load
duke
parents:
diff changeset
315 : CodeBlob(name, cb, header_size, size, CodeOffsets::frame_never_safe, frame_size, oop_maps)
a61af66fc99e Initial load
duke
parents:
diff changeset
316 {};
a61af66fc99e Initial load
duke
parents:
diff changeset
317
a61af66fc99e Initial load
duke
parents:
diff changeset
318 bool is_alive() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
319
a61af66fc99e Initial load
duke
parents:
diff changeset
320 void verify(); // does nothing
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
321 void print_on(outputStream* st) const;
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
322 void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
323 };
a61af66fc99e Initial load
duke
parents:
diff changeset
324
a61af66fc99e Initial load
duke
parents:
diff changeset
325
a61af66fc99e Initial load
duke
parents:
diff changeset
326 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
327 // DeoptimizationBlob
a61af66fc99e Initial load
duke
parents:
diff changeset
328
a61af66fc99e Initial load
duke
parents:
diff changeset
329 class DeoptimizationBlob: public SingletonBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
330 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
331 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
332 int _unpack_offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
333 int _unpack_with_exception;
a61af66fc99e Initial load
duke
parents:
diff changeset
334 int _unpack_with_reexecution;
a61af66fc99e Initial load
duke
parents:
diff changeset
335
a61af66fc99e Initial load
duke
parents:
diff changeset
336 int _unpack_with_exception_in_tls;
a61af66fc99e Initial load
duke
parents:
diff changeset
337
a61af66fc99e Initial load
duke
parents:
diff changeset
338 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
339 DeoptimizationBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
340 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
341 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
342 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
343 int unpack_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
344 int unpack_with_exception_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
345 int unpack_with_reexecution_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
346 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
347 );
a61af66fc99e Initial load
duke
parents:
diff changeset
348
a61af66fc99e Initial load
duke
parents:
diff changeset
349 void* operator new(size_t s, unsigned size);
a61af66fc99e Initial load
duke
parents:
diff changeset
350
a61af66fc99e Initial load
duke
parents:
diff changeset
351 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
352 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
353 static DeoptimizationBlob* create(
a61af66fc99e Initial load
duke
parents:
diff changeset
354 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
355 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
356 int unpack_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
357 int unpack_with_exception_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
358 int unpack_with_reexecution_offset,
a61af66fc99e Initial load
duke
parents:
diff changeset
359 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
360 );
a61af66fc99e Initial load
duke
parents:
diff changeset
361
a61af66fc99e Initial load
duke
parents:
diff changeset
362 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
363 bool is_deoptimization_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
364 const DeoptimizationBlob *as_deoptimization_stub() const { return this; }
a61af66fc99e Initial load
duke
parents:
diff changeset
365 bool exception_address_is_unpack_entry(address pc) const {
a61af66fc99e Initial load
duke
parents:
diff changeset
366 address unpack_pc = unpack();
a61af66fc99e Initial load
duke
parents:
diff changeset
367 return (pc == unpack_pc || (pc + frame::pc_return_offset) == unpack_pc);
a61af66fc99e Initial load
duke
parents:
diff changeset
368 }
a61af66fc99e Initial load
duke
parents:
diff changeset
369
a61af66fc99e Initial load
duke
parents:
diff changeset
370
a61af66fc99e Initial load
duke
parents:
diff changeset
371
a61af66fc99e Initial load
duke
parents:
diff changeset
372
a61af66fc99e Initial load
duke
parents:
diff changeset
373 // GC for args
a61af66fc99e Initial load
duke
parents:
diff changeset
374 void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) { /* Nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
375
a61af66fc99e Initial load
duke
parents:
diff changeset
376 // Printing
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1663
diff changeset
377 void print_value_on(outputStream* st) const;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
378
a61af66fc99e Initial load
duke
parents:
diff changeset
379 address unpack() const { return instructions_begin() + _unpack_offset; }
a61af66fc99e Initial load
duke
parents:
diff changeset
380 address unpack_with_exception() const { return instructions_begin() + _unpack_with_exception; }
a61af66fc99e Initial load
duke
parents:
diff changeset
381 address unpack_with_reexecution() const { return instructions_begin() + _unpack_with_reexecution; }
a61af66fc99e Initial load
duke
parents:
diff changeset
382
a61af66fc99e Initial load
duke
parents:
diff changeset
383 // Alternate entry point for C1 where the exception and issuing pc
a61af66fc99e Initial load
duke
parents:
diff changeset
384 // are in JavaThread::_exception_oop and JavaThread::_exception_pc
a61af66fc99e Initial load
duke
parents:
diff changeset
385 // instead of being in registers. This is needed because C1 doesn't
a61af66fc99e Initial load
duke
parents:
diff changeset
386 // model exception paths in a way that keeps these registers free so
a61af66fc99e Initial load
duke
parents:
diff changeset
387 // there may be live values in those registers during deopt.
a61af66fc99e Initial load
duke
parents:
diff changeset
388 void set_unpack_with_exception_in_tls_offset(int offset) {
a61af66fc99e Initial load
duke
parents:
diff changeset
389 _unpack_with_exception_in_tls = offset;
a61af66fc99e Initial load
duke
parents:
diff changeset
390 assert(contains(instructions_begin() + _unpack_with_exception_in_tls), "must be PC inside codeblob");
a61af66fc99e Initial load
duke
parents:
diff changeset
391 }
a61af66fc99e Initial load
duke
parents:
diff changeset
392 address unpack_with_exception_in_tls() const { return instructions_begin() + _unpack_with_exception_in_tls; }
a61af66fc99e Initial load
duke
parents:
diff changeset
393 };
a61af66fc99e Initial load
duke
parents:
diff changeset
394
a61af66fc99e Initial load
duke
parents:
diff changeset
395
a61af66fc99e Initial load
duke
parents:
diff changeset
396 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
397 // UncommonTrapBlob (currently only used by Compiler 2)
a61af66fc99e Initial load
duke
parents:
diff changeset
398
a61af66fc99e Initial load
duke
parents:
diff changeset
399 #ifdef COMPILER2
a61af66fc99e Initial load
duke
parents:
diff changeset
400
a61af66fc99e Initial load
duke
parents:
diff changeset
401 class UncommonTrapBlob: public SingletonBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
402 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
403 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
404 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
405 UncommonTrapBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
406 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
407 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
408 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
409 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
410 );
a61af66fc99e Initial load
duke
parents:
diff changeset
411
a61af66fc99e Initial load
duke
parents:
diff changeset
412 void* operator new(size_t s, unsigned size);
a61af66fc99e Initial load
duke
parents:
diff changeset
413
a61af66fc99e Initial load
duke
parents:
diff changeset
414 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
415 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
416 static UncommonTrapBlob* create(
a61af66fc99e Initial load
duke
parents:
diff changeset
417 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
418 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
419 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
420 );
a61af66fc99e Initial load
duke
parents:
diff changeset
421
a61af66fc99e Initial load
duke
parents:
diff changeset
422 // GC for args
a61af66fc99e Initial load
duke
parents:
diff changeset
423 void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
424
a61af66fc99e Initial load
duke
parents:
diff changeset
425 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
426 bool is_uncommon_trap_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
427 };
a61af66fc99e Initial load
duke
parents:
diff changeset
428
a61af66fc99e Initial load
duke
parents:
diff changeset
429
a61af66fc99e Initial load
duke
parents:
diff changeset
430 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
431 // ExceptionBlob: used for exception unwinding in compiled code (currently only used by Compiler 2)
a61af66fc99e Initial load
duke
parents:
diff changeset
432
a61af66fc99e Initial load
duke
parents:
diff changeset
433 class ExceptionBlob: public SingletonBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
434 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
435 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
436 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
437 ExceptionBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
438 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
439 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
440 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
441 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
442 );
a61af66fc99e Initial load
duke
parents:
diff changeset
443
a61af66fc99e Initial load
duke
parents:
diff changeset
444 void* operator new(size_t s, unsigned size);
a61af66fc99e Initial load
duke
parents:
diff changeset
445
a61af66fc99e Initial load
duke
parents:
diff changeset
446 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
447 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
448 static ExceptionBlob* create(
a61af66fc99e Initial load
duke
parents:
diff changeset
449 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
450 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
451 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
452 );
a61af66fc99e Initial load
duke
parents:
diff changeset
453
a61af66fc99e Initial load
duke
parents:
diff changeset
454 // GC for args
a61af66fc99e Initial load
duke
parents:
diff changeset
455 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
456
a61af66fc99e Initial load
duke
parents:
diff changeset
457 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
458 bool is_exception_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
459 };
a61af66fc99e Initial load
duke
parents:
diff changeset
460 #endif // COMPILER2
a61af66fc99e Initial load
duke
parents:
diff changeset
461
a61af66fc99e Initial load
duke
parents:
diff changeset
462
a61af66fc99e Initial load
duke
parents:
diff changeset
463 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
464 // SafepointBlob: handles illegal_instruction exceptions during a safepoint
a61af66fc99e Initial load
duke
parents:
diff changeset
465
a61af66fc99e Initial load
duke
parents:
diff changeset
466 class SafepointBlob: public SingletonBlob {
a61af66fc99e Initial load
duke
parents:
diff changeset
467 friend class VMStructs;
a61af66fc99e Initial load
duke
parents:
diff changeset
468 private:
a61af66fc99e Initial load
duke
parents:
diff changeset
469 // Creation support
a61af66fc99e Initial load
duke
parents:
diff changeset
470 SafepointBlob(
a61af66fc99e Initial load
duke
parents:
diff changeset
471 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
472 int size,
a61af66fc99e Initial load
duke
parents:
diff changeset
473 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
474 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
475 );
a61af66fc99e Initial load
duke
parents:
diff changeset
476
a61af66fc99e Initial load
duke
parents:
diff changeset
477 void* operator new(size_t s, unsigned size);
a61af66fc99e Initial load
duke
parents:
diff changeset
478
a61af66fc99e Initial load
duke
parents:
diff changeset
479 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
480 // Creation
a61af66fc99e Initial load
duke
parents:
diff changeset
481 static SafepointBlob* create(
a61af66fc99e Initial load
duke
parents:
diff changeset
482 CodeBuffer* cb,
a61af66fc99e Initial load
duke
parents:
diff changeset
483 OopMapSet* oop_maps,
a61af66fc99e Initial load
duke
parents:
diff changeset
484 int frame_size
a61af66fc99e Initial load
duke
parents:
diff changeset
485 );
a61af66fc99e Initial load
duke
parents:
diff changeset
486
a61af66fc99e Initial load
duke
parents:
diff changeset
487 // GC for args
a61af66fc99e Initial load
duke
parents:
diff changeset
488 void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { /* nothing to do */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
489
a61af66fc99e Initial load
duke
parents:
diff changeset
490 // Typing
a61af66fc99e Initial load
duke
parents:
diff changeset
491 bool is_safepoint_stub() const { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
492 };