< prev index next >

src/share/vm/prims/stackwalk.cpp

Print this page




 162   fill_live_stackframe(stackFrame, method, CHECK);
 163 }
 164 
 165 // Fill in the StackFrameInfo at the given index in frames_array
 166 void JavaFrameStream::fill_frame(int index, objArrayHandle  frames_array,
 167                                  const methodHandle& method, TRAPS) {
 168   if (_need_method_info) {
 169     Handle stackFrame(THREAD, frames_array->obj_at(index));
 170     fill_stackframe(stackFrame, method);
 171   } else {
 172     frames_array->obj_at_put(index, method->method_holder()->java_mirror());
 173   }
 174 }
 175 
 176 // Create and return a LiveStackFrame.PrimitiveSlot (if needed) for the
 177 // StackValue at the given index. 'type' is expected to be T_INT, T_LONG,
 178 // T_OBJECT, or T_CONFLICT.
 179 oop LiveFrameStream::create_primitive_slot_instance(StackValueCollection* values,
 180                                                     int i, BasicType type, TRAPS) {
 181   Klass* k = SystemDictionary::resolve_or_null(vmSymbols::java_lang_LiveStackFrameInfo(), CHECK_NULL);
 182   instanceKlassHandle ik (THREAD, k);
 183 
 184   JavaValue result(T_OBJECT);
 185   JavaCallArguments args;
 186   Symbol* signature = NULL;
 187 
 188   // ## TODO: type is only available in LocalVariable table, if present.
 189   // ## StackValue type is T_INT or T_OBJECT (or converted to T_LONG on 64-bit)
 190   switch (type) {
 191     case T_INT:
 192       args.push_int(values->int_at(i));
 193       signature = vmSymbols::asPrimitive_int_signature();
 194       break;
 195 
 196     case T_LONG:
 197       args.push_long(values->long_at(i));
 198       signature = vmSymbols::asPrimitive_long_signature();
 199       break;
 200 
 201     case T_FLOAT:
 202     case T_DOUBLE:




 162   fill_live_stackframe(stackFrame, method, CHECK);
 163 }
 164 
 165 // Fill in the StackFrameInfo at the given index in frames_array
 166 void JavaFrameStream::fill_frame(int index, objArrayHandle  frames_array,
 167                                  const methodHandle& method, TRAPS) {
 168   if (_need_method_info) {
 169     Handle stackFrame(THREAD, frames_array->obj_at(index));
 170     fill_stackframe(stackFrame, method);
 171   } else {
 172     frames_array->obj_at_put(index, method->method_holder()->java_mirror());
 173   }
 174 }
 175 
 176 // Create and return a LiveStackFrame.PrimitiveSlot (if needed) for the
 177 // StackValue at the given index. 'type' is expected to be T_INT, T_LONG,
 178 // T_OBJECT, or T_CONFLICT.
 179 oop LiveFrameStream::create_primitive_slot_instance(StackValueCollection* values,
 180                                                     int i, BasicType type, TRAPS) {
 181   Klass* k = SystemDictionary::resolve_or_null(vmSymbols::java_lang_LiveStackFrameInfo(), CHECK_NULL);
 182   InstanceKlass* ik = InstanceKlass::cast(k);
 183 
 184   JavaValue result(T_OBJECT);
 185   JavaCallArguments args;
 186   Symbol* signature = NULL;
 187 
 188   // ## TODO: type is only available in LocalVariable table, if present.
 189   // ## StackValue type is T_INT or T_OBJECT (or converted to T_LONG on 64-bit)
 190   switch (type) {
 191     case T_INT:
 192       args.push_int(values->int_at(i));
 193       signature = vmSymbols::asPrimitive_int_signature();
 194       break;
 195 
 196     case T_LONG:
 197       args.push_long(values->long_at(i));
 198       signature = vmSymbols::asPrimitive_long_signature();
 199       break;
 200 
 201     case T_FLOAT:
 202     case T_DOUBLE:


< prev index next >