8154580: Save mirror in interpreter frame to enable cleanups of CLDClosure

GC walks the mirror using OopClosure rather than using CLDClosure in oops_interpreted_do()

Reviewed-by: dlong, twisti, stefank
This commit is contained in:
Coleen Phillimore 2016-04-25 09:51:00 -04:00
parent 9ca6318ece
commit de88e58a82
51 changed files with 202 additions and 166 deletions

View file

@ -6705,6 +6705,14 @@ void MacroAssembler::restore_cpu_control_state_after_jni() {
#endif // _LP64
}
void MacroAssembler::load_mirror(Register mirror, Register method) {
// get mirror
const int mirror_offset = in_bytes(Klass::java_mirror_offset());
movptr(mirror, Address(method, Method::const_offset()));
movptr(mirror, Address(mirror, ConstMethod::constants_offset()));
movptr(mirror, Address(mirror, ConstantPool::pool_holder_offset_in_bytes()));
movptr(mirror, Address(mirror, mirror_offset));
}
void MacroAssembler::load_klass(Register dst, Register src) {
#ifdef _LP64