Skip to content

Commit efaa4f6

Browse files
authored
Merge pull request #20609 from tajila/jfr3
Add frametype info to iterateStackTrace callback
2 parents 7d1ffb0 + 854931a commit efaa4f6

File tree

10 files changed

+130
-118
lines changed

10 files changed

+130
-118
lines changed

runtime/j9vm/j7vmi.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -500,16 +500,16 @@ JVM_FillInStackTrace(JNIEnv* env, jobject throwable)
500500
}
501501

502502
/**
503-
* Find the specified class in given class loader
503+
* Find the specified class in given class loader
504504
*
505505
* @param env
506506
* @param className null-terminated class name string.
507507
* @param init initialize the class when set
508-
* @param classLoader classloader of the class
508+
* @param classLoader classloader of the class
509509
* @param throwError set to true in order to throw errors
510510
* @return Assumed to be a jclass.
511511
*
512-
* Note: this call is implemented from info provided via CMVC 154874.
512+
* Note: this call is implemented from info provided via CMVC 154874.
513513
*/
514514
jobject JNICALL
515515
JVM_FindClassFromClassLoader(JNIEnv* env, char* className, jboolean init, jobject classLoader, jboolean throwError)
@@ -1425,7 +1425,7 @@ typedef struct GetStackTraceElementUserData {
14251425

14261426
/* Return TRUE to keep iterating, FALSE to halt the walk. */
14271427
static UDATA
1428-
getStackTraceElementIterator(J9VMThread * vmThread, void * voidUserData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass)
1428+
getStackTraceElementIterator(J9VMThread * vmThread, void * voidUserData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass, UDATA frameType)
14291429
{
14301430
GetStackTraceElementUserData * userData = voidUserData;
14311431

@@ -1784,33 +1784,33 @@ JVM_NewMultiArray(JNIEnv *env, jclass eltClass, jintArray dim)
17841784
vmFuncs->setCurrentException(currentThread, J9VMCONSTANTPOOL_JAVALANGILLEGALARGUMENTEXCEPTION, NULL);
17851785
} else {
17861786
j9object_t componentTypeClassObject = J9_JNI_UNWRAP_REFERENCE(eltClass);
1787-
1787+
17881788
if (NULL != componentTypeClassObject) {
17891789
J9Class *componentTypeClass = J9VM_J9CLASS_FROM_HEAPCLASS(currentThread, componentTypeClassObject);
17901790

17911791
/* create an array class with the desired arity */
17921792
UDATA count = dimensions;
17931793
J9Class *componentArrayClass = componentTypeClass;
17941794
BOOLEAN exceptionIsPending = FALSE;
1795-
1795+
17961796
while ((count > 0) && (!exceptionIsPending)) {
17971797
componentArrayClass = fetchArrayClass(currentThread, componentArrayClass);
17981798
exceptionIsPending = (NULL != currentThread->currentException);
17991799
count -= 1;
18001800
}
1801-
1801+
18021802
if (!exceptionIsPending) {
18031803
/* make a copy of the dimensions array in non-object memory */
18041804
I_32 onStackDimensions[MAX_DIMENSIONS];
18051805
j9object_t directObject = NULL;
18061806
UDATA i = 0;
1807-
1807+
18081808
memset(onStackDimensions, 0, sizeof(onStackDimensions));
18091809
dimensionsArrayObject = J9_JNI_UNWRAP_REFERENCE(dim);
18101810
for (i = 0; i < dimensions; i++) {
18111811
onStackDimensions[i] = J9JAVAARRAYOFINT_LOAD(currentThread, dimensionsArrayObject, i);
18121812
}
1813-
1813+
18141814
directObject = vmFuncs->helperMultiANewArray(currentThread, (J9ArrayClass *)componentArrayClass, (UDATA)dimensions, onStackDimensions, J9_GC_ALLOCATE_OBJECT_NON_INSTRUMENTABLE);
18151815
if (NULL != directObject) {
18161816
result = vmFuncs->j9jni_createLocalRef(env, directObject);
@@ -2435,11 +2435,11 @@ JVM_GetHostName(char* name, int namelen)
24352435
* sun.jvm.args =
24362436
*/
24372437
/*
2438-
* Notes:
2439-
* Redirector has an implementation of JVM_InitAgentProperties.
2440-
* This method is still kept within the actual jvm dll in case that a launcher uses this jvm dll directly without going through the redirector.
2441-
* If this method need to be modified, the changes have to be synchronized for both versions.
2442-
*/
2438+
* Notes:
2439+
* Redirector has an implementation of JVM_InitAgentProperties.
2440+
* This method is still kept within the actual jvm dll in case that a launcher uses this jvm dll directly without going through the redirector.
2441+
* If this method need to be modified, the changes have to be synchronized for both versions.
2442+
*/
24432443
jobject JNICALL
24442444
JVM_InitAgentProperties(JNIEnv *env, jobject agent_props)
24452445
{

runtime/j9vm/javanextvmi.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ typedef struct GetStackTraceElementUserData {
7878
} GetStackTraceElementUserData;
7979

8080
static UDATA
81-
getStackTraceElementIterator(J9VMThread *vmThread, void *voidUserData, UDATA bytecodeOffset, J9ROMClass *romClass, J9ROMMethod *romMethod, J9UTF8 *fileName, UDATA lineNumber, J9ClassLoader *classLoader, J9Class* ramClass)
81+
getStackTraceElementIterator(J9VMThread *vmThread, void *voidUserData, UDATA bytecodeOffset, J9ROMClass *romClass, J9ROMMethod *romMethod, J9UTF8 *fileName, UDATA lineNumber, J9ClassLoader *classLoader, J9Class* ramClass, UDATA frameType)
8282
{
8383
UDATA result = J9_STACKWALK_STOP_ITERATING;
8484

runtime/jcl/common/jclexception.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ extern "C" {
3939
static void setStackTraceElementFields(J9VMThread *vmThread, j9object_t element, J9ClassLoader *classLoader);
4040
#endif /* JAVA_SPEC_VERSION >= 11 */
4141

42-
static UDATA getStackTraceIterator(J9VMThread * vmThread, void * voidUserData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass);
42+
static UDATA getStackTraceIterator(J9VMThread * vmThread, void * voidUserData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass, UDATA frameType);
4343

4444
/**
4545
* Saves enough context into the StackTraceElement to allow printing later. For
@@ -91,7 +91,7 @@ setStackTraceElementSource(J9VMThread* vmThread, j9object_t stackTraceElement, J
9191

9292

9393
static UDATA
94-
getStackTraceIterator(J9VMThread * vmThread, void * voidUserData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass)
94+
getStackTraceIterator(J9VMThread * vmThread, void * voidUserData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass, UDATA frameType)
9595
{
9696
J9GetStackTraceUserData *userData = (J9GetStackTraceUserData*)voidUserData;
9797
J9JavaVM * vm = vmThread->javaVM;
@@ -301,7 +301,7 @@ getStackTraceIterator(J9VMThread * vmThread, void * voidUserData, UDATA bytecode
301301
return rc;
302302
}
303303

304-
J9IndexableObject *
304+
J9IndexableObject *
305305
getStackTrace(J9VMThread * vmThread, j9object_t * exceptionAddr, UDATA pruneConstructors)
306306
{
307307
J9JavaVM * vm = vmThread->javaVM;
@@ -332,7 +332,7 @@ getStackTrace(J9VMThread * vmThread, j9object_t * exceptionAddr, UDATA pruneCons
332332
if (arrayClass == NULL) {
333333
/* the first class in vm->arrayROMClasses is the array class for Objects */
334334
arrayClass = vmFuncs->internalCreateArrayClass(vmThread,
335-
(J9ROMArrayClass *) J9ROMIMAGEHEADER_FIRSTCLASS(vm->arrayROMClasses),
335+
(J9ROMArrayClass *) J9ROMIMAGEHEADER_FIRSTCLASS(vm->arrayROMClasses),
336336
elementClass);
337337
if (arrayClass == NULL) {
338338
/* exception is pending from the call */

runtime/oti/j9consts.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,12 @@ extern "C" {
927927
#define J9_JAVA_NATIVE 0x100
928928
#define J9_JAVA_STATIC 0x8
929929

930+
/* Stack walker frame Types */
931+
#define J9VM_STACK_FRAME_INTERPRETER 0
932+
#define J9VM_STACK_FRAME_JIT 1
933+
#define J9VM_STACK_FRAME_JIT_INLINE 2
934+
#define J9VM_STACK_FRAME_NATIVE 3
935+
930936
/* JFR event types */
931937

932938
#define J9JFR_EVENT_TYPE_EXECUTION_SAMPLE 0

runtime/oti/j9nonbuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4981,7 +4981,7 @@ typedef struct J9InternalVMFunctions {
49814981
#if defined(J9VM_GC_DYNAMIC_CLASS_UNLOADING)
49824982
void ( *cleanUpClassLoader)(struct J9VMThread *vmThread, struct J9ClassLoader* classLoader) ;
49834983
#endif /* defined(J9VM_GC_DYNAMIC_CLASS_UNLOADING) */
4984-
UDATA ( *iterateStackTrace)(struct J9VMThread * vmThread, j9object_t* exception, UDATA (*callback) (struct J9VMThread * vmThread, void * userData, UDATA bytecodeOffset, struct J9ROMClass * romClass, struct J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, struct J9ClassLoader* classLoader, struct J9Class* ramClass), void * userData, UDATA pruneConstructors, UDATA skipHiddenFrames) ;
4984+
UDATA ( *iterateStackTrace)(struct J9VMThread * vmThread, j9object_t* exception, UDATA (*callback) (struct J9VMThread * vmThread, void * userData, UDATA bytecodeOffset, struct J9ROMClass * romClass, struct J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, struct J9ClassLoader* classLoader, struct J9Class* ramClass, UDATA frameType), void * userData, UDATA pruneConstructors, UDATA skipHiddenFrames) ;
49854985
char* ( *getNPEMessage)(struct J9NPEMessageData *npeMsgData);
49864986
void ( *internalReleaseVMAccessNoMutex)(struct J9VMThread * vmThread) ;
49874987
struct J9HookInterface** ( *getVMHookInterface)(struct J9JavaVM* vm) ;

runtime/oti/vm_api.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,7 @@ internalExceptionDescribe(J9VMThread *vmThread);
858858
* @return UDATA
859859
*/
860860
UDATA
861-
iterateStackTrace(J9VMThread * vmThread, j9object_t* exception, UDATA (*callback) (J9VMThread * vmThread, void * userData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass), void * userData, UDATA pruneConstructors, UDATA skipHiddenFrames);
861+
iterateStackTrace(J9VMThread * vmThread, j9object_t* exception, UDATA (*callback) (J9VMThread * vmThread, void * userData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass, UDATA frameType), void * userData, UDATA pruneConstructors, UDATA skipHiddenFrames);
862862

863863
/**
864864
* @brief
@@ -881,7 +881,7 @@ iterateStackTrace(J9VMThread * vmThread, j9object_t* exception, UDATA (*callba
881881
* @return UDATA
882882
*/
883883
UDATA
884-
iterateStackTraceImpl(J9VMThread * vmThread, j9object_t* exception, UDATA (*callback) (J9VMThread * vmThread, void * userData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass), void * userData, UDATA pruneConstructors, UDATA skipHiddenFrames, UDATA sizeOfWalkstateCache, BOOLEAN exceptionIsJavaObject);
884+
iterateStackTraceImpl(J9VMThread * vmThread, j9object_t* exception, UDATA (*callback) (J9VMThread * vmThread, void * userData, UDATA bytecodeOffset, J9ROMClass * romClass, J9ROMMethod * romMethod, J9UTF8 * fileName, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass, UDATA frameType), void * userData, UDATA pruneConstructors, UDATA skipHiddenFrames, UDATA sizeOfWalkstateCache, BOOLEAN exceptionIsJavaObject);
885885

886886

887887
/* ---------------- exceptionsupport.c ---------------- */

runtime/rasdump/javadump.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686

8787
/* Callback Function prototypes */
8888
UDATA writeFrameCallBack (J9VMThread* vmThread, J9StackWalkState* state);
89-
UDATA writeExceptionFrameCallBack (J9VMThread* vmThread, void* userData, UDATA bytecodeOffset, J9ROMClass* romClass, J9ROMMethod* romMethod, J9UTF8* sourceFile, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass);
89+
UDATA writeExceptionFrameCallBack (J9VMThread* vmThread, void* userData, UDATA bytecodeOffset, J9ROMClass* romClass, J9ROMMethod* romMethod, J9UTF8* sourceFile, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass, UDATA frameType);
9090
void writeLoaderCallBack (void* classLoader, void* userData);
9191
void writeLibrariesCallBack (void* classLoader, void* userData);
9292
void writeClassesCallBack (void* classLoader, void* userData);
@@ -240,7 +240,7 @@ private :
240240

241241
/* Allow the callback functions access */
242242
friend UDATA writeFrameCallBack (J9VMThread* vmThread, J9StackWalkState* state);
243-
friend UDATA writeExceptionFrameCallBack (J9VMThread* vmThread, void* userData, UDATA bytecodeOffset, J9ROMClass* romClass, J9ROMMethod* romMethod, J9UTF8* sourceFile, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass);
243+
friend UDATA writeExceptionFrameCallBack (J9VMThread* vmThread, void* userData, UDATA bytecodeOffset, J9ROMClass* romClass, J9ROMMethod* romMethod, J9UTF8* sourceFile, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass, UDATA frameType);
244244
friend void writeLoaderCallBack (void* classLoader, void* userData);
245245
friend void writeLibrariesCallBack (void* classLoader, void* userData);
246246
friend void writeClassesCallBack (void* classLoader, void* userData);
@@ -5757,7 +5757,7 @@ writeFrameCallBack(J9VMThread* vmThread, J9StackWalkState* state)
57575757
}
57585758

57595759
UDATA
5760-
writeExceptionFrameCallBack(J9VMThread* vmThread, void* userData, UDATA bytecodeOffset, J9ROMClass* romClass, J9ROMMethod* romMethod, J9UTF8* sourceFile, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass)
5760+
writeExceptionFrameCallBack(J9VMThread* vmThread, void* userData, UDATA bytecodeOffset, J9ROMClass* romClass, J9ROMMethod* romMethod, J9UTF8* sourceFile, UDATA lineNumber, J9ClassLoader* classLoader, J9Class* ramClass, UDATA frameType)
57615761
{
57625762
JavaCoreDumpWriter *jcdw = (JavaCoreDumpWriter *)((J9StackWalkState*)userData)->userData1;
57635763
return jcdw->writeExceptionFrame(userData, romClass, romMethod, sourceFile, lineNumber);

0 commit comments

Comments
 (0)