You've already forked linux-packaging-mono
							
							
		
			
	
	
		
			63 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			63 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
|   | ==============
 | ||
|  | SanitizerStats
 | ||
|  | ==============
 | ||
|  | 
 | ||
|  | .. contents::
 | ||
|  |    :local: | ||
|  | 
 | ||
|  | Introduction
 | ||
|  | ============
 | ||
|  | 
 | ||
|  | The sanitizers support a simple mechanism for gathering profiling statistics
 | ||
|  | to help understand the overhead associated with sanitizers.
 | ||
|  | 
 | ||
|  | How to build and run
 | ||
|  | ====================
 | ||
|  | 
 | ||
|  | SanitizerStats can currently only be used with :doc:`ControlFlowIntegrity`.
 | ||
|  | In addition to ``-fsanitize=cfi*``, pass the ``-fsanitize-stats`` flag.
 | ||
|  | This will cause the program to count the number of times that each control
 | ||
|  | flow integrity check in the program fires.
 | ||
|  | 
 | ||
|  | At run time, set the ``SANITIZER_STATS_PATH`` environment variable to direct
 | ||
|  | statistics output to a file. The file will be written on process exit.
 | ||
|  | The following substitutions will be applied to the environment variable:
 | ||
|  | 
 | ||
|  |   - ``%b`` -- The executable basename.
 | ||
|  |   - ``%p`` -- The process ID.
 | ||
|  | 
 | ||
|  | You can also send the ``SIGUSR2`` signal to a process to make it write
 | ||
|  | sanitizer statistics immediately.
 | ||
|  | 
 | ||
|  | The ``sanstats`` program can be used to dump statistics. It takes as a
 | ||
|  | command line argument the path to a statistics file produced by a program
 | ||
|  | compiled with ``-fsanitize-stats``.
 | ||
|  | 
 | ||
|  | The output of ``sanstats`` is in four columns, separated by spaces. The first
 | ||
|  | column is the file and line number of the call site. The second column is
 | ||
|  | the function name. The third column is the type of statistic gathered (in
 | ||
|  | this case, the type of control flow integrity check). The fourth column is
 | ||
|  | the call count.
 | ||
|  | 
 | ||
|  | Example:
 | ||
|  | 
 | ||
|  | .. code-block:: console
 | ||
|  | 
 | ||
|  |     $ cat -n vcall.cc
 | ||
|  |          1 struct A {
 | ||
|  |          2   virtual void f() {}
 | ||
|  |          3 };
 | ||
|  |          4
 | ||
|  |          5 __attribute__((noinline)) void g(A *a) {
 | ||
|  |          6   a->f();
 | ||
|  |          7 }
 | ||
|  |          8
 | ||
|  |          9 int main() {
 | ||
|  |         10   A a;
 | ||
|  |         11   g(&a);
 | ||
|  |         12 }
 | ||
|  |     $ clang++ -fsanitize=cfi -flto -fuse-ld=gold vcall.cc -fsanitize-stats -g
 | ||
|  |     $ SANITIZER_STATS_PATH=a.stats ./a.out
 | ||
|  |     $ sanstats a.stats
 | ||
|  |     vcall.cc:6 _Z1gP1A cfi-vcall 1
 |