6664627: Merge changes made only in hotspot 11 forward to jdk 7

Wed, 05 Dec 2007 09:00:00 -0800

author
dcubed
date
Wed, 05 Dec 2007 09:00:00 -0800
changeset 451
f8236e79048a
parent 436
92489cdc94d1
child 452
ff5961f4c095

6664627: Merge changes made only in hotspot 11 forward to jdk 7
Reviewed-by: jcoomes

src/cpu/sparc/vm/stubGenerator_sparc.cpp file | annotate | diff | comparison | revisions
src/cpu/sparc/vm/vtableStubs_sparc.cpp file | annotate | diff | comparison | revisions
src/cpu/x86/vm/stubGenerator_x86_32.cpp file | annotate | diff | comparison | revisions
src/cpu/x86/vm/stubGenerator_x86_64.cpp file | annotate | diff | comparison | revisions
src/cpu/x86/vm/vtableStubs_x86_32.cpp file | annotate | diff | comparison | revisions
src/cpu/x86/vm/vtableStubs_x86_64.cpp file | annotate | diff | comparison | revisions
src/share/vm/oops/klassVtable.cpp file | annotate | diff | comparison | revisions
src/share/vm/oops/klassVtable.hpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/sharedRuntime.cpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/sharedRuntime.hpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/stubRoutines.cpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/stubRoutines.hpp file | annotate | diff | comparison | revisions
     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; }

mercurial