1/** 2 * \file 3 * \brief Debugging functions 4 */ 5 6/* 7 * Copyright (c) 2008, 2010, 2011, ETH Zurich. 8 * All rights reserved. 9 * 10 * This file is distributed under the terms in the attached LICENSE file. 11 * If you do not find this file, copies can be found by writing to: 12 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group. 13 */ 14 15#ifndef BARRELFISH_DEBUG_H 16#define BARRELFISH_DEBUG_H 17 18#include <sys/cdefs.h> 19 20#include <errors/errno.h> 21#include <barrelfish/caddr.h> 22#include <stddef.h> 23#include <stdlib.h> 24#include <barrelfish_kpi/registers_arch.h> 25 26__BEGIN_DECLS 27 28struct capability; 29errval_t debug_cap_identify(struct capref cap, struct capability *ret); 30errval_t debug_dump_hw_ptables(void); 31errval_t debug_cap_trace_ctrl(uintptr_t types, genpaddr_t start_addr, gensize_t size); 32void debug_cspace(struct capref root); 33void debug_my_cspace(void); 34void debug_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2))); 35int debug_print_cap(char *buf, size_t len, struct capability *cap); 36int debug_print_cap_at_capref(char *buf, size_t len, struct capref cap); 37int debug_print_capref(char *buf, size_t len, struct capref cap); 38int debug_print_cnoderef(char *buf, size_t len, struct cnoderef cnode); 39 40void debug_print_save_area(arch_registers_state_t *state); 41void debug_print_fpu_state(arch_registers_state_t *state); 42void debug_dump(arch_registers_state_t *state); 43void debug_call_chain(arch_registers_state_t *state); 44void debug_return_addresses(void); 45void debug_dump_mem_around_addr(lvaddr_t addr); 46void debug_dump_mem(lvaddr_t base, lvaddr_t limit, lvaddr_t point); 47 48void debug_err(const char *file, const char *func, int line, 49 errval_t err, const char *msg, ...); 50void user_panic_fn(const char *file, const char *func, int line, 51 const char *msg, ...) 52 __attribute__((noreturn)); 53 54#ifdef NDEBUG 55# define DEBUG_ERR(err, msg...) ((void)0) 56# define HERE ((void)0) 57#else 58# define DEBUG_ERR(err, msg...) debug_err(__FILE__, __func__, __LINE__, err, msg) 59# include <barrelfish/dispatch.h> 60# define HERE fprintf(stderr, "Disp %.*s.%u: %s, %s, %u\n", \ 61 DISP_NAME_LEN, disp_name(), disp_get_core_id(), \ 62 __FILE__, __func__, __LINE__) 63#endif 64 65/** 66 * \brief Prints out a string, errval and then aborts the domain 67 */ 68#define USER_PANIC_ERR(err, msg...) do { \ 69 debug_err(__FILE__, __func__, __LINE__, err, msg); \ 70 abort(); \ 71} while (0) 72 73/** 74 * \brief Prints out a string and abort the domain 75 */ 76#define USER_PANIC(msg...) \ 77 user_panic_fn(__FILE__, __func__, __LINE__, msg); \ 78 79__END_DECLS 80 81#endif //BARRELFISH_DEBUG_H 82