--- a/indy.patch Mon May 25 03:01:00 2009 -0700
+++ b/indy.patch Mon May 25 03:04:38 2009 -0700
@@ -1,2 +1,49 @@ changes entrained after 6655646 appear i
changes entrained after 6655646 appear in indy.patch proper
+diff --git a/src/share/vm/oops/generateOopMap.cpp b/src/share/vm/oops/generateOopMap.cpp
+--- a/src/share/vm/oops/generateOopMap.cpp
++++ b/src/share/vm/oops/generateOopMap.cpp
+@@ -1556,13 +1556,13 @@
+ case Bytecodes::_getfield: do_field(true, false, itr->get_index_big(), itr->bci()); break;
+ case Bytecodes::_putfield: do_field(false, false, itr->get_index_big(), itr->bci()); break;
+
+- case Bytecodes::_invokevirtual:
+- case Bytecodes::_invokespecial: do_method(false, false, itr->get_index_big(), itr->bci()); break;
+- case Bytecodes::_invokestatic: do_method(true, false, itr->get_index_big(), itr->bci()); break;
+- case Bytecodes::_invokedynamic: do_method(false, true, itr->get_index_int(), itr->bci()); break;
+- case Bytecodes::_invokeinterface: do_method(false, true, itr->get_index_big(), itr->bci()); break;
+- case Bytecodes::_newarray:
+- case Bytecodes::_anewarray: pp_new_ref(vCTS, itr->bci()); break;
++ case Bytecodes::_invokevirtual:
++ case Bytecodes::_invokespecial: do_method(false, false, itr->get_index_big(), itr->bci()); break;
++ case Bytecodes::_invokestatic: do_method(true, false, itr->get_index_big(), itr->bci()); break;
++ case Bytecodes::_invokedynamic: do_method(true, false, itr->get_index_int(), itr->bci()); break;
++ case Bytecodes::_invokeinterface: do_method(false, true, itr->get_index_big(), itr->bci()); break;
++ case Bytecodes::_newarray:
++ case Bytecodes::_anewarray: pp_new_ref(vCTS, itr->bci()); break;
+ case Bytecodes::_checkcast: do_checkcast(); break;
+ case Bytecodes::_arraylength:
+ case Bytecodes::_instanceof: pp(rCTS, vCTS); break;
+@@ -1900,11 +1900,17 @@
+ }
+
+ void GenerateOopMap::do_method(int is_static, int is_interface, int idx, int bci) {
+- // Dig up signature for field in constant pool
+- constantPoolOop cp = _method->constants();
+- int nameAndTypeIdx = cp->name_and_type_ref_index_at(idx);
+- int signatureIdx = cp->signature_ref_index_at(nameAndTypeIdx); // @@@@@
+- symbolOop signature = cp->symbol_at(signatureIdx);
++ // Dig up signature for field in constant pool
++ constantPoolOop cp = _method->constants();
++
++ // invokedynamic has a secondary index.
++ int nameAndTypeIdx;
++ if (constantPoolCacheOopDesc::is_secondary_index(idx))
++ nameAndTypeIdx = cp->map_instruction_operand_to_index(idx);
++ else
++ nameAndTypeIdx = cp->name_and_type_ref_index_at(idx);
++
++ symbolOop signature = cp->nt_signature_ref_at(nameAndTypeIdx);
+
+ // Parse method signature
+ CellTypeState out[4];