[PATCH] Documentation for sanitizer special case list

Alexey Samsonov samsonov at google.com
Fri Aug 2 05:00:09 PDT 2013


samsonov added you to the CC list for the revision "Documentation for sanitizer special case list".

Hi eugenis, silvas,

This documents the usage of -f(no)?sanitize-blacklist flags,
and the generic format of this file. Note, that although the original
name is "blacklist", we start to rename it into "special case list",
as newer tools (DataFlowSanitizer, which is under development) may use
to alter instrumentation instead of disabling it completely.

http://llvm-reviews.chandlerc.com/D1268

Files:
  docs/UsersManual.rst
  docs/SanitizerSpecialCaseList.rst
  docs/index.rst
  docs/AddressSanitizer.rst

Index: docs/UsersManual.rst
===================================================================
--- docs/UsersManual.rst
+++ docs/UsersManual.rst
@@ -940,6 +940,15 @@
       it is of the wrong dynamic type, or that its lifetime has not
       begun or has ended. Incompatible with ``-fno-rtti``.
 
+   You can turn off or modify checks for certain source files, functions
+   or even variables by providing a special file:
+
+   -  ``-fsanitize-blacklist=/path/to/blacklist/file``: disable or modify
+      sanitizer checks for objects listed in the file. See
+      :doc:`SanitizerSpecialCaseList` for file format description.
+   -  ``-fno-sanitize-blacklist``: don't use blacklist file, if it was
+      specified earlier in the command line.
+
    Experimental features of AddressSanitizer (not ready for widespread
    use, require explicit ``-fsanitize=address``):
 
Index: docs/SanitizerSpecialCaseList.rst
===================================================================
--- /dev/null
+++ docs/SanitizerSpecialCaseList.rst
@@ -0,0 +1,49 @@
+===========================
+Sanitizer special case list
+===========================
+
+.. contents::
+   :local:
+
+Goal
+====
+
+User of sanitizer tools, such as :doc:`AddressSanitizer`, :doc:`ThreadSanitizer`
+or :doc:`MemorySanitizer` may want to disable or alter some checks for
+certain objects to:
+
+* speedup hot function, which is known to be correct;
+* ignore a function that does some low-level magic (e.g. walks through the
+  thread stack, bypassing the frame boundaries);
+* ignore a known problem.
+
+To achieve this, user may provide a file listing the objects he wants to
+ignore, and provide it to clang at compile-time.
+
+Generally, the use of this file is **discouraged**, in most cases it's better
+to fix the reported issue in the source code.
+
+Format
+======
+
+Each special case list entry occupies a single line.
+
+.. code-block:: bash
+
+    # Empty lines, and lines starting with # are ignored.
+    # Turn off checks for the source file:
+    src:/path/to/source/file.c
+    # Turn off checks for a particular functions (use mangled names):
+    fun:MyFooBar
+    fun:_Z8MyFooBarv
+    # Wildcards are supported:
+    src:bad/sources/*
+    fun:*BadFunction*
+
+Some sanitizer tools may introduce custom entry types - see the tool-specific docs.
+
+Usage
+=====
+
+Create a file and provide it to the compiler using ``-fsanitize-blacklist`` flag.
+See :doc:`UsersManual` for details.
Index: docs/index.rst
===================================================================
--- docs/index.rst
+++ docs/index.rst
@@ -21,6 +21,7 @@
    AddressSanitizer
    ThreadSanitizer
    MemorySanitizer
+   SanitizerSpecialCaseList
    Modules
    FAQ
 
Index: docs/AddressSanitizer.rst
===================================================================
--- docs/AddressSanitizer.rst
+++ docs/AddressSanitizer.rst
@@ -126,6 +126,24 @@
 you should set environment variable
 ``ASAN_OPTIONS=check_initialization_order=1``.
 
+Blacklist
+---------
+
+You may use sanitizer special case list to disable AddressSanizier checks for
+certain source files, functions and global variables. See
+:doc:`SanitizerSpecialCaseList` for general file format description.
+AddressSanitizer-specific entry formats are:
+
+.. code-block:: bash
+
+    # Disable checks for globals with certain names or types:
+    global:bad_array
+    type:*Namespace::BadClassName*
+    # Disable initialization-order checks for globals:
+    global:bad_init_global=init
+    type:*Namespace::BadInitClassName*=init
+    src:bad/init/files/*=init
+
 Supported Platforms
 ===================
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1268.1.patch
Type: text/x-patch
Size: 3634 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130802/73dd2816/attachment.bin>


More information about the cfe-commits mailing list