equal
deleted
inserted
replaced
1017 compute_offset(_vmAllowSuspension_offset, k, vmSymbols::vmAllowSuspension_name(), vmSymbols::bool_signature()); |
1017 compute_offset(_vmAllowSuspension_offset, k, vmSymbols::vmAllowSuspension_name(), vmSymbols::bool_signature()); |
1018 compute_offset(_nthreads_offset, k, vmSymbols::nthreads_name(), vmSymbols::int_signature()); |
1018 compute_offset(_nthreads_offset, k, vmSymbols::nthreads_name(), vmSymbols::int_signature()); |
1019 compute_offset(_ngroups_offset, k, vmSymbols::ngroups_name(), vmSymbols::int_signature()); |
1019 compute_offset(_ngroups_offset, k, vmSymbols::ngroups_name(), vmSymbols::int_signature()); |
1020 } |
1020 } |
1021 |
1021 |
|
1022 oop java_lang_Throwable::unassigned_stacktrace() { |
|
1023 instanceKlass* ik = instanceKlass::cast(SystemDictionary::Throwable_klass()); |
|
1024 address addr = ik->static_field_addr(static_unassigned_stacktrace_offset); |
|
1025 if (UseCompressedOops) { |
|
1026 return oopDesc::load_decode_heap_oop((narrowOop *)addr); |
|
1027 } else { |
|
1028 return oopDesc::load_decode_heap_oop((oop*)addr); |
|
1029 } |
|
1030 } |
|
1031 |
1022 oop java_lang_Throwable::backtrace(oop throwable) { |
1032 oop java_lang_Throwable::backtrace(oop throwable) { |
1023 return throwable->obj_field_acquire(backtrace_offset); |
1033 return throwable->obj_field_acquire(backtrace_offset); |
1024 } |
1034 } |
1025 |
1035 |
1026 |
1036 |
1042 void java_lang_Throwable::set_message(oop throwable, oop value) { |
1052 void java_lang_Throwable::set_message(oop throwable, oop value) { |
1043 throwable->obj_field_put(detailMessage_offset, value); |
1053 throwable->obj_field_put(detailMessage_offset, value); |
1044 } |
1054 } |
1045 |
1055 |
1046 |
1056 |
|
1057 void java_lang_Throwable::set_stacktrace(oop throwable, oop st_element_array) { |
|
1058 throwable->obj_field_put(stackTrace_offset, st_element_array); |
|
1059 } |
|
1060 |
1047 void java_lang_Throwable::clear_stacktrace(oop throwable) { |
1061 void java_lang_Throwable::clear_stacktrace(oop throwable) { |
1048 assert(JDK_Version::is_gte_jdk14x_version(), "should only be called in >= 1.4"); |
1062 assert(JDK_Version::is_gte_jdk14x_version(), "should only be called in >= 1.4"); |
1049 throwable->obj_field_put(stackTrace_offset, NULL); |
1063 set_stacktrace(throwable, NULL); |
1050 } |
1064 } |
1051 |
1065 |
1052 |
1066 |
1053 void java_lang_Throwable::print(oop throwable, outputStream* st) { |
1067 void java_lang_Throwable::print(oop throwable, outputStream* st) { |
1054 ResourceMark rm; |
1068 ResourceMark rm; |
1338 // runs out of memory while allocating the stack trace |
1352 // runs out of memory while allocating the stack trace |
1339 set_backtrace(throwable(), NULL); |
1353 set_backtrace(throwable(), NULL); |
1340 if (JDK_Version::is_gte_jdk14x_version()) { |
1354 if (JDK_Version::is_gte_jdk14x_version()) { |
1341 // New since 1.4, clear lazily constructed Java level stacktrace if |
1355 // New since 1.4, clear lazily constructed Java level stacktrace if |
1342 // refilling occurs |
1356 // refilling occurs |
|
1357 // This is unnecessary in 1.7+ but harmless |
1343 clear_stacktrace(throwable()); |
1358 clear_stacktrace(throwable()); |
1344 } |
1359 } |
1345 |
1360 |
1346 int max_depth = MaxJavaStackTraceDepth; |
1361 int max_depth = MaxJavaStackTraceDepth; |
1347 JavaThread* thread = (JavaThread*)THREAD; |
1362 JavaThread* thread = (JavaThread*)THREAD; |
1539 chunk_count++; |
1554 chunk_count++; |
1540 |
1555 |
1541 // Bail-out for deep stacks |
1556 // Bail-out for deep stacks |
1542 if (chunk_count >= max_chunks) break; |
1557 if (chunk_count >= max_chunks) break; |
1543 } |
1558 } |
|
1559 |
|
1560 // For Java 7+ we support the Throwable immutability protocol defined for Java 7. This support |
|
1561 // was missing in 7u0 so in 7u0 there is a workaround in the Throwable class. That workaround |
|
1562 // can be removed in a JDK using this JVM version |
|
1563 if (JDK_Version::is_gte_jdk17x_version()) { |
|
1564 java_lang_Throwable::set_stacktrace(throwable(), java_lang_Throwable::unassigned_stacktrace()); |
|
1565 assert(java_lang_Throwable::unassigned_stacktrace() != NULL, "not initialized"); |
|
1566 } |
|
1567 |
1544 } |
1568 } |
1545 |
1569 |
1546 |
1570 |
1547 int java_lang_Throwable::get_stack_trace_depth(oop throwable, TRAPS) { |
1571 int java_lang_Throwable::get_stack_trace_depth(oop throwable, TRAPS) { |
1548 if (throwable == NULL) { |
1572 if (throwable == NULL) { |
2768 int java_lang_Class::static_oop_field_count_offset; |
2792 int java_lang_Class::static_oop_field_count_offset; |
2769 int java_lang_Throwable::backtrace_offset; |
2793 int java_lang_Throwable::backtrace_offset; |
2770 int java_lang_Throwable::detailMessage_offset; |
2794 int java_lang_Throwable::detailMessage_offset; |
2771 int java_lang_Throwable::cause_offset; |
2795 int java_lang_Throwable::cause_offset; |
2772 int java_lang_Throwable::stackTrace_offset; |
2796 int java_lang_Throwable::stackTrace_offset; |
|
2797 int java_lang_Throwable::static_unassigned_stacktrace_offset; |
2773 int java_lang_reflect_AccessibleObject::override_offset; |
2798 int java_lang_reflect_AccessibleObject::override_offset; |
2774 int java_lang_reflect_Method::clazz_offset; |
2799 int java_lang_reflect_Method::clazz_offset; |
2775 int java_lang_reflect_Method::name_offset; |
2800 int java_lang_reflect_Method::name_offset; |
2776 int java_lang_reflect_Method::returnType_offset; |
2801 int java_lang_reflect_Method::returnType_offset; |
2777 int java_lang_reflect_Method::parameterTypes_offset; |
2802 int java_lang_reflect_Method::parameterTypes_offset; |
2945 // Throwable Class |
2970 // Throwable Class |
2946 java_lang_Throwable::backtrace_offset = java_lang_Throwable::hc_backtrace_offset * x + header; |
2971 java_lang_Throwable::backtrace_offset = java_lang_Throwable::hc_backtrace_offset * x + header; |
2947 java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header; |
2972 java_lang_Throwable::detailMessage_offset = java_lang_Throwable::hc_detailMessage_offset * x + header; |
2948 java_lang_Throwable::cause_offset = java_lang_Throwable::hc_cause_offset * x + header; |
2973 java_lang_Throwable::cause_offset = java_lang_Throwable::hc_cause_offset * x + header; |
2949 java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header; |
2974 java_lang_Throwable::stackTrace_offset = java_lang_Throwable::hc_stackTrace_offset * x + header; |
|
2975 java_lang_Throwable::static_unassigned_stacktrace_offset = java_lang_Throwable::hc_static_unassigned_stacktrace_offset * x; |
2950 |
2976 |
2951 // java_lang_boxing_object |
2977 // java_lang_boxing_object |
2952 java_lang_boxing_object::value_offset = java_lang_boxing_object::hc_value_offset + header; |
2978 java_lang_boxing_object::value_offset = java_lang_boxing_object::hc_value_offset + header; |
2953 java_lang_boxing_object::long_value_offset = align_size_up((java_lang_boxing_object::hc_value_offset + header), BytesPerLong); |
2979 java_lang_boxing_object::long_value_offset = align_size_up((java_lang_boxing_object::hc_value_offset + header), BytesPerLong); |
2954 |
2980 |