Mercurial > hg > truffle
comparison src/share/vm/runtime/stackValue.cpp @ 858:5314d85ffd54
6826736: CMS: core dump with -XX:+UseCompressedOops
Summary: Fix deoptimization code and OopMapSet::all_do() to check for oop = narrow_oop_base.
Reviewed-by: jcoomes, phh, ysr, never
author | kvn |
---|---|
date | Wed, 22 Jul 2009 15:48:51 -0700 |
parents | b109e761e927 |
children | 18f526145aea |
comparison
equal
deleted
inserted
replaced
857:17173cb6e48d | 858:5314d85ffd54 |
---|---|
102 Handle h(oopDesc::decode_heap_oop(value.noop)); | 102 Handle h(oopDesc::decode_heap_oop(value.noop)); |
103 return new StackValue(h); | 103 return new StackValue(h); |
104 } | 104 } |
105 #endif | 105 #endif |
106 case Location::oop: { | 106 case Location::oop: { |
107 Handle h(*(oop *)value_addr); // Wrap a handle around the oop | 107 oop val = *(oop *)value_addr; |
108 #ifdef _LP64 | |
109 if (Universe::is_narrow_oop_base(val)) { | |
110 // Compiled code may produce decoded oop = narrow_oop_base | |
111 // when a narrow oop implicit null check is used. | |
112 // The narrow_oop_base could be NULL or be the address | |
113 // of the page below heap. Use NULL value for both cases. | |
114 val = (oop)NULL; | |
115 } | |
116 #endif | |
117 Handle h(val); // Wrap a handle around the oop | |
108 return new StackValue(h); | 118 return new StackValue(h); |
109 } | 119 } |
110 case Location::addr: { | 120 case Location::addr: { |
111 ShouldNotReachHere(); // both C1 and C2 now inline jsrs | 121 ShouldNotReachHere(); // both C1 and C2 now inline jsrs |
112 } | 122 } |