Mercurial > hg > graal-jvmci-8
comparison src/share/vm/classfile/classFileParser.cpp @ 2226:c5a923563727
6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?")
Summary: Fix block_size_if_printezis_bits() so it does not expect the bits, only uses them when available. Fix block_size_no_stall() so it does not stall when the bits are missing such cases, letting the caller deal with zero size returns. Constant pool cache oops do not need to be unparsable or conc_unsafe after their klass pointer is installed. Some cosmetic clean-ups and some assertion checking for conc-usafety which, in the presence of class file redefinition, has no a-priori time boundedness, so all GCs must be able to safely deal with putatively conc-unsafe objects in a stop-world pause.
Reviewed-by: jmasa, johnc
author | ysr |
---|---|
date | Mon, 07 Feb 2011 22:19:57 -0800 |
parents | 3582bf76420e |
children | dbad0519a1c4 |
comparison
equal
deleted
inserted
replaced
2225:c798c277ddd1 | 2226:c5a923563727 |
---|---|
329 guarantee_property( | 329 guarantee_property( |
330 length >= 1, "Illegal constant pool size %u in class file %s", | 330 length >= 1, "Illegal constant pool size %u in class file %s", |
331 length, CHECK_(nullHandle)); | 331 length, CHECK_(nullHandle)); |
332 constantPoolOop constant_pool = | 332 constantPoolOop constant_pool = |
333 oopFactory::new_constantPool(length, | 333 oopFactory::new_constantPool(length, |
334 methodOopDesc::IsSafeConc, | 334 oopDesc::IsSafeConc, |
335 CHECK_(nullHandle)); | 335 CHECK_(nullHandle)); |
336 constantPoolHandle cp (THREAD, constant_pool); | 336 constantPoolHandle cp (THREAD, constant_pool); |
337 | 337 |
338 cp->set_partially_loaded(); // Enables heap verify to work on partial constantPoolOops | 338 cp->set_partially_loaded(); // Enables heap verify to work on partial constantPoolOops |
339 ConstantPoolCleaner cp_in_error(cp); // set constant pool to be cleaned up. | 339 ConstantPoolCleaner cp_in_error(cp); // set constant pool to be cleaned up. |
1927 guarantee_property(access_flags.is_native() || access_flags.is_abstract() || parsed_code_attribute, | 1927 guarantee_property(access_flags.is_native() || access_flags.is_abstract() || parsed_code_attribute, |
1928 "Absent Code attribute in method that is not native or abstract in class file %s", CHECK_(nullHandle)); | 1928 "Absent Code attribute in method that is not native or abstract in class file %s", CHECK_(nullHandle)); |
1929 } | 1929 } |
1930 | 1930 |
1931 // All sizing information for a methodOop is finally available, now create it | 1931 // All sizing information for a methodOop is finally available, now create it |
1932 methodOop m_oop = oopFactory::new_method( | 1932 methodOop m_oop = oopFactory::new_method(code_length, access_flags, linenumber_table_length, |
1933 code_length, access_flags, linenumber_table_length, | 1933 total_lvt_length, checked_exceptions_length, |
1934 total_lvt_length, checked_exceptions_length, | 1934 oopDesc::IsSafeConc, CHECK_(nullHandle)); |
1935 methodOopDesc::IsSafeConc, CHECK_(nullHandle)); | |
1936 methodHandle m (THREAD, m_oop); | 1935 methodHandle m (THREAD, m_oop); |
1937 | 1936 |
1938 ClassLoadingService::add_class_method_size(m_oop->size()*HeapWordSize); | 1937 ClassLoadingService::add_class_method_size(m_oop->size()*HeapWordSize); |
1939 | 1938 |
1940 // Fill in information from fixed part (access_flags already set) | 1939 // Fill in information from fixed part (access_flags already set) |