1//===-- hwasan_flags.inc ----------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Hwasan runtime flags.
10//
11//===----------------------------------------------------------------------===//
12#ifndef HWASAN_FLAG
13# error "Define HWASAN_FLAG prior to including this file!"
14#endif
15
16// HWASAN_FLAG(Type, Name, DefaultValue, Description)
17// See COMMON_FLAG in sanitizer_flags.inc for more details.
18
19HWASAN_FLAG(bool, verbose_threads, false,
20            "inform on thread creation/destruction")
21HWASAN_FLAG(bool, tag_in_malloc, true, "")
22HWASAN_FLAG(bool, tag_in_free, true, "")
23HWASAN_FLAG(bool, print_stats, false, "")
24HWASAN_FLAG(bool, halt_on_error, true, "")
25HWASAN_FLAG(bool, atexit, false, "")
26
27// Test only flag to disable malloc/realloc/free memory tagging on startup.
28// Tagging can be reenabled with __hwasan_enable_allocator_tagging().
29HWASAN_FLAG(bool, disable_allocator_tagging, false, "")
30
31// If false, use simple increment of a thread local counter to generate new
32// tags.
33HWASAN_FLAG(bool, random_tags, true, "")
34
35HWASAN_FLAG(
36    int, max_malloc_fill_size, 0,
37    "HWASan allocator flag. max_malloc_fill_size is the maximal amount of "
38    "bytes that will be filled with malloc_fill_byte on malloc.")
39
40HWASAN_FLAG(bool, free_checks_tail_magic, 1,
41    "If set, free() will check the magic values "
42    "to the right of the allocated object "
43    "if the allocation size is not a divident of the granule size")
44HWASAN_FLAG(
45    int, max_free_fill_size, 0,
46    "HWASan allocator flag. max_free_fill_size is the maximal amount of "
47    "bytes that will be filled with free_fill_byte during free.")
48HWASAN_FLAG(int, malloc_fill_byte, 0xbe,
49          "Value used to fill the newly allocated memory.")
50HWASAN_FLAG(int, free_fill_byte, 0x55,
51          "Value used to fill deallocated memory.")
52HWASAN_FLAG(int, heap_history_size, 1023,
53          "The number of heap (de)allocations remembered per thread. "
54          "Affects the quality of heap-related reports, but not the ability "
55          "to find bugs.")
56HWASAN_FLAG(bool, export_memory_stats, true,
57            "Export up-to-date memory stats through /proc")
58HWASAN_FLAG(int, stack_history_size, 1024,
59            "The number of stack frames remembered per thread. "
60            "Affects the quality of stack-related reports, but not the ability "
61            "to find bugs.")
62
63// Malloc / free bisection. Only tag malloc and free calls when a hash of
64// allocation size and stack trace is between malloc_bisect_left and
65// malloc_bisect_right (both inclusive). [0, 0] range is special and disables
66// bisection (i.e. everything is tagged). Once the range is narrowed down
67// enough, use malloc_bisect_dump to see interesting allocations.
68HWASAN_FLAG(uptr, malloc_bisect_left, 0,
69            "Left bound of malloc bisection, inclusive.")
70HWASAN_FLAG(uptr, malloc_bisect_right, 0,
71            "Right bound of malloc bisection, inclusive.")
72HWASAN_FLAG(bool, malloc_bisect_dump, false,
73            "Print all allocations within [malloc_bisect_left, "
74            "malloc_bisect_right] range ")
75
76
77// Exit if we fail to enable the AArch64 kernel ABI relaxation which allows
78// tagged pointers in syscalls.  This is the default, but being able to disable
79// that behaviour is useful for running the testsuite on more platforms (the
80// testsuite can run since we manually ensure any pointer arguments to syscalls
81// are untagged before the call.
82HWASAN_FLAG(bool, fail_without_syscall_abi, true,
83            "Exit if fail to request relaxed syscall ABI.")
84