Hi Magnus,
The current approach uses AddressSanitizer as a shared library
(libasan.so) which is part of GCC/Clang toolkit. In case you use system
toolkit, then libasan.so is available for linker and at runtime. But if
you set a custom toolkit by --with-devkit option, then libasan.so form
this toolkit may not be available for linker and at runtime by default.
As a result, you can get errors while linking and running. To fix that,
you normally need to make it available using ldconfig, or update
LD_LIBRARY_PATH. That's why it updates LD_LIBRARY_PATH with
DEVKIT_LIB_DIR if a custom toolkit was used. That may be helpful when
you build JDK in environment like jib/jprt.
I tried to remove exporting ASAN_ENABLED and DEVKIT_LIB_DIR, and as a
result, ASAN_OPTIONS and DEVKIT_LIB_DIR didn't go to jtreg command which
caused tests to fail when you run "make test". If we don't export
ASAN_OPTIONS and DEVKIT_LIB_DIR, then the updates in TestCommon.gmk
don't make much sense to me because those variables have to be
explicitly set for "make" anyway.
I can remove exporting those variables and revert TestCommon.gmk.
Although, it looks nicer to me if we can run the tests just with "make
test" without specifying ASAN_OPTIONS and DEVKIT_LIB_DIR explicitly.
What do you think?
Artem
On 10/30/2017 10:50 AM, Magnus Ihse Bursie wrote:
On 2017-10-30 08:39, Artem Smotrakov wrote:
cc'ing [email protected] as David suggested.
Artem
On 10/27/2017 11:02 PM, Artem Smotrakov wrote:
Hello,
Please review the following patch which adds support for
AddressSanitizer.
AddressSanitizer is a runtime memory error detector which looks for
various memory corruption issues and leaks.
Please refer to [1] for details. AddressSanitizer is available in
gcc 4.8+ and clang 3.1+
The patch below introduces --enable-asan parameter for the configure
script which enables AddressSanitizer.
Bug: https://bugs.openjdk.java.net/browse/JDK-8189800
Webrev: http://cr.openjdk.java.net/~asmotrak/8189800/webrev.00/
spec.gmk.in should only have export for variables that needs to be
exported in the environment for executing binaries, that is
ASAN_OPTIONS and LD_LIBRARY_PATH, not ASAN_ENABLED or DEVKIT_LIB_DIR.
I'm also a bit curious about the addition of of DEVKIT_LIB_DIR. Would
you care to elaborate your thinking?
Otherwise it looks good.
/Magnus
[1] https://github.com/google/sanitizers/wiki/AddressSanitizer
Artem