Skip to content

Commit a9fbc15

Browse files
committed
Fixed jtregs caused by Throwable.getStackTraceElement by switching to pure-java impl
1 parent b21f8cc commit a9fbc15

File tree

8 files changed

+7
-57
lines changed

8 files changed

+7
-57
lines changed

cvm/alt_kernel/src25u/java/lang/Throwable.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -888,17 +888,6 @@ public void setStackTrace(StackTraceElement[] stackTrace) {
888888
*/
889889
native int getStackTraceDepth();
890890

891-
/**
892-
* Returns the specified element of the stack trace.
893-
*
894-
* package-protection for use by SharedSecrets.
895-
*
896-
* @param index index of the element to return.
897-
* @throws IndexOutOfBoundsException if {@code index < 0 ||
898-
* index >= getStackTraceDepth() }
899-
*/
900-
native StackTraceElement getStackTraceElement(int index);
901-
902891
/**
903892
* Reads a {@code Throwable} from a stream, enforcing
904893
* well-formedness constraints on fields. Null entries and

cvm/alt_kernel/src8u/java/lang/System.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1273,7 +1273,10 @@ public int getStackTraceDepth(Throwable t) {
12731273
return t.getStackTraceDepth();
12741274
}
12751275
public StackTraceElement getStackTraceElement(Throwable t, int i) {
1276-
return t.getStackTraceElement(i);
1276+
if (t.getStackTrace().length == 0) {
1277+
t.fillInStackTrace();
1278+
}
1279+
return t.getStackTrace()[i];
12771280
}
12781281
public String newStringUnsafe(char[] chars) {
12791282
return new String(chars, true);

src/hotspot/share/classfile/javaClasses.cpp

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3173,28 +3173,6 @@ void java_lang_Throwable::fill_in_stack_trace_of_preallocated_backtrace(Handle t
31733173
assert(java_lang_Throwable::unassigned_stacktrace() != nullptr, "not initialized");
31743174
}
31753175

3176-
#if HOTSPOT_TARGET_CLASSLIB == 8
3177-
oop java_lang_Throwable::get_stack_trace_element(Handle throwable, int index, TRAPS) {
3178-
if (throwable.is_null()) {
3179-
THROW_0(vmSymbols::java_lang_NullPointerException());
3180-
}
3181-
if (index < 0) {
3182-
THROW_(vmSymbols::java_lang_IndexOutOfBoundsException(), NULL);
3183-
}
3184-
int n = depth(throwable());
3185-
if (n <= 0 || n <= index) {
3186-
THROW_(vmSymbols::java_lang_IndexOutOfBoundsException(), NULL);
3187-
}
3188-
// just to avoid introducing j.l.StackFrameInfo to kernel class set.
3189-
// this should work as long as JVM does not embed an object into another.
3190-
ObjArrayKlass* arrayKlass = ObjArrayKlass::cast(vmClasses::Object_klass()->array_klass(n, THREAD));
3191-
objArrayHandle arrh(THREAD, arrayKlass->allocate(n, THREAD));
3192-
objArrayHandle backtraceh(THREAD, (objArrayOop)java_lang_Throwable::backtrace(throwable()));
3193-
get_stack_trace_elements(arrh->length(), backtraceh, arrh, THREAD);
3194-
return arrh->obj_at(index);
3195-
}
3196-
#endif
3197-
31983176
void java_lang_Throwable::get_stack_trace_elements(int depth, Handle backtrace,
31993177
objArrayHandle stack_trace_array_h, TRAPS) {
32003178

src/hotspot/share/classfile/javaClasses.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -689,9 +689,6 @@ class java_lang_Throwable: AllStatic {
689689

690690
// Programmatic access to stack trace
691691
static void get_stack_trace_elements(int depth, Handle backtrace, objArrayHandle stack_trace, TRAPS);
692-
#if HOTSPOT_TARGET_CLASSLIB == 8
693-
static oop get_stack_trace_element(Handle throwable, int index, TRAPS);
694-
#endif
695692

696693
// For recreating class initialization error exceptions.
697694
static Handle create_initialization_error(JavaThread* current, Handle throwable);

src/hotspot/share/include/jvm8.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,6 @@ JVM_IsNaN(jdouble d);
121121
JNIEXPORT jint JNICALL
122122
JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable);
123123

124-
JNIEXPORT jobject JNICALL
125-
JVM_GetStackTraceElement(JNIEnv *env, jobject throwable, jint index);
126-
127124
JNIEXPORT void JNICALL
128125
JVM_InitializeCompiler (JNIEnv *env, jclass compCls);
129126

@@ -590,4 +587,4 @@ JVM_GetStackAccessControlContext(JNIEnv *env, jclass cls);
590587
}
591588
#endif
592589

593-
#endif // _JAVASOFT_JVM8_H_
590+
#endif // _JAVASOFT_JVM8_H_

src/hotspot/share/prims/jvm.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3994,4 +3994,4 @@ JVM_ENTRY(jboolean, JVM_IsPrimitiveClass(JNIEnv *env, jclass cls))
39943994
oop mirror = JNIHandles::resolve_non_null(cls);
39953995
return (jboolean) java_lang_Class::is_primitive(mirror);
39963996
JVM_END
3997-
#endif */
3997+
#endif */

src/hotspot/share/prims/jvm8.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,6 @@ JVM_ENTRY(jint, JVM_GetStackTraceDepth(JNIEnv *env, jobject throwable))
134134
return java_lang_Throwable::depth(exception);
135135
JVM_END
136136

137-
JVM_ENTRY(jobject, JVM_GetStackTraceElement(JNIEnv *env, jobject throwable, jint index))
138-
JvmtiVMObjectAllocEventCollector oam; // This ctor (throughout this module) may trigger a safepoint/GC
139-
Handle exception(THREAD, JNIHandles::resolve(throwable));
140-
oop element = java_lang_Throwable::get_stack_trace_element(exception, index, CHECK_NULL);
141-
return JNIHandles::make_local(THREAD, element);
142-
JVM_END
143-
144137
// java.lang.Compiler ////////////////////////////////////////////////////
145138

146139
// The initial cuts of the HotSpot VM will not support JITs, and all existing

src/java.base/share/native/libjava/Throwable.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,4 @@ Java_java_lang_Throwable_getStackTraceDepth(JNIEnv *env, jobject throwable)
5656
{
5757
return JVM_GetStackTraceDepth(env, throwable);
5858
}
59-
60-
JNIEXPORT jobject JNICALL
61-
Java_java_lang_Throwable_getStackTraceElement(JNIEnv *env,
62-
jobject throwable, jint index)
63-
{
64-
return JVM_GetStackTraceElement(env, throwable, index);
65-
}
66-
#endif
59+
#endif

0 commit comments

Comments
 (0)