RFR: 8354520: IGV: dump contextual information

Roberto Castañeda Lozano rcastanedalo at openjdk.org
Thu Apr 17 14:14:30 UTC 2025


This changeset extends the IGV graph dumps with additional properties that ease tracing the dumps back to the context in which they were produced. The changeset dumps, for every compilation, the following additional properties:

- JVM arguments
- platform information
- JVM version information
- date and time
- process ID
- (compiler) thread ID

![compilation-properties](https://github.com/user-attachments/assets/8ddc8fb9-c348-4761-8e19-c70633a1b59f)

Additionally, the changeset produce and dumps the C2 stack trace from which each graph is dumped:

![c2-stack-trace](https://github.com/user-attachments/assets/085547ee-b0b3-4a38-86f1-9df79cf1cc01)

This should be particularly useful in an interactive context, where the user steps through C2 code using a debugger and dumps graphs at different points. To produce a stack trace in this context, the usual debugger-entry C2 functions (`igv_print`, `igv_append`, `Node::dump_bfs`, ...) are extended with extra arguments to specify the stack handling registers (stack pointer, frame pointer, and program counter):

![c2-stack-trace-from-gdb](https://github.com/user-attachments/assets/29de2964-ee2d-4f5f-bcf7-d81e1bc6c8a6)

The inconvenience of manually specifying the stack handling registers can be addressed by hiding them in debugger user-defined commands, e.g.:


define igv
  p igv_print(true, $sp, $fp, $pc)
end

define igv_node
  p find_node($arg0)->dump_bfs(0, 0, "!", $sp, $fp, $pc)
end


Thanks to @TobiHartmann for providing useful feedback!

#### Testing

 - tier1 (windows-x64, linux-x64, linux-aarch64, macosx-x64, and macosx-aarch64; release and debug mode).
 - Tested interactive usage manually via `gdb` and `rr` on linux-x64.
 - Tested automatically that dumping thousands of graphs does not trigger any assertion failure.

-------------

Commit messages:
 - Instrument dump_bfs functionality to dump C2 stack traces
 - Dump also process and thread ids
 - Remove unused import
 - Document gdb usage
 - Remove default arguments for debugger functions
 - Dump contextual information

Changes: https://git.openjdk.org/jdk/pull/24724/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24724&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8354520
  Stats: 214 lines in 7 files changed: 178 ins; 0 del; 36 mod
  Patch: https://git.openjdk.org/jdk/pull/24724.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24724/head:pull/24724

PR: https://git.openjdk.org/jdk/pull/24724


More information about the hotspot-compiler-dev mailing list