Adds initial LSan (LeakSanitizer) support to Hotspot. This setup has been used 
to identify multiple leaks so far. It can run most of the test suite except 
those that rely on testing compressed oops, compressed class pointers, or CDS. 
It is especially useful when combined with ASan, as LSan can use poisoning 
information to determine what memory to scan or not to scan, making leak 
detection more accurate and faster.

**Suppressing:**
Currently the suppression list is only used to suppress JLI leaks that are 
known, the rest are done in code. Suppressing needs to identify the source of 
thet leak. Due to Hotspot's code organization, we would need to suppress 
`os::malloc` and friends, which would suppress everything. Suppressing in code 
has the added benefit of being explicit and surviving refactors if methods 
change.

**Caveats:**
- `UseCompressedOops` and `UseCompressedClassPointers` are forced to false when 
LSan is enabled. This is necessary to ensure all pointers to memory which could 
possible container pointers to malloc memory are property aligned, which is an 
LSan requirement.
- `UseSharedSpaces` and `RequireSharedSpaces` are forced to false when LSan is 
enabled. CDS caused LSan to report many false positives and I was unable to get 
to the bottom of this. In the future hopefully this can be removed.
- By default ASan enables LSan, however we explicitly disable it unless 
`--enable-lsan` is given. This is due to the other caveats. It is useful to be 
able to use ASan without LSan. Using LSan by itself is less likely to be useful 
and will probably not work, but its still possible currently.
- There are a series of tests that are upset due to the above flags being 
forced false, as they rely on the arguments being supported. In the future 
ideally these tests would be skipped nicely when LSan is enabled.

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

Commit messages:
 - Merge remote-tracking branch 'upstream/master' into lsan
 - Merge remote-tracking branch 'upstream/master' into lsan
 - Merge remote-tracking branch 'upstream/master' into lsan
 - Implement initial LSAN support v2
 - Implement initial LSAN support

Changes: https://git.openjdk.org/jdk/pull/12229/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12229&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8298445
  Stats: 314 lines in 23 files changed: 305 ins; 0 del; 9 mod
  Patch: https://git.openjdk.org/jdk/pull/12229.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12229/head:pull/12229

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

Reply via email to