1 #ifndef KERNEL_DEBUG_CONFIG_H
2 #define KERNEL_DEBUG_CONFIG_H
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.
10 #define KDEBUG_LEVEL_2 (KDEBUG_LEVEL >= 2)
11 #define KDEBUG_LEVEL_1 (KDEBUG_LEVEL >= 1)
12 #define KDEBUG_LEVEL_0 (KDEBUG_LEVEL >= 0)
15 // general kernel debugging
17 // Enables kernel ASSERT()s and various checks, locking primitives aren't
19 #define KDEBUG KDEBUG_LEVEL_2
21 // Size of the heap used by the kernel debugger.
22 #define KDEBUG_HEAP (64 * 1024)
24 // Set to 0 to disable support for kernel breakpoints.
25 #define KERNEL_BREAKPOINTS 1
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
34 // Enables debugger commands.
35 #define DEBUG_BLOCK_CACHE KDEBUG_LEVEL_1
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
41 // Enables a global list of file maps and related debugger commands.
42 #define DEBUG_FILE_MAP KDEBUG_LEVEL_1
47 // Initialize newly allocated memory with something non zero.
48 #define PARANOID_KERNEL_MALLOC KDEBUG_LEVEL_2
50 // Check for double free, and fill freed memory with 0xdeadbeef.
51 #define PARANOID_KERNEL_FREE KDEBUG_LEVEL_2
53 // Validate sanity of the heap after each operation (slow!).
54 #define PARANOID_HEAP_VALIDATION 0
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
60 // Enables the "allocations*" debugger commands for the slab.
61 #define SLAB_ALLOCATION_TRACKING 0
66 // Adds statistics and unhandled counter per interrupts. Enables the "ints"
68 #define DEBUG_INTERRUPTS KDEBUG_LEVEL_1
73 // Enables tracking of the last threads that acquired/released a semaphore.
74 #define DEBUG_SEM_LAST_ACQUIRER KDEBUG_LEVEL_1
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
83 #define DEBUG_SPINLOCKS KDEBUG_LEVEL_2
85 #define DEBUG_SPINLOCK_LATENCIES 0
90 // Enables the vm_page::queue field, i.e. it is tracked which queue the page
92 #define DEBUG_PAGE_QUEUE 0
94 // Enables the vm_page::access_count field, which is used to detect invalid
95 // concurrent access to the page.
96 #define DEBUG_PAGE_ACCESS KDEBUG_LEVEL_2
98 // Enables a global list of all vm_cache structures.
99 #define DEBUG_CACHE_LIST KDEBUG_LEVEL_1
101 // Enables swap support.
102 #define ENABLE_SWAP_SUPPORT 1
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).
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
121 // Enables additional sanity checks in the slab allocator's memory manager.
122 #define DEBUG_SLAB_MEMORY_MANAGER_PARANOID_CHECKS 0
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
130 // When set limits the amount of available RAM (in MB).
131 //#define LIMIT_AVAILABLE_MEMORY 256
133 // Enables tracking of page allocations.
134 #define VM_PAGE_ALLOCATION_TRACKING 0
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
143 #endif // KERNEL_DEBUG_CONFIG_H