comparison src/share/vm/prims/jvmtiClassFileReconstituter.cpp @ 6213:8150fa46d2ed

7178145: Change constMethodOop::_exception_table to optionally inlined u2 table. Summary: Change constMethodOop::_exception_table to optionally inlined u2 table. Reviewed-by: bdelsart, coleenp, kamg
author jiangli
date Tue, 26 Jun 2012 19:08:44 -0400
parents f7c4174b33ba
children e74da3c2b827
comparison
equal deleted inserted replaced
6177:06320b1578cb 6213:8150fa46d2ed
189 // } 189 // }
190 attr_size += 2 + 4 + 2 + local_variable_table_length * (2 + 2 + 2 + 2 + 2); 190 attr_size += 2 + 4 + 2 + local_variable_table_length * (2 + 2 + 2 + 2 + 2);
191 } 191 }
192 } 192 }
193 193
194 typeArrayHandle exception_table(thread(), const_method->exception_table()); 194 ExceptionTable exception_table(method());
195 int exception_table_length = exception_table->length(); 195 int exception_table_length = exception_table.length();
196 int exception_table_entries = exception_table_length / 4;
197 int code_size = const_method->code_size(); 196 int code_size = const_method->code_size();
198 int size = 197 int size =
199 2+2+4 + // max_stack, max_locals, code_length 198 2+2+4 + // max_stack, max_locals, code_length
200 code_size + // code 199 code_size + // code
201 2 + // exception_table_length 200 2 + // exception_table_length
202 (2+2+2+2) * exception_table_entries + // exception_table 201 (2+2+2+2) * exception_table_length + // exception_table
203 2 + // attributes_count 202 2 + // attributes_count
204 attr_size; // attributes 203 attr_size; // attributes
205 204
206 write_attribute_name_index("Code"); 205 write_attribute_name_index("Code");
207 write_u4(size); 206 write_u4(size);
208 write_u2(method->max_stack()); 207 write_u2(method->max_stack());
209 write_u2(method->max_locals()); 208 write_u2(method->max_locals());
210 write_u4(code_size); 209 write_u4(code_size);
211 copy_bytecodes(method, (unsigned char*)writeable_address(code_size)); 210 copy_bytecodes(method, (unsigned char*)writeable_address(code_size));
212 write_u2(exception_table_entries); 211 write_u2(exception_table_length);
213 for (int index = 0; index < exception_table_length; ) { 212 for (int index = 0; index < exception_table_length; index++) {
214 write_u2(exception_table->int_at(index++)); 213 write_u2(exception_table.start_pc(index));
215 write_u2(exception_table->int_at(index++)); 214 write_u2(exception_table.end_pc(index));
216 write_u2(exception_table->int_at(index++)); 215 write_u2(exception_table.handler_pc(index));
217 write_u2(exception_table->int_at(index++)); 216 write_u2(exception_table.catch_type_index(index));
218 } 217 }
219 write_u2(attr_count); 218 write_u2(attr_count);
220 if (line_num_cnt != 0) { 219 if (line_num_cnt != 0) {
221 write_line_number_table_attribute(method, line_num_cnt); 220 write_line_number_table_attribute(method, line_num_cnt);
222 } 221 }