Wed, 05 Dec 2007 09:00:00 -0800
6664627: Merge changes made only in hotspot 11 forward to jdk 7
Reviewed-by: jcoomes
1.1 --- a/src/cpu/sparc/vm/stubGenerator_sparc.cpp Tue Dec 04 16:28:18 2007 -0800 1.2 +++ b/src/cpu/sparc/vm/stubGenerator_sparc.cpp Wed Dec 05 09:00:00 2007 -0800 1.3 @@ -2911,6 +2911,7 @@ 1.4 1.5 // These entry points require SharedInfo::stack0 to be set up in non-core builds 1.6 StubRoutines::_throw_AbstractMethodError_entry = generate_throw_exception("AbstractMethodError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_AbstractMethodError), false); 1.7 + StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError), false); 1.8 StubRoutines::_throw_ArithmeticException_entry = generate_throw_exception("ArithmeticException throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_ArithmeticException), true); 1.9 StubRoutines::_throw_NullPointerException_entry = generate_throw_exception("NullPointerException throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException), true); 1.10 StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call), false);
2.1 --- a/src/cpu/sparc/vm/vtableStubs_sparc.cpp Tue Dec 04 16:28:18 2007 -0800 2.2 +++ b/src/cpu/sparc/vm/vtableStubs_sparc.cpp Wed Dec 05 09:00:00 2007 -0800 2.3 @@ -175,17 +175,12 @@ 2.4 // %%%% Could load both offset and interface in one ldx, if they were 2.5 // in the opposite order. This would save a load. 2.6 __ ld_ptr(L0, base + itableOffsetEntry::interface_offset_in_bytes(), L1); 2.7 -#ifdef ASSERT 2.8 - Label ok; 2.9 - // Check that entry is non-null and an Oop 2.10 - __ bpr(Assembler::rc_nz, false, Assembler::pt, L1, ok); 2.11 - __ delayed()->nop(); 2.12 - __ stop("null entry point found in itable's offset table"); 2.13 - __ bind(ok); 2.14 - __ verify_oop(L1); 2.15 -#endif // ASSERT 2.16 2.17 - __ cmp(G5_interface, L1); 2.18 + // If the entry is NULL then we've reached the end of the table 2.19 + // without finding the expected interface, so throw an exception 2.20 + Label throw_icce; 2.21 + __ bpr(Assembler::rc_z, false, Assembler::pn, L1, throw_icce); 2.22 + __ delayed()->cmp(G5_interface, L1); 2.23 __ brx(Assembler::notEqual, true, Assembler::pn, search); 2.24 __ delayed()->add(L0, itableOffsetEntry::size() * wordSize, L0); 2.25 2.26 @@ -223,24 +218,30 @@ 2.27 __ JMP(G3_scratch, 0); 2.28 __ delayed()->nop(); 2.29 2.30 + __ bind(throw_icce); 2.31 + Address icce(G3_scratch, StubRoutines::throw_IncompatibleClassChangeError_entry()); 2.32 + __ jump_to(icce, 0); 2.33 + __ delayed()->restore(); 2.34 + 2.35 masm->flush(); 2.36 + 2.37 + guarantee(__ pc() <= s->code_end(), "overflowed buffer"); 2.38 + 2.39 s->set_exception_points(npe_addr, ame_addr); 2.40 return s; 2.41 } 2.42 2.43 2.44 int VtableStub::pd_code_size_limit(bool is_vtable_stub) { 2.45 - if (TraceJumps || DebugVtables || CountCompiledCalls || VerifyOops) return 999; 2.46 + if (TraceJumps || DebugVtables || CountCompiledCalls || VerifyOops) return 1000; 2.47 else { 2.48 const int slop = 2*BytesPerInstWord; // sethi;add (needed for long offsets) 2.49 if (is_vtable_stub) { 2.50 const int basic = 5*BytesPerInstWord; // ld;ld;ld,jmp,nop 2.51 return basic + slop; 2.52 } else { 2.53 -#ifdef ASSERT 2.54 - return 999; 2.55 -#endif // ASSERT 2.56 - const int basic = 17*BytesPerInstWord; // save, ld, ld, sll, and, add, add, ld, cmp, br, add, ld, add, ld, ld, jmp, restore 2.57 + // save, ld, ld, sll, and, add, add, ld, cmp, br, add, ld, add, ld, ld, jmp, restore, sethi, jmpl, restore 2.58 + const int basic = (20 LP64_ONLY(+ 6)) * BytesPerInstWord; 2.59 return (basic + slop); 2.60 } 2.61 } 2.62 @@ -252,29 +253,3 @@ 2.63 const unsigned int icache_line_size = 32; 2.64 return icache_line_size; 2.65 } 2.66 - 2.67 - 2.68 -//Reconciliation History 2.69 -// 1.2 97/12/09 17:13:31 vtableStubs_i486.cpp 2.70 -// 1.4 98/01/21 19:18:37 vtableStubs_i486.cpp 2.71 -// 1.5 98/02/13 16:33:55 vtableStubs_i486.cpp 2.72 -// 1.7 98/03/05 17:17:28 vtableStubs_i486.cpp 2.73 -// 1.9 98/05/18 09:26:17 vtableStubs_i486.cpp 2.74 -// 1.10 98/05/26 16:28:13 vtableStubs_i486.cpp 2.75 -// 1.11 98/05/27 08:51:35 vtableStubs_i486.cpp 2.76 -// 1.12 98/06/15 15:04:12 vtableStubs_i486.cpp 2.77 -// 1.13 98/07/28 18:44:22 vtableStubs_i486.cpp 2.78 -// 1.15 98/08/28 11:31:19 vtableStubs_i486.cpp 2.79 -// 1.16 98/09/02 12:58:31 vtableStubs_i486.cpp 2.80 -// 1.17 98/09/04 12:15:52 vtableStubs_i486.cpp 2.81 -// 1.18 98/11/19 11:55:24 vtableStubs_i486.cpp 2.82 -// 1.19 99/01/12 14:57:56 vtableStubs_i486.cpp 2.83 -// 1.20 99/01/19 17:42:52 vtableStubs_i486.cpp 2.84 -// 1.22 99/01/21 10:29:25 vtableStubs_i486.cpp 2.85 -// 1.30 99/06/02 15:27:39 vtableStubs_i486.cpp 2.86 -// 1.26 99/06/24 14:25:07 vtableStubs_i486.cpp 2.87 -// 1.23 99/02/22 14:37:52 vtableStubs_i486.cpp 2.88 -// 1.28 99/06/29 18:06:17 vtableStubs_i486.cpp 2.89 -// 1.29 99/07/22 17:03:44 vtableStubs_i486.cpp 2.90 -// 1.30 99/08/11 09:33:27 vtableStubs_i486.cpp 2.91 -//End
3.1 --- a/src/cpu/x86/vm/stubGenerator_x86_32.cpp Tue Dec 04 16:28:18 2007 -0800 3.2 +++ b/src/cpu/x86/vm/stubGenerator_x86_32.cpp Wed Dec 05 09:00:00 2007 -0800 3.3 @@ -2151,6 +2151,7 @@ 3.4 // These entry points require SharedInfo::stack0 to be set up in non-core builds 3.5 // and need to be relocatable, so they each fabricate a RuntimeStub internally. 3.6 StubRoutines::_throw_AbstractMethodError_entry = generate_throw_exception("AbstractMethodError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_AbstractMethodError), false); 3.7 + StubRoutines::_throw_IncompatibleClassChangeError_entry= generate_throw_exception("IncompatibleClassChangeError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_IncompatibleClassChangeError), false); 3.8 StubRoutines::_throw_ArithmeticException_entry = generate_throw_exception("ArithmeticException throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_ArithmeticException), true); 3.9 StubRoutines::_throw_NullPointerException_entry = generate_throw_exception("NullPointerException throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException), true); 3.10 StubRoutines::_throw_NullPointerException_at_call_entry= generate_throw_exception("NullPointerException at call throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_NullPointerException_at_call), false);
4.1 --- a/src/cpu/x86/vm/stubGenerator_x86_64.cpp Tue Dec 04 16:28:18 2007 -0800 4.2 +++ b/src/cpu/x86/vm/stubGenerator_x86_64.cpp Wed Dec 05 09:00:00 2007 -0800 4.3 @@ -2832,6 +2832,13 @@ 4.4 throw_AbstractMethodError), 4.5 false); 4.6 4.7 + StubRoutines::_throw_IncompatibleClassChangeError_entry = 4.8 + generate_throw_exception("IncompatibleClassChangeError throw_exception", 4.9 + CAST_FROM_FN_PTR(address, 4.10 + SharedRuntime:: 4.11 + throw_IncompatibleClassChangeError), 4.12 + false); 4.13 + 4.14 StubRoutines::_throw_ArithmeticException_entry = 4.15 generate_throw_exception("ArithmeticException throw_exception", 4.16 CAST_FROM_FN_PTR(address,
5.1 --- a/src/cpu/x86/vm/vtableStubs_x86_32.cpp Tue Dec 04 16:28:18 2007 -0800 5.2 +++ b/src/cpu/x86/vm/vtableStubs_x86_32.cpp Wed Dec 05 09:00:00 2007 -0800 5.3 @@ -138,29 +138,21 @@ 5.4 __ round_to(rbx, BytesPerLong); 5.5 } 5.6 5.7 - Label hit, next, entry; 5.8 + Label hit, next, entry, throw_icce; 5.9 5.10 - __ jmp(entry); 5.11 + __ jmpb(entry); 5.12 5.13 __ bind(next); 5.14 __ addl(rbx, itableOffsetEntry::size() * wordSize); 5.15 5.16 __ bind(entry); 5.17 5.18 -#ifdef ASSERT 5.19 - // Check that the entry is non-null 5.20 - if (DebugVtables) { 5.21 - Label L; 5.22 - __ pushl(rbx); 5.23 - __ movl(rbx, Address(rbx, itableOffsetEntry::interface_offset_in_bytes())); 5.24 - __ testl(rbx, rbx); 5.25 - __ jcc(Assembler::notZero, L); 5.26 - __ stop("null entry point found in itable's offset table"); 5.27 - __ bind(L); 5.28 - __ popl(rbx); 5.29 - } 5.30 -#endif 5.31 - __ cmpl(rax, Address(rbx, itableOffsetEntry::interface_offset_in_bytes())); 5.32 + // If the entry is NULL then we've reached the end of the table 5.33 + // without finding the expected interface, so throw an exception 5.34 + __ movl(rdx, Address(rbx, itableOffsetEntry::interface_offset_in_bytes())); 5.35 + __ testl(rdx, rdx); 5.36 + __ jcc(Assembler::zero, throw_icce); 5.37 + __ cmpl(rax, rdx); 5.38 __ jcc(Assembler::notEqual, next); 5.39 5.40 // We found a hit, move offset into rbx, 5.41 @@ -194,7 +186,15 @@ 5.42 address ame_addr = __ pc(); 5.43 __ jmp(Address(method, methodOopDesc::from_compiled_offset())); 5.44 5.45 + __ bind(throw_icce); 5.46 + // Restore saved register 5.47 + __ popl(rdx); 5.48 + __ jump(RuntimeAddress(StubRoutines::throw_IncompatibleClassChangeError_entry())); 5.49 + 5.50 masm->flush(); 5.51 + 5.52 + guarantee(__ pc() <= s->code_end(), "overflowed buffer"); 5.53 + 5.54 s->set_exception_points(npe_addr, ame_addr); 5.55 return s; 5.56 } 5.57 @@ -207,7 +207,7 @@ 5.58 return (DebugVtables ? 210 : 16) + (CountCompiledCalls ? 6 : 0); 5.59 } else { 5.60 // Itable stub size 5.61 - return (DebugVtables ? 140 : 55) + (CountCompiledCalls ? 6 : 0); 5.62 + return (DebugVtables ? 144 : 64) + (CountCompiledCalls ? 6 : 0); 5.63 } 5.64 } 5.65
6.1 --- a/src/cpu/x86/vm/vtableStubs_x86_64.cpp Tue Dec 04 16:28:18 2007 -0800 6.2 +++ b/src/cpu/x86/vm/vtableStubs_x86_64.cpp Wed Dec 05 09:00:00 2007 -0800 6.3 @@ -153,7 +153,7 @@ 6.4 // Round up to align_object_offset boundary 6.5 __ round_to_q(rbx, BytesPerLong); 6.6 } 6.7 - Label hit, next, entry; 6.8 + Label hit, next, entry, throw_icce; 6.9 6.10 __ jmpb(entry); 6.11 6.12 @@ -162,22 +162,13 @@ 6.13 6.14 __ bind(entry); 6.15 6.16 -#ifdef ASSERT 6.17 - // Check that the entry is non-null 6.18 - if (DebugVtables) { 6.19 - Label L; 6.20 - __ pushq(rbx); 6.21 - __ movq(rbx, Address(rbx, itableOffsetEntry::interface_offset_in_bytes())); 6.22 - __ testq(rbx, rbx); 6.23 - __ jcc(Assembler::notZero, L); 6.24 - __ stop("null entry point found in itable's offset table"); 6.25 - __ bind(L); 6.26 - __ popq(rbx); 6.27 - } 6.28 -#endif 6.29 - 6.30 - __ cmpq(rax, Address(rbx, itableOffsetEntry::interface_offset_in_bytes())); 6.31 - __ jcc(Assembler::notEqual, next); 6.32 + // If the entry is NULL then we've reached the end of the table 6.33 + // without finding the expected interface, so throw an exception 6.34 + __ movq(j_rarg1, Address(rbx, itableOffsetEntry::interface_offset_in_bytes())); 6.35 + __ testq(j_rarg1, j_rarg1); 6.36 + __ jcc(Assembler::zero, throw_icce); 6.37 + __ cmpq(rax, j_rarg1); 6.38 + __ jccb(Assembler::notEqual, next); 6.39 6.40 // We found a hit, move offset into j_rarg1 6.41 __ movl(j_rarg1, Address(rbx, itableOffsetEntry::offset_offset_in_bytes())); 6.42 @@ -203,23 +194,31 @@ 6.43 6.44 6.45 #ifdef ASSERT 6.46 - if (DebugVtables) { 6.47 - Label L2; 6.48 - __ cmpq(method, (int)NULL); 6.49 - __ jcc(Assembler::equal, L2); 6.50 - __ cmpq(Address(method, methodOopDesc::from_compiled_offset()), (int)NULL_WORD); 6.51 - __ jcc(Assembler::notZero, L2); 6.52 - __ stop("compiler entrypoint is null"); 6.53 - __ bind(L2); 6.54 - } 6.55 + if (DebugVtables) { 6.56 + Label L2; 6.57 + __ cmpq(method, (int)NULL); 6.58 + __ jcc(Assembler::equal, L2); 6.59 + __ cmpq(Address(method, methodOopDesc::from_compiled_offset()), (int)NULL_WORD); 6.60 + __ jcc(Assembler::notZero, L2); 6.61 + __ stop("compiler entrypoint is null"); 6.62 + __ bind(L2); 6.63 + } 6.64 #endif // ASSERT 6.65 6.66 - // rbx: methodOop 6.67 - // j_rarg0: receiver 6.68 - address ame_addr = __ pc(); 6.69 - __ jmp(Address(method, methodOopDesc::from_compiled_offset())); 6.70 + // rbx: methodOop 6.71 + // j_rarg0: receiver 6.72 + address ame_addr = __ pc(); 6.73 + __ jmp(Address(method, methodOopDesc::from_compiled_offset())); 6.74 + 6.75 + __ bind(throw_icce); 6.76 + // Restore saved register 6.77 + __ popq(j_rarg1); 6.78 + __ jump(RuntimeAddress(StubRoutines::throw_IncompatibleClassChangeError_entry())); 6.79 6.80 __ flush(); 6.81 + 6.82 + guarantee(__ pc() <= s->code_end(), "overflowed buffer"); 6.83 + 6.84 s->set_exception_points(npe_addr, ame_addr); 6.85 return s; 6.86 } 6.87 @@ -230,7 +229,7 @@ 6.88 return (DebugVtables ? 512 : 24) + (CountCompiledCalls ? 13 : 0); 6.89 } else { 6.90 // Itable stub size 6.91 - return (DebugVtables ? 636 : 64) + (CountCompiledCalls ? 13 : 0); 6.92 + return (DebugVtables ? 636 : 72) + (CountCompiledCalls ? 13 : 0); 6.93 } 6.94 } 6.95
7.1 --- a/src/share/vm/oops/klassVtable.cpp Tue Dec 04 16:28:18 2007 -0800 7.2 +++ b/src/share/vm/oops/klassVtable.cpp Wed Dec 05 09:00:00 2007 -0800 7.3 @@ -735,7 +735,7 @@ 7.4 } 7.5 } 7.6 7.7 - // This lenght of the itable was either zero, or it has not yet been initialized. 7.8 + // The length of the itable was either zero, or it has not yet been initialized. 7.9 _table_offset = 0; 7.10 _size_offset_table = 0; 7.11 _size_method_table = 0; 7.12 @@ -870,16 +870,19 @@ 7.13 7.14 // Initialization 7.15 void klassItable::initialize_itable(bool checkconstraints, TRAPS) { 7.16 - // Cannot be setup doing bootstrapping 7.17 - if (Universe::is_bootstrapping()) return; 7.18 + // Cannot be setup doing bootstrapping, interfaces don't have 7.19 + // itables, and klass with only ones entry have empty itables 7.20 + if (Universe::is_bootstrapping() || 7.21 + _klass->is_interface() || 7.22 + _klass->itable_length() == itableOffsetEntry::size()) return; 7.23 7.24 - int num_interfaces = nof_interfaces(); 7.25 + // There's alway an extra itable entry so we can null-terminate it. 7.26 + guarantee(size_offset_table() >= 1, "too small"); 7.27 + int num_interfaces = size_offset_table() - 1; 7.28 if (num_interfaces > 0) { 7.29 - if (TraceItables) tty->print_cr("%3d: Initializing itables for %s", ++initialize_count, _klass->name()->as_C_string()); 7.30 + if (TraceItables) tty->print_cr("%3d: Initializing itables for %s", ++initialize_count, 7.31 + _klass->name()->as_C_string()); 7.32 7.33 - // In debug mode, we got an extra NULL/NULL entry 7.34 - debug_only(num_interfaces--); 7.35 - assert(num_interfaces > 0, "to few interfaces in offset itable"); 7.36 7.37 // Interate through all interfaces 7.38 int i; 7.39 @@ -890,12 +893,10 @@ 7.40 initialize_itable_for_interface(ioe->offset(), interf_h, checkconstraints, CHECK); 7.41 } 7.42 7.43 -#ifdef ASSERT 7.44 - // Check that the last entry is empty 7.45 - itableOffsetEntry* ioe = offset_entry(i); 7.46 - assert(ioe->interface_klass() == NULL && ioe->offset() == 0, "terminator entry missing"); 7.47 -#endif 7.48 } 7.49 + // Check that the last entry is empty 7.50 + itableOffsetEntry* ioe = offset_entry(size_offset_table() - 1); 7.51 + guarantee(ioe->interface_klass() == NULL && ioe->offset() == 0, "terminator entry missing"); 7.52 } 7.53 7.54 7.55 @@ -972,7 +973,7 @@ 7.56 } 7.57 } 7.58 7.59 -// Update entry for specic methodOop 7.60 +// Update entry for specific methodOop 7.61 void klassItable::initialize_with_method(methodOop m) { 7.62 itableMethodEntry* ime = method_entry(0); 7.63 for(int i = 0; i < _size_method_table; i++) { 7.64 @@ -1085,12 +1086,8 @@ 7.65 CountInterfacesClosure cic; 7.66 visit_all_interfaces(transitive_interfaces(), &cic); 7.67 7.68 - // Add one extra entry in debug mode, so we can null-terminate the table 7.69 - int nof_methods = cic.nof_methods(); 7.70 - int nof_interfaces = cic.nof_interfaces(); 7.71 - debug_only(if (nof_interfaces > 0) nof_interfaces++); 7.72 - 7.73 - int itable_size = calc_itable_size(nof_interfaces, nof_methods); 7.74 + // There's alway an extra itable entry so we can null-terminate it. 7.75 + int itable_size = calc_itable_size(cic.nof_interfaces() + 1, cic.nof_methods()); 7.76 7.77 // Statistics 7.78 update_stats(itable_size * HeapWordSize); 7.79 @@ -1110,8 +1107,8 @@ 7.80 int nof_methods = cic.nof_methods(); 7.81 int nof_interfaces = cic.nof_interfaces(); 7.82 7.83 - // Add one extra entry in debug mode, so we can null-terminate the table 7.84 - debug_only(if (nof_interfaces > 0) nof_interfaces++); 7.85 + // Add one extra entry so we can null-terminate the table 7.86 + nof_interfaces++; 7.87 7.88 assert(compute_itable_size(objArrayHandle(klass->transitive_interfaces())) == 7.89 calc_itable_size(nof_interfaces, nof_methods),
8.1 --- a/src/share/vm/oops/klassVtable.hpp Tue Dec 04 16:28:18 2007 -0800 8.2 +++ b/src/share/vm/oops/klassVtable.hpp Wed Dec 05 09:00:00 2007 -0800 8.3 @@ -259,7 +259,7 @@ 8.4 itableMethodEntry* method_entry(int i) { assert(0 <= i && i <= _size_method_table, "index out of bounds"); 8.5 return &((itableMethodEntry*)method_start())[i]; } 8.6 8.7 - int nof_interfaces() { return _size_offset_table; } 8.8 + int size_offset_table() { return _size_offset_table; } 8.9 8.10 // Initialization 8.11 void initialize_itable(bool checkconstraints, TRAPS);
9.1 --- a/src/share/vm/runtime/sharedRuntime.cpp Tue Dec 04 16:28:18 2007 -0800 9.2 +++ b/src/share/vm/runtime/sharedRuntime.cpp Wed Dec 05 09:00:00 2007 -0800 9.3 @@ -467,6 +467,11 @@ 9.4 throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_AbstractMethodError()); 9.5 JRT_END 9.6 9.7 +JRT_ENTRY(void, SharedRuntime::throw_IncompatibleClassChangeError(JavaThread* thread)) 9.8 + // These errors occur only at call sites 9.9 + throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_IncompatibleClassChangeError(), "vtable stub"); 9.10 +JRT_END 9.11 + 9.12 JRT_ENTRY(void, SharedRuntime::throw_ArithmeticException(JavaThread* thread)) 9.13 throw_and_post_jvmti_exception(thread, vmSymbols::java_lang_ArithmeticException(), "/ by zero"); 9.14 JRT_END
10.1 --- a/src/share/vm/runtime/sharedRuntime.hpp Tue Dec 04 16:28:18 2007 -0800 10.2 +++ b/src/share/vm/runtime/sharedRuntime.hpp Wed Dec 05 09:00:00 2007 -0800 10.3 @@ -104,6 +104,7 @@ 10.4 STACK_OVERFLOW 10.5 }; 10.6 static void throw_AbstractMethodError(JavaThread* thread); 10.7 + static void throw_IncompatibleClassChangeError(JavaThread* thread); 10.8 static void throw_ArithmeticException(JavaThread* thread); 10.9 static void throw_NullPointerException(JavaThread* thread); 10.10 static void throw_NullPointerException_at_call(JavaThread* thread);
11.1 --- a/src/share/vm/runtime/stubRoutines.cpp Tue Dec 04 16:28:18 2007 -0800 11.2 +++ b/src/share/vm/runtime/stubRoutines.cpp Wed Dec 05 09:00:00 2007 -0800 11.3 @@ -40,6 +40,7 @@ 11.4 address StubRoutines::_catch_exception_entry = NULL; 11.5 address StubRoutines::_forward_exception_entry = NULL; 11.6 address StubRoutines::_throw_AbstractMethodError_entry = NULL; 11.7 +address StubRoutines::_throw_IncompatibleClassChangeError_entry = NULL; 11.8 address StubRoutines::_throw_ArithmeticException_entry = NULL; 11.9 address StubRoutines::_throw_NullPointerException_entry = NULL; 11.10 address StubRoutines::_throw_NullPointerException_at_call_entry = NULL;
12.1 --- a/src/share/vm/runtime/stubRoutines.hpp Tue Dec 04 16:28:18 2007 -0800 12.2 +++ b/src/share/vm/runtime/stubRoutines.hpp Wed Dec 05 09:00:00 2007 -0800 12.3 @@ -84,6 +84,7 @@ 12.4 static address _forward_exception_entry; 12.5 static address _catch_exception_entry; 12.6 static address _throw_AbstractMethodError_entry; 12.7 + static address _throw_IncompatibleClassChangeError_entry; 12.8 static address _throw_ArithmeticException_entry; 12.9 static address _throw_NullPointerException_entry; 12.10 static address _throw_NullPointerException_at_call_entry; 12.11 @@ -184,6 +185,7 @@ 12.12 static address forward_exception_entry() { return _forward_exception_entry; } 12.13 // Implicit exceptions 12.14 static address throw_AbstractMethodError_entry() { return _throw_AbstractMethodError_entry; } 12.15 + static address throw_IncompatibleClassChangeError_entry(){ return _throw_IncompatibleClassChangeError_entry; } 12.16 static address throw_ArithmeticException_entry() { return _throw_ArithmeticException_entry; } 12.17 static address throw_NullPointerException_entry() { return _throw_NullPointerException_entry; } 12.18 static address throw_NullPointerException_at_call_entry(){ return _throw_NullPointerException_at_call_entry; }