Mercurial > hg > truffle
annotate src/cpu/x86/vm/vtableStubs_x86_64.cpp @ 2007:5ddfcf4b079e
7003554: (tiered) assert(is_null_object() || handle() != NULL) failed: cannot embed null pointer
Summary: C1 with profiling doesn't check whether the MDO has been really allocated, which can silently fail if the perm gen is full. The solution is to check if the allocation failed and bailout out of inlining or compilation.
Reviewed-by: kvn, never
author | iveresov |
---|---|
date | Thu, 02 Dec 2010 17:21:12 -0800 |
parents | f95d63e2154a |
children | 1d7922586cf6 |
rev | line source |
---|---|
0 | 1 /* |
1783 | 2 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
844
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
844
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:
844
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #include "precompiled.hpp" |
26 #include "asm/assembler.hpp" | |
27 #include "assembler_x86.inline.hpp" | |
28 #include "code/vtableStubs.hpp" | |
29 #include "interp_masm_x86_64.hpp" | |
30 #include "memory/resourceArea.hpp" | |
31 #include "oops/instanceKlass.hpp" | |
32 #include "oops/klassVtable.hpp" | |
33 #include "runtime/sharedRuntime.hpp" | |
34 #include "vmreg_x86.inline.hpp" | |
35 #ifdef COMPILER2 | |
36 #include "opto/runtime.hpp" | |
37 #endif | |
0 | 38 |
39 // machine-dependent part of VtableStubs: create VtableStub of correct size and | |
40 // initialize its code | |
41 | |
42 #define __ masm-> | |
43 | |
44 #ifndef PRODUCT | |
45 extern "C" void bad_compiled_vtable_index(JavaThread* thread, | |
46 oop receiver, | |
47 int index); | |
48 #endif | |
49 | |
50 VtableStub* VtableStubs::create_vtable_stub(int vtable_index) { | |
51 const int amd64_code_length = VtableStub::pd_code_size_limit(true); | |
52 VtableStub* s = new(amd64_code_length) VtableStub(true, vtable_index); | |
53 ResourceMark rm; | |
54 CodeBuffer cb(s->entry_point(), amd64_code_length); | |
55 MacroAssembler* masm = new MacroAssembler(&cb); | |
56 | |
57 #ifndef PRODUCT | |
58 if (CountCompiledCalls) { | |
59 __ incrementl(ExternalAddress((address) SharedRuntime::nof_megamorphic_calls_addr())); | |
60 } | |
61 #endif | |
62 | |
63 // get receiver (need to skip return address on top of stack) | |
64 assert(VtableStub::receiver_location() == j_rarg0->as_VMReg(), "receiver expected in j_rarg0"); | |
65 | |
66 // Free registers (non-args) are rax, rbx | |
67 | |
68 // get receiver klass | |
69 address npe_addr = __ pc(); | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
16
diff
changeset
|
70 __ load_klass(rax, j_rarg0); |
0 | 71 |
72 // compute entry offset (in words) | |
73 int entry_offset = | |
74 instanceKlass::vtable_start_offset() + vtable_index * vtableEntry::size(); | |
75 | |
76 #ifndef PRODUCT | |
77 if (DebugVtables) { | |
78 Label L; | |
79 // check offset vs vtable length | |
80 __ cmpl(Address(rax, instanceKlass::vtable_length_offset() * wordSize), | |
81 vtable_index * vtableEntry::size()); | |
82 __ jcc(Assembler::greater, L); | |
83 __ movl(rbx, vtable_index); | |
84 __ call_VM(noreg, | |
85 CAST_FROM_FN_PTR(address, bad_compiled_vtable_index), j_rarg0, rbx); | |
86 __ bind(L); | |
87 } | |
88 #endif // PRODUCT | |
89 | |
90 // load methodOop and target address | |
91 const Register method = rbx; | |
92 | |
304 | 93 __ movptr(method, Address(rax, |
94 entry_offset * wordSize + | |
95 vtableEntry::method_offset_in_bytes())); | |
0 | 96 if (DebugVtables) { |
97 Label L; | |
304 | 98 __ cmpptr(method, (int32_t)NULL_WORD); |
0 | 99 __ jcc(Assembler::equal, L); |
304 | 100 __ cmpptr(Address(method, methodOopDesc::from_compiled_offset()), (int32_t)NULL_WORD); |
0 | 101 __ jcc(Assembler::notZero, L); |
102 __ stop("Vtable entry is NULL"); | |
103 __ bind(L); | |
104 } | |
105 // rax: receiver klass | |
106 // rbx: methodOop | |
107 // rcx: receiver | |
108 address ame_addr = __ pc(); | |
109 __ jmp( Address(rbx, methodOopDesc::from_compiled_offset())); | |
110 | |
111 __ flush(); | |
623
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
112 |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
113 if (PrintMiscellaneous && (WizardMode || Verbose)) { |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
114 tty->print_cr("vtable #%d at "PTR_FORMAT"[%d] left over: %d", |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
115 vtable_index, s->entry_point(), |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
116 (int)(s->code_end() - s->entry_point()), |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
117 (int)(s->code_end() - __ pc())); |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
118 } |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
119 guarantee(__ pc() <= s->code_end(), "overflowed buffer"); |
709
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
120 // shut the door on sizing bugs |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
121 int slop = 3; // 32-bit offset is this much larger than an 8-bit one |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
122 assert(vtable_index > 10 || __ pc() + slop <= s->code_end(), "room for 32-bit offset"); |
623
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
123 |
0 | 124 s->set_exception_points(npe_addr, ame_addr); |
125 return s; | |
126 } | |
127 | |
128 | |
623
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
129 VtableStub* VtableStubs::create_itable_stub(int itable_index) { |
0 | 130 // Note well: pd_code_size_limit is the absolute minimum we can get |
131 // away with. If you add code here, bump the code stub size | |
132 // returned by pd_code_size_limit! | |
133 const int amd64_code_length = VtableStub::pd_code_size_limit(false); | |
623
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
134 VtableStub* s = new(amd64_code_length) VtableStub(false, itable_index); |
0 | 135 ResourceMark rm; |
136 CodeBuffer cb(s->entry_point(), amd64_code_length); | |
137 MacroAssembler* masm = new MacroAssembler(&cb); | |
138 | |
139 #ifndef PRODUCT | |
140 if (CountCompiledCalls) { | |
141 __ incrementl(ExternalAddress((address) SharedRuntime::nof_megamorphic_calls_addr())); | |
142 } | |
143 #endif | |
144 | |
145 // Entry arguments: | |
146 // rax: Interface | |
147 // j_rarg0: Receiver | |
148 | |
149 // Free registers (non-args) are rax (interface), rbx | |
150 | |
151 // get receiver (need to skip return address on top of stack) | |
152 | |
153 assert(VtableStub::receiver_location() == j_rarg0->as_VMReg(), "receiver expected in j_rarg0"); | |
154 // get receiver klass (also an implicit null-check) | |
155 address npe_addr = __ pc(); | |
156 | |
623
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
157 // Most registers are in use; we'll use rax, rbx, r10, r11 |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
158 // (various calling sequences use r[cd]x, r[sd]i, r[89]; stay away from them) |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
159 __ load_klass(r10, j_rarg0); |
0 | 160 |
161 // If we take a trap while this arg is on the stack we will not | |
162 // be able to walk the stack properly. This is not an issue except | |
163 // when there are mistakes in this assembly code that could generate | |
164 // a spurious fault. Ask me how I know... | |
165 | |
623
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
166 const Register method = rbx; |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
167 Label throw_icce; |
0 | 168 |
169 // Get methodOop and entrypoint for compiler | |
623
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
170 __ lookup_interface_method(// inputs: rec. class, interface, itable index |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
171 r10, rax, itable_index, |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
172 // outputs: method, scan temp. reg |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
173 method, r11, |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
174 throw_icce); |
0 | 175 |
176 // method (rbx): methodOop | |
177 // j_rarg0: receiver | |
178 | |
179 #ifdef ASSERT | |
16
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
180 if (DebugVtables) { |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
181 Label L2; |
304 | 182 __ cmpptr(method, (int32_t)NULL_WORD); |
16
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
183 __ jcc(Assembler::equal, L2); |
304 | 184 __ cmpptr(Address(method, methodOopDesc::from_compiled_offset()), (int32_t)NULL_WORD); |
16
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
185 __ jcc(Assembler::notZero, L2); |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
186 __ stop("compiler entrypoint is null"); |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
187 __ bind(L2); |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
188 } |
0 | 189 #endif // ASSERT |
190 | |
16
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
191 // rbx: methodOop |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
192 // j_rarg0: receiver |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
193 address ame_addr = __ pc(); |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
194 __ jmp(Address(method, methodOopDesc::from_compiled_offset())); |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
195 |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
196 __ bind(throw_icce); |
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
197 __ jump(RuntimeAddress(StubRoutines::throw_IncompatibleClassChangeError_entry())); |
0 | 198 |
199 __ flush(); | |
16
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
200 |
623
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
201 if (PrintMiscellaneous && (WizardMode || Verbose)) { |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
202 tty->print_cr("itable #%d at "PTR_FORMAT"[%d] left over: %d", |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
203 itable_index, s->entry_point(), |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
204 (int)(s->code_end() - s->entry_point()), |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
205 (int)(s->code_end() - __ pc())); |
9adddb8c0fc8
6812831: factor duplicated assembly code for megamorphic invokeinterface (for 6655638)
jrose
parents:
304
diff
changeset
|
206 } |
16
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
207 guarantee(__ pc() <= s->code_end(), "overflowed buffer"); |
709
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
208 // shut the door on sizing bugs |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
209 int slop = 3; // 32-bit offset is this much larger than an 8-bit one |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
210 assert(itable_index > 10 || __ pc() + slop <= s->code_end(), "room for 32-bit offset"); |
16
f8236e79048a
6664627: Merge changes made only in hotspot 11 forward to jdk 7
dcubed
parents:
0
diff
changeset
|
211 |
0 | 212 s->set_exception_points(npe_addr, ame_addr); |
213 return s; | |
214 } | |
215 | |
216 int VtableStub::pd_code_size_limit(bool is_vtable_stub) { | |
217 if (is_vtable_stub) { | |
218 // Vtable stub size | |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
16
diff
changeset
|
219 return (DebugVtables ? 512 : 24) + (CountCompiledCalls ? 13 : 0) + |
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
16
diff
changeset
|
220 (UseCompressedOops ? 16 : 0); // 1 leaq can be 3 bytes + 1 long |
0 | 221 } else { |
222 // Itable stub size | |
1783 | 223 return (DebugVtables ? 512 : 74) + (CountCompiledCalls ? 13 : 0) + |
113
ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
coleenp
parents:
16
diff
changeset
|
224 (UseCompressedOops ? 32 : 0); // 2 leaqs |
0 | 225 } |
709
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
226 // In order to tune these parameters, run the JVM with VM options |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
227 // +PrintMiscellaneous and +WizardMode to see information about |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
228 // actual itable stubs. Look for lines like this: |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
229 // itable #1 at 0x5551212[71] left over: 3 |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
230 // Reduce the constants so that the "left over" number is >=3 |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
231 // for the common cases. |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
232 // Do not aim at a left-over number of zero, because a |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
233 // large vtable or itable index (>= 32) will require a 32-bit |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
234 // immediate displacement instead of an 8-bit one. |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
235 // |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
236 // The JVM98 app. _202_jess has a megamorphic interface call. |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
237 // The itable code looks like this: |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
238 // Decoding VtableStub itbl[1]@12 |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
239 // mov 0x8(%rsi),%r10 |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
240 // mov 0x198(%r10),%r11d |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
241 // lea 0x218(%r10,%r11,8),%r11 |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
242 // lea 0x8(%r10),%r10 |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
243 // mov (%r11),%rbx |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
244 // cmp %rbx,%rax |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
245 // je success |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
246 // loop: |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
247 // test %rbx,%rbx |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
248 // je throw_icce |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
249 // add $0x10,%r11 |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
250 // mov (%r11),%rbx |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
251 // cmp %rbx,%rax |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
252 // jne loop |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
253 // success: |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
254 // mov 0x8(%r11),%r11d |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
255 // mov (%r10,%r11,1),%rbx |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
256 // jmpq *0x60(%rbx) |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
257 // throw_icce: |
1d037ecd7960
6827505: sizing logic for vtable and itable stubs needs self-check
jrose
parents:
623
diff
changeset
|
258 // jmpq throw_ICCE_entry |
0 | 259 } |
260 | |
261 int VtableStub::pd_code_alignment() { | |
262 return wordSize; | |
263 } |