diff options
Diffstat (limited to 'docs/SanitizerCoverage.rst')
-rw-r--r-- | docs/SanitizerCoverage.rst | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/docs/SanitizerCoverage.rst b/docs/SanitizerCoverage.rst index f3f13c8317..c7cd853dd6 100644 --- a/docs/SanitizerCoverage.rst +++ b/docs/SanitizerCoverage.rst @@ -144,6 +144,11 @@ PC-Table **Experimental, may change or disappear in future** +**Note:** this instrumentation might be incompatible with dead code stripping +(``-Wl,-gc-sections``) for linkers other than LLD, thus resulting in a +significant binary size overhead. For more information, see +`Bug 34636 <https://bugs.llvm.org/show_bug.cgi?id=34636>`_. + With ``-fsanitize-coverage=pc-table`` the compiler will create a table of instrumented PCs. Requires either ``-fsanitize-coverage=inline-8bit-counters`` or ``-fsanitize-coverage=trace-pc-guard``. @@ -222,9 +227,9 @@ It contains 3 basic blocks, let's name them A, B, C: If blocks A, B, and C are all covered we know for certain that the edges A=>B and B=>C were executed, but we still don't know if the edge A=>C was executed. Such edges of control flow graph are called -`critical <http://en.wikipedia.org/wiki/Control_flow_graph#Special_edges>`_. The -edge-level coverage simply splits all critical -edges by introducing new dummy blocks and then instruments those blocks: +`critical <https://en.wikipedia.org/wiki/Control_flow_graph#Special_edges>`_. +The edge-level coverage simply splits all critical edges by introducing new +dummy blocks and then instruments those blocks: .. code-block:: none @@ -248,6 +253,9 @@ and with ``-fsanitize-coverage=trace-gep`` -- the `LLVM GEP instructions <https://llvm.org/docs/GetElementPtr.html>`_ (to capture array indices). +Unless ``no-prune`` option is provided, some of the comparison instructions +will not be instrumented. + .. code-block:: c++ // Called before a comparison instruction. |