Mercurial > hg > graal-jvmci-8
comparison src/cpu/sparc/vm/templateTable_sparc.cpp @ 450:b22701a8b88f
6474243: suspicious jvmti code that uses oop unsafely across GC point
Summary: oop stored in unsafely in Lscratch noticed by visual inspection will not be updated by GC.
Reviewed-by: kamg, never, kvn
author | coleenp |
---|---|
date | Mon, 24 Nov 2008 14:45:47 -0500 |
parents | 1ee8caae33af |
children | 98cb887364d3 |
comparison
equal
deleted
inserted
replaced
449:171e581e8161 | 450:b22701a8b88f |
---|---|
2083 if (is_static) { | 2083 if (is_static) { |
2084 __ clr(Otos_i); | 2084 __ clr(Otos_i); |
2085 } else { | 2085 } else { |
2086 if (has_tos) { | 2086 if (has_tos) { |
2087 // save object pointer before call_VM() clobbers it | 2087 // save object pointer before call_VM() clobbers it |
2088 __ mov(Otos_i, Lscratch); | 2088 __ push_ptr(Otos_i); // put object on tos where GC wants it. |
2089 } else { | 2089 } else { |
2090 // Load top of stack (do not pop the value off the stack); | 2090 // Load top of stack (do not pop the value off the stack); |
2091 __ ld_ptr(Lesp, Interpreter::expr_offset_in_bytes(0), Otos_i); | 2091 __ ld_ptr(Lesp, Interpreter::expr_offset_in_bytes(0), Otos_i); |
2092 } | 2092 } |
2093 __ verify_oop(Otos_i); | 2093 __ verify_oop(Otos_i); |
2095 // Otos_i: object pointer or NULL if static | 2095 // Otos_i: object pointer or NULL if static |
2096 // Rcache: cache entry pointer | 2096 // Rcache: cache entry pointer |
2097 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_field_access), | 2097 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_field_access), |
2098 Otos_i, Rcache); | 2098 Otos_i, Rcache); |
2099 if (!is_static && has_tos) { | 2099 if (!is_static && has_tos) { |
2100 __ mov(Lscratch, Otos_i); // restore object pointer | 2100 __ pop_ptr(Otos_i); // restore object pointer |
2101 __ verify_oop(Otos_i); | 2101 __ verify_oop(Otos_i); |
2102 } | 2102 } |
2103 __ get_cache_and_index_at_bcp(Rcache, index, 1); | 2103 __ get_cache_and_index_at_bcp(Rcache, index, 1); |
2104 __ bind(Label1); | 2104 __ bind(Label1); |
2105 } | 2105 } |