133 if (local_slot_needs_write(index, value)) { 134 write_value_to_frame( 135 SharkType::to_stackType(value->basic_type()), 136 value->generic_value(), 137 adjusted_offset(value, offset)); 138 } 139 140 // Record the value in the oopmap if necessary 141 if (local_slot_needs_oopmap(index, value)) { 142 oopmap()->set_oop(slot2reg(offset)); 143 } 144 145 // Record the value in the debuginfo if necessary 146 if (local_slot_needs_debuginfo(index, value)) { 147 locarray()->append(slot2lv(offset, local_location_type(index, addr))); 148 } 149 } 150 151 void SharkDecacher::end_frame() { 152 // Record the scope 153 debug_info()->describe_scope( 154 pc_offset(), 155 target(), 156 bci(), 157 true, 158 false, 159 false, 160 debug_info()->create_scope_values(locarray()), 161 debug_info()->create_scope_values(exparray()), 162 debug_info()->create_monitor_values(monarray())); 163 164 // Finish recording the debug information 165 debug_info()->end_safepoint(pc_offset()); 166 } 167 168 void SharkCacher::process_stack_slot(int index, 169 SharkValue** addr, 170 int offset) { 171 SharkValue *value = *addr; 172 173 // Read the value from the frame if necessary 174 if (stack_slot_needs_read(index, value)) { | 133 if (local_slot_needs_write(index, value)) { 134 write_value_to_frame( 135 SharkType::to_stackType(value->basic_type()), 136 value->generic_value(), 137 adjusted_offset(value, offset)); 138 } 139 140 // Record the value in the oopmap if necessary 141 if (local_slot_needs_oopmap(index, value)) { 142 oopmap()->set_oop(slot2reg(offset)); 143 } 144 145 // Record the value in the debuginfo if necessary 146 if (local_slot_needs_debuginfo(index, value)) { 147 locarray()->append(slot2lv(offset, local_location_type(index, addr))); 148 } 149 } 150 151 void SharkDecacher::end_frame() { 152 // Record the scope 153 methodHandle null_mh; 154 debug_info()->describe_scope( 155 pc_offset(), 156 null_mh, 157 target(), 158 bci(), 159 true, 160 false, 161 false, 162 debug_info()->create_scope_values(locarray()), 163 debug_info()->create_scope_values(exparray()), 164 debug_info()->create_monitor_values(monarray())); 165 166 // Finish recording the debug information 167 debug_info()->end_safepoint(pc_offset()); 168 } 169 170 void SharkCacher::process_stack_slot(int index, 171 SharkValue** addr, 172 int offset) { 173 SharkValue *value = *addr; 174 175 // Read the value from the frame if necessary 176 if (stack_slot_needs_read(index, value)) { |