]>
Commit | Line | Data |
---|---|---|
92a42be0 SL |
1 | //===-- sanitizer/coverage_interface.h --------------------------*- C++ -*-===// |
2 | // | |
3 | // The LLVM Compiler Infrastructure | |
4 | // | |
5 | // This file is distributed under the University of Illinois Open Source | |
6 | // License. See LICENSE.TXT for details. | |
7 | // | |
8 | //===----------------------------------------------------------------------===// | |
9 | // | |
10 | // Public interface for sanitizer coverage. | |
11 | //===----------------------------------------------------------------------===// | |
12 | ||
13 | #ifndef SANITIZER_COVERAG_INTERFACE_H | |
14 | #define SANITIZER_COVERAG_INTERFACE_H | |
15 | ||
16 | #include <sanitizer/common_interface_defs.h> | |
17 | ||
18 | #ifdef __cplusplus | |
19 | extern "C" { | |
20 | #endif | |
21 | ||
22 | // Initialize coverage. | |
23 | void __sanitizer_cov_init(); | |
24 | // Record and dump coverage info. | |
25 | void __sanitizer_cov_dump(); | |
7cac9316 XL |
26 | |
27 | // Dump collected coverage info. Sorts pcs by module into individual | |
28 | // .sancov files. | |
29 | void __sanitizer_dump_coverage(const uintptr_t *pcs, uintptr_t len); | |
30 | ||
92a42be0 SL |
31 | // Open <name>.sancov.packed in the coverage directory and return the file |
32 | // descriptor. Returns -1 on failure, or if coverage dumping is disabled. | |
33 | // This is intended for use by sandboxing code. | |
34 | intptr_t __sanitizer_maybe_open_cov_file(const char *name); | |
35 | // Get the number of unique covered blocks (or edges). | |
36 | // This can be useful for coverage-directed in-process fuzzers. | |
37 | uintptr_t __sanitizer_get_total_unique_coverage(); | |
38 | // Get the number of unique indirect caller-callee pairs. | |
39 | uintptr_t __sanitizer_get_total_unique_caller_callee_pairs(); | |
40 | ||
41 | // Reset the basic-block (edge) coverage to the initial state. | |
42 | // Useful for in-process fuzzing to start collecting coverage from scratch. | |
43 | // Experimental, will likely not work for multi-threaded process. | |
44 | void __sanitizer_reset_coverage(); | |
45 | // Set *data to the array of covered PCs and return the size of that array. | |
46 | // Some of the entries in *data will be zero. | |
47 | uintptr_t __sanitizer_get_coverage_guards(uintptr_t **data); | |
3157f602 | 48 | |
92a42be0 SL |
49 | // The coverage instrumentation may optionally provide imprecise counters. |
50 | // Rather than exposing the counter values to the user we instead map | |
51 | // the counters to a bitset. | |
52 | // Every counter is associated with 8 bits in the bitset. | |
53 | // We define 8 value ranges: 1, 2, 3, 4-7, 8-15, 16-31, 32-127, 128+ | |
54 | // The i-th bit is set to 1 if the counter value is in the i-th range. | |
55 | // This counter-based coverage implementation is *not* thread-safe. | |
56 | ||
57 | // Returns the number of registered coverage counters. | |
58 | uintptr_t __sanitizer_get_number_of_counters(); | |
59 | // Updates the counter 'bitset', clears the counters and returns the number of | |
60 | // new bits in 'bitset'. | |
61 | // If 'bitset' is nullptr, only clears the counters. | |
62 | // Otherwise 'bitset' should be at least | |
63 | // __sanitizer_get_number_of_counters bytes long and 8-aligned. | |
64 | uintptr_t | |
65 | __sanitizer_update_counter_bitset_and_clear_counters(uint8_t *bitset); | |
7cac9316 | 66 | |
92a42be0 SL |
67 | #ifdef __cplusplus |
68 | } // extern "C" | |
69 | #endif | |
70 | ||
71 | #endif // SANITIZER_COVERAG_INTERFACE_H |