diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2016-01-22 01:35:45 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2016-01-22 01:35:45 +0000 |
commit | f06e83bf0e3f13f78b1b4e8cfdd0428dfd1cb88d (patch) | |
tree | 24622c918dd74237f9629c8674f71853db67e15c /docs | |
parent | 0b95b25f8ef067af4e15d8a3df46ce4732910bc0 (diff) | |
download | clang-f06e83bf0e3f13f78b1b4e8cfdd0428dfd1cb88d.tar.gz |
[Docs] Slightly update LSan documentation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258476 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs')
-rw-r--r-- | docs/AddressSanitizer.rst | 17 | ||||
-rw-r--r-- | docs/LeakSanitizer.rst | 48 |
2 files changed, 50 insertions, 15 deletions
diff --git a/docs/AddressSanitizer.rst b/docs/AddressSanitizer.rst index 93f6314321..a42a1ff623 100644 --- a/docs/AddressSanitizer.rst +++ b/docs/AddressSanitizer.rst @@ -232,6 +232,23 @@ problems happening in certain source files or with certain global variables. type:*BadInitClassSubstring*=init src:bad/init/files/*=init +Suppressing memory leaks +------------------------ + +Memory leak reports produced by :doc:`LeakSanitizer` (if it is run as a part +of AddressSanitizer) can be suppressed by a separate file passed as + +.. code-block:: bash + + LSAN_OPTIONS=suppressions=MyLSan.supp + +which contains lines of the form `leak:<pattern>`. Memory leak will be +suppressed if pattern matches any function name, source file name, or +library name in the symbolized stack trace of the leak report. See +`full documentation +<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer#suppressions>`_ +for more details. + Limitations =========== diff --git a/docs/LeakSanitizer.rst b/docs/LeakSanitizer.rst index 85918088cc..c3cceccd28 100644 --- a/docs/LeakSanitizer.rst +++ b/docs/LeakSanitizer.rst @@ -9,21 +9,39 @@ Introduction ============ LeakSanitizer is a run-time memory leak detector. It can be combined with -:doc:`AddressSanitizer` to get both memory error and leak detection. -LeakSanitizer does not introduce any additional slowdown when used in this mode. -The LeakSanitizer runtime can also be linked in separately to get leak detection -only, at a minimal performance cost. - -Current status -============== - -LeakSanitizer is turned on by default, but it is only supported on x86\_64 -Linux. - -The combined mode has been tested on fairly large software projects. The -stand-alone mode has received much less testing. - -There are plans to support LeakSanitizer in :doc:`MemorySanitizer` builds. +:doc:`AddressSanitizer` to get both memory error and leak detection, or +used in a stand-alone mode. LSan adds almost no performance overhead +until the very end of the process, at which point there is an extra leak +detection phase. + +Usage +===== + +LeakSanitizer is only supported on x86\_64 Linux. In order to use it, +simply build your program with :doc:`AddressSanitizer`: + +.. code-block:: console + + $ cat memory-leak.c + #include <stdlib.h> + void *p; + int main() { + p = malloc(7); + p = 0; // The memory is leaked here. + return 0; + } + % clang -fsanitize=address -g memory-leak.c ; ./a.out + ==23646==ERROR: LeakSanitizer: detected memory leaks + Direct leak of 7 byte(s) in 1 object(s) allocated from: + #0 0x4af01b in __interceptor_malloc /projects/compiler-rt/lib/asan/asan_malloc_linux.cc:52:3 + #1 0x4da26a in main memory-leak.c:4:7 + #2 0x7f076fd9cec4 in __libc_start_main libc-start.c:287 + SUMMARY: AddressSanitizer: 7 byte(s) leaked in 1 allocation(s). + +To use LeakSanitizer in stand-alone mode, link your program with +``-fsanitize=leak`` flag. Make sure to use ``clang`` (not ``ld``) for the +link step, so that it would link in proper LeakSanitizer run-time library +into the final executable. More Information ================ |