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)