8007037: JSR 292: the VM_RedefineClasses::append_entry() should do cross-checks with indy operands

References from operands to CP entries and back must be correct after CP merge

Reviewed-by: coleenp, twisti
This commit is contained in:
Serguei Spitsyn 2013-04-25 03:58:53 -07:00 committed by Serguei Spitsyn
parent db8bc15dd2
commit 333cf9a756
4 changed files with 344 additions and 30 deletions

View file

@ -359,8 +359,15 @@ class VM_RedefineClasses: public VM_Operation {
// _index_map_p contains any entries.
int _index_map_count;
intArray * _index_map_p;
// _operands_index_map_count is just an optimization for knowing if
// _operands_index_map_p contains any entries.
int _operands_cur_length;
int _operands_index_map_count;
intArray * _operands_index_map_p;
// ptr to _class_count scratch_classes
Klass** _scratch_classes;
Klass** _scratch_classes;
jvmtiError _res;
// Performance measurement support. These timers do not cover all
@ -422,12 +429,19 @@ class VM_RedefineClasses: public VM_Operation {
// Support for constant pool merging (these routines are in alpha order):
void append_entry(constantPoolHandle scratch_cp, int scratch_i,
constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS);
void append_operand(constantPoolHandle scratch_cp, int scratch_bootstrap_spec_index,
constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS);
void finalize_operands_merge(constantPoolHandle merge_cp, TRAPS);
int find_or_append_indirect_entry(constantPoolHandle scratch_cp, int scratch_i,
constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS);
int find_or_append_operand(constantPoolHandle scratch_cp, int scratch_bootstrap_spec_index,
constantPoolHandle *merge_cp_p, int *merge_cp_length_p, TRAPS);
int find_new_index(int old_index);
int find_new_operand_index(int old_bootstrap_spec_index);
bool is_unresolved_class_mismatch(constantPoolHandle cp1, int index1,
constantPoolHandle cp2, int index2);
void map_index(constantPoolHandle scratch_cp, int old_index, int new_index);
void map_operand_index(int old_bootstrap_spec_index, int new_bootstrap_spec_index);
bool merge_constant_pools(constantPoolHandle old_cp,
constantPoolHandle scratch_cp, constantPoolHandle *merge_cp_p,
int *merge_cp_length_p, TRAPS);