Skip to content

Commit f6cc8cb

Browse files
authored
Merge pull request #18692 from fengxue-IS/javacore-0.43
(0.43) Add -XX:[+|-]ShowUnmountedThreadStacks option
2 parents 2525e92 + 939c076 commit f6cc8cb

File tree

4 files changed

+226
-30
lines changed

4 files changed

+226
-30
lines changed

runtime/oti/j9dump.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,17 @@ typedef struct RasDumpGlobalStorage {
3434
UDATA allocationRangeMin;
3535
UDATA allocationRangeMax;
3636

37-
U_32 noProtect; /* If set, do not take dumps under their own signal handler */
38-
U_32 noFailover; /* If set, do not failover to /tmp etc if unable to write dump */
37+
U_32 noProtect; /* If set, do not take dumps under their own signal handler. */
38+
U_32 noFailover; /* If set, do not failover to /tmp etc if unable to write dump. */
3939

40-
U_32 showNativeSymbols; /* How to handle resolving native stack symbols. */
40+
U_32 dumpFlags; /* Flags to control java dump behaviour. */
4141
} RasDumpGlobalStorage;
4242

43-
/* Values for RasDumpGlobalStorage.showNativeSymbols. */
44-
#define J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_NONE 0
45-
#define J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_BASIC 1
46-
#define J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_ALL 2
43+
/* Flags on how to handle resolving native stack symbols. */
44+
#define J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_BASIC 0x1
45+
#define J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_ALL 0x2
46+
/* Flag to show unmounted Thread stacktrace in java dump. */
47+
#define J9RAS_JAVADUMP_SHOW_UNMOUNTED_THREAD_STACKS 0x4
4748

4849
struct J9RASdumpAgent; /* Forward struct declaration */
4950
struct J9RASdumpContext; /* Forward struct declaration */

runtime/oti/jvminit.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,12 @@ enum INIT_STAGE {
454454
#define VMOPT_XXSHOWNATIVESTACKSYMBOLS_BASIC "-XX:+ShowNativeStackSymbols=basic" /* show only easily acquired native stack symbols */
455455
#define VMOPT_XXSHOWNATIVESTACKSYMBOLS_ALL "-XX:+ShowNativeStackSymbols=all" /* show all available native stack symbols */
456456

457+
#if JAVA_SPEC_VERSION >= 21
458+
/* Option to control if unmounted thread stacktraces are shown in java core dumps. */
459+
#define VMOPT_XXSHOWUNMOUNTEDTHREADSTACKS "-XX:+ShowUnmountedThreadStacks"
460+
#define VMOPT_XXNOSHOWUNMOUNTEDTHREADSTACKS "-XX:-ShowUnmountedThreadStacks"
461+
#endif /* JAVA_SPEC_VERSION >= 21 */
462+
457463
/* Option to turn on exception on synchronization on instances of value-based classes */
458464
#define VMOPT_XXDIAGNOSE_SYNC_ON_VALUEBASED_CLASSES_EQUALS1 "-XX:DiagnoseSyncOnValueBasedClasses=1"
459465
/* Option to turn on warning on synchronization on instances of value-based classes */

runtime/rasdump/dmpsup.c

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -547,17 +547,28 @@ configureDumpAgents(J9JavaVM *vm, J9VMInitArgs *j9vm_args, BOOLEAN isBootup)
547547
IDATA allSymbols = FIND_AND_CONSUME_ARG(j9vm_args, EXACT_MATCH, VMOPT_XXSHOWNATIVESTACKSYMBOLS_ALL, NULL);
548548
IDATA basicSymbols = FIND_AND_CONSUME_ARG(j9vm_args, EXACT_MATCH, VMOPT_XXSHOWNATIVESTACKSYMBOLS_BASIC, NULL);
549549

550-
/* set default */
551-
dumpGlobal->showNativeSymbols = J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_BASIC;
552-
553-
if ((noSymbols > allSymbols) && (noSymbols > basicSymbols)) {
554-
/* no symbols requested */
555-
dumpGlobal->showNativeSymbols = J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_NONE;
556-
} else if ((allSymbols > basicSymbols) && (allSymbols > noSymbols)) {
550+
if ((allSymbols > basicSymbols) && (allSymbols > noSymbols)) {
557551
/* all symbols requested */
558-
dumpGlobal->showNativeSymbols = J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_ALL;
552+
dumpGlobal->dumpFlags |= J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_ALL;
553+
} else if (!((noSymbols > allSymbols) && (noSymbols > basicSymbols))) {
554+
/* no symbols not requested, default to basic symbols */
555+
dumpGlobal->dumpFlags |= J9RAS_JAVADUMP_SHOW_NATIVE_STACK_SYMBOLS_BASIC;
556+
}
557+
}
558+
559+
#if JAVA_SPEC_VERSION >= 21
560+
/* -XX:[+/-]ShowUnmountedThreadStacks */
561+
{
562+
IDATA showUnmountedThreadStacks = FIND_AND_CONSUME_ARG(j9vm_args, EXACT_MATCH, VMOPT_XXSHOWUNMOUNTEDTHREADSTACKS, NULL);
563+
IDATA noShowUnmountedThreadStacks = FIND_AND_CONSUME_ARG(j9vm_args, EXACT_MATCH, VMOPT_XXNOSHOWUNMOUNTEDTHREADSTACKS, NULL);
564+
565+
if (showUnmountedThreadStacks > noShowUnmountedThreadStacks) {
566+
/* Unmounted thread stacktrace requested. */
567+
dumpGlobal->dumpFlags |= J9RAS_JAVADUMP_SHOW_UNMOUNTED_THREAD_STACKS;
559568
}
569+
/* Do not show unmounted thread stacktrace in javadump by default. */
560570
}
571+
#endif /* JAVA_SPEC_VERSION >= 21 */
561572

562573
agentOpts = j9mem_allocate_memory(sizeof(J9RASdumpOption)*MAX_DUMP_OPTS, OMRMEM_CATEGORY_VM);
563574
if( NULL == agentOpts ) {

0 commit comments

Comments
 (0)