1#ifndef KERNEL_DEBUG_CONFIG_H 2#define KERNEL_DEBUG_CONFIG_H 3 4// Master switch: 5// 0: Disables all debug code that hasn't been enabled otherwise. 6// 1: Enables some lightweight debug code. 7// 2: Enables more debug code. Will impact performance. 8#define KDEBUG_LEVEL 2 9 10#define KDEBUG_LEVEL_2 (KDEBUG_LEVEL >= 2) 11#define KDEBUG_LEVEL_1 (KDEBUG_LEVEL >= 1) 12#define KDEBUG_LEVEL_0 (KDEBUG_LEVEL >= 0) 13 14 15// general kernel debugging 16 17// Enables kernel ASSERT()s and various checks, locking primitives aren't 18// benaphore-style. 19#define KDEBUG KDEBUG_LEVEL_2 20 21// Size of the heap used by the kernel debugger. 22#define KDEBUG_HEAP (64 * 1024) 23 24// Set to 0 to disable support for kernel breakpoints. 25#define KERNEL_BREAKPOINTS 1 26 27// Enables the debug syslog feature (accessing the previous syslog in the boot 28// loader) by default. Can be overridden in the boot loader menu. 29#define KDEBUG_ENABLE_DEBUG_SYSLOG KDEBUG_LEVEL_1 30 31 32// block/file cache 33 34// Enables debugger commands. 35#define DEBUG_BLOCK_CACHE KDEBUG_LEVEL_1 36 37// Enables checks that non-dirty blocks really aren't changed. Seriously 38// degrades performance when the block cache is used heavily. 39#define BLOCK_CACHE_DEBUG_CHANGED KDEBUG_LEVEL_2 40 41// Enables a global list of file maps and related debugger commands. 42#define DEBUG_FILE_MAP KDEBUG_LEVEL_1 43 44 45// heap / slab 46 47// Initialize newly allocated memory with something non zero. 48#define PARANOID_KERNEL_MALLOC KDEBUG_LEVEL_2 49 50// Check for double free, and fill freed memory with 0xdeadbeef. 51#define PARANOID_KERNEL_FREE KDEBUG_LEVEL_2 52 53// Validate sanity of the heap after each operation (slow!). 54#define PARANOID_HEAP_VALIDATION 0 55 56// Store size, thread and team info at the end of each allocation block. 57// Enables the "allocations*" debugger commands. 58#define KERNEL_HEAP_LEAK_CHECK 0 59 60// Enables the "allocations*" debugger commands for the slab. 61#define SLAB_ALLOCATION_TRACKING 0 62 63 64// interrupts 65 66// Adds statistics and unhandled counter per interrupts. Enables the "ints" 67// debugger command. 68#define DEBUG_INTERRUPTS KDEBUG_LEVEL_1 69 70 71// semaphores 72 73// Enables tracking of the last threads that acquired/released a semaphore. 74#define DEBUG_SEM_LAST_ACQUIRER KDEBUG_LEVEL_1 75 76 77// SMP 78 79// Enables spinlock caller debugging. When acquiring a spinlock twice on a 80// non-SMP machine, this will give a clue who locked it the first time. 81// Furthermore (also on SMP machines) the "spinlock" debugger command will be 82// available. 83#define DEBUG_SPINLOCKS KDEBUG_LEVEL_2 84 85 86// VM 87 88// Enables the vm_page::queue field, i.e. it is tracked which queue the page 89// should be in. 90#define DEBUG_PAGE_QUEUE 0 91 92// Enables the vm_page::access_count field, which is used to detect invalid 93// concurrent access to the page. 94#ifndef __riscv 95#define DEBUG_PAGE_ACCESS KDEBUG_LEVEL_2 96#endif 97 98// Enables a global list of all vm_cache structures. 99#define DEBUG_CACHE_LIST KDEBUG_LEVEL_2 100 101// Enables swap support. 102#define ENABLE_SWAP_SUPPORT 1 103 104// Use the selected allocator as generic memory allocator (malloc()/free()). 105#define USE_DEBUG_HEAP_FOR_MALLOC 0 106 // Heap implementation with additional debugging facilities. 107#define USE_GUARDED_HEAP_FOR_MALLOC 0 108 // Heap implementation that allocates memory so that the end of the 109 // allocation always coincides with a page end and is followed by a guard 110 // page which is marked non-present. Out of bounds access (both read and 111 // write) therefore cause a crash (unhandled page fault). Note that this 112 // allocator is neither speed nor space efficient, indeed it wastes huge 113 // amounts of pages and address space so it is quite easy to hit limits. 114#define USE_SLAB_ALLOCATOR_FOR_MALLOC 1 115 // Heap implementation based on the slab allocator (for production use). 116 117// Replace the object cache with the guarded heap to force debug features. Also 118// requires the use of the guarded heap for malloc. 119#define USE_GUARDED_HEAP_FOR_OBJECT_CACHE 0 120 121// Enables additional sanity checks in the slab allocator's memory manager. 122#define DEBUG_SLAB_MEMORY_MANAGER_PARANOID_CHECKS 0 123 124// Disables memory re-use in the guarded heap (freed memory is never reused and 125// stays invalid causing every access to crash). Note that this is a magnitude 126// more space inefficient than the guarded heap itself. Fully booting may not 127// work at all due to address space waste. 128#define DEBUG_GUARDED_HEAP_DISABLE_MEMORY_REUSE 0 129 130// When set limits the amount of available RAM (in MB). 131//#define LIMIT_AVAILABLE_MEMORY 256 132 133// Enables tracking of page allocations. 134#define VM_PAGE_ALLOCATION_TRACKING 0 135 136// Enables the (boot) system profiler for use with "profile -r" 137#define SYSTEM_PROFILER 0 138#define SYSTEM_PROFILE_SIZE 40 * 1024 * 1024 139#define SYSTEM_PROFILE_STACK_DEPTH 10 140#define SYSTEM_PROFILE_INTERVAL 10000 141 142 143// Network 144 145// Enables additional assertions in the tcp add-on. 146#define DEBUG_TCP_BUFFER_QUEUE KDEBUG_LEVEL_2 147 148 149#endif // KERNEL_DEBUG_CONFIG_H 150