/* * Copyright 2002-2009, Haiku Inc. All Rights Reserved. * Distributed under the terms of the MIT license. * * Authors: * Ingo Weinhold, bonefish@cs.tu-berlin.de. * Axel Dörfler, axeld@pinc-software.de. */ #include #define _KERNEL_MODE #include #include #include #include bool gDebugOutputEnabled = true; extern "C" uint64 parse_expression(const char* arg) { return strtoull(arg, NULL, 0); } extern "C" bool set_debug_variable(const char* variableName, uint64 value) { return true; } extern "C" bool print_debugger_command_usage(const char* command) { return true; } extern "C" status_t add_debugger_command_etc(const char* name, debugger_command_hook func, const char* description, const char* usage, uint32 flags) { return B_OK; } extern "C" int add_debugger_command(const char *name, int (*func)(int, char **), const char *desc) { return B_OK; } extern "C" int remove_debugger_command(const char * name, int (*func)(int, char **)) { return B_OK; } extern "C" void panic(const char *format, ...) { char buffer[1024]; strcpy(buffer, "PANIC: "); int32 prefixLen = strlen(buffer); int bufferSize = sizeof(buffer) - prefixLen; va_list args; va_start(args, format); vsnprintf(buffer + prefixLen, bufferSize - 1, format, args); va_end(args); buffer[sizeof(buffer) - 1] = '\0'; debugger(buffer); } void kernel_debugger(const char *message) { debugger(message); } extern "C" void dprintf(const char *format,...) { if (!gDebugOutputEnabled) return; va_list args; va_start(args, format); printf("\33[34m"); vprintf(format, args); printf("\33[0m"); fflush(stdout); va_end(args); } extern "C" void dprintf_no_syslog(const char *format,...) { if (!gDebugOutputEnabled) return; va_list args; va_start(args, format); printf("\33[34m"); vprintf(format, args); printf("\33[0m"); fflush(stdout); va_end(args); } extern "C" void kprintf(const char *format,...) { va_list args; va_start(args, format); printf("\33[35m"); vprintf(format, args); printf("\33[0m"); fflush(stdout); va_end(args); } extern "C" void dump_block(const char *buffer, int size, const char *prefix) { const int DUMPED_BLOCK_SIZE = 16; int i; for (i = 0; i < size;) { int start = i; dprintf("%s", prefix); for (; i < start + DUMPED_BLOCK_SIZE; i++) { if (!(i % 4)) dprintf(" "); if (i >= size) dprintf(" "); else dprintf("%02x", *(unsigned char *)(buffer + i)); } dprintf(" "); for (i = start; i < start + DUMPED_BLOCK_SIZE; i++) { if (i < size) { char c = buffer[i]; if (c < 30) dprintf("."); else dprintf("%c", c); } else break; } dprintf("\n"); } }