RFR: JDK-8281023: NMT integration into pp debug command does not work [v3]

Thomas Stuefe stuefe at openjdk.java.net
Thu Feb 3 05:37:45 UTC 2022


> JDK-8280289 enhanced the debug pp() command to use NMT if enabled, and to print NMT related info. That is useful, but there are some issues.
> 
> On debug, it just asserts, since the empty reserved region we create to hold the output of the mmap-search is created with address=NULL:
> 
> 
> (gdb) call pp(0x7ffff010b030)
> 
> "Executing pp"
> 
> Thread 2 "java" received signal SIGSEGV, Segmentation fault.
> 0x00007ffff6721a71 in VirtualMemoryRegion::VirtualMemoryRegion (this=this at entry=0x7ffff5bb2620, addr=addr at entry=0x0, size=size at entry=0) at /shared/projects/openjdk/jdk-jdk/source/src/hotspot/share/services/virtualMemoryTracker.hpp:180
> 180 assert(addr != NULL, "Invalid address");
> 
> 
> On release we don't assert and get further, but the use of SafeFetch is slightly wrong. It will deny us any NMT data about p if *p==0:
> 
> 
> if (CanUseSafeFetchN() && SafeFetchN((intptr_t*)p, 0) != 0) {
> 
> 
> This patch:
> - fixes uses of SafeFetch
> - changes the mmap-region-search-code to not require an empty ReservedMemoryRegion in order to avoid triggering the assert in virtualMemoryTracker.hpp:180
> - adds a comment about the safe use of pp() in gdb (one needs to switch off signal handling of SIGSEGV for this to work)
> 
> Tests:
> - I tested manually that pp works with different levels of NMT (Linux x64)
> - GHAs in process

Thomas Stuefe has updated the pull request incrementally with one additional commit since the last revision:

  Use CanSafeFetch32

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/7297/files
  - new: https://git.openjdk.java.net/jdk/pull/7297/files/10dc66ed..10a24978

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=7297&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=7297&range=01-02

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7297.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7297/head:pull/7297

PR: https://git.openjdk.java.net/jdk/pull/7297


More information about the hotspot-dev mailing list