]> granicus.if.org Git - clang/commitdiff
[Docs] Slightly update LSan documentation.
authorAlexey Samsonov <vonosmas@gmail.com>
Fri, 22 Jan 2016 01:35:45 +0000 (01:35 +0000)
committerAlexey Samsonov <vonosmas@gmail.com>
Fri, 22 Jan 2016 01:35:45 +0000 (01:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258476 91177308-0d34-0410-b5e6-96231b3b80d8

docs/AddressSanitizer.rst
docs/LeakSanitizer.rst

index 93f63143210b7104bb7f5edf209f0bd2fe0c42f0..a42a1ff62377e28e977c4c9b55f46197160ecd70 100644 (file)
@@ -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
 ===========
 
index 85918088ccdb2cb627bd25f08847060eb22fc8b4..c3cceccd287fcb849bb2b08cf688f1b194021f45 100644 (file)
@@ -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
 ================