1/* @title: Debugging */
2#pragma once
3#include <compiler/intrinsic.h>
4#include <stdbool.h>
5#include <stddef.h>
6#include <stdint.h>
7
8#define STACK_TRACE_MAX_DEPTH ((size_t) 64)
9
10void debug_print_registers(void);
11
12void debug_print_stack(void);
13
14void debug_print_memory(void *addr, size_t size);
15
16void debug_print_stack_from(uint64_t *start, size_t max_scan);
17
18size_t stack_unwind(uint64_t frame, uint64_t *entries, size_t max);
19void debug_print_stack_trace(const uint64_t *entries, size_t nr);
20
21const char *debug_symbolize(uint64_t addr, uint64_t *out_off);
22const char *debug_line_for(uint64_t addr, uint32_t *out_line);
23bool debug_syms_present(void);
24
25/* Unwinds from the caller's own frame */
26#define stack_trace_save(entries, max) \
27 stack_unwind((uint64_t) ci_frame_address(0), (entries), (max))
28