[clang] [llvm] [sancov] Introduce optional callback for stack-depth tracking (PR #138323)
Marco Elver via llvm-commits
llvm-commits at lists.llvm.org
Mon May 5 23:49:58 PDT 2025
================
@@ -385,6 +385,49 @@ Users need to implement a single function to capture the CF table at startup:
// the collected control flow.
}
+Tracing Stack Depth
+===================
+
+With ``-fsanitize-coverage=stack-depth`` the compiler will track how much
+stack space has been used for a function call chain. Leaf functions are
+not included in this tracing.
+
+The maximum depth of a function call graph is stored in the thread-local
+``__sancov_lowest_stack`` variable. Instrumentation is inserted in every
+non-leaf function to check the stack pointer against this variable,
+and if it is lower, store the current stack pointer. This effectively
+inserts the following:
+
+.. code-block:: c++
+
+ thread_local uintptr_t __sancov_lowest_stack;
+
+ uintptr_t stack = (uintptr_t)__builtin_frame_address(0);
+ if (stack < __sancov_lowest_stack)
+ __sancov_lowest_stack = stack;
+
+If ``-fsanitize-coverage-stack-depth-callback-min=N`` is also used, the
----------------
melver wrote:
"If ``-fsanitize-coverage-stack-depth-callback-min=N`` (where ``N`` > 0) is also used ..." ?
Because right now it's unclear what behaviour is supposed to be if N==0. Per current implementation N==0 disables this feature.
https://github.com/llvm/llvm-project/pull/138323
More information about the llvm-commits
mailing list