1/* 2 * Copyright 2002-2009, Haiku Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT license. 4 * 5 * Authors: 6 * Ingo Weinhold, bonefish@cs.tu-berlin.de. 7 * Axel Dörfler, axeld@pinc-software.de. 8 */ 9 10#include <signal.h> 11#include <stdio.h> 12#include <stdlib.h> 13#include <string.h> 14 15#include <KernelExport.h> 16 17 18bool gDebugOutputEnabled = true; 19 20 21extern "C" uint64 22parse_expression(const char* arg) 23{ 24 return strtoull(arg, NULL, 0); 25} 26 27 28extern "C" bool 29set_debug_variable(const char* variableName, uint64 value) 30{ 31 return true; 32} 33 34 35extern "C" bool 36print_debugger_command_usage(const char* command) 37{ 38 return true; 39} 40 41 42extern "C" status_t 43add_debugger_command_etc(const char* name, debugger_command_hook func, 44 const char* description, const char* usage, uint32 flags) 45{ 46 return B_OK; 47} 48 49 50extern "C" int 51add_debugger_command(const char *name, int (*func)(int, char **), 52 const char *desc) 53{ 54 return B_OK; 55} 56 57 58extern "C" int 59remove_debugger_command(const char * name, int (*func)(int, char **)) 60{ 61 return B_OK; 62} 63 64 65extern "C" void 66panic(const char *format, ...) 67{ 68 char buffer[1024]; 69 70 strcpy(buffer, "PANIC: "); 71 int32 prefixLen = strlen(buffer); 72 int bufferSize = sizeof(buffer) - prefixLen; 73 74 va_list args; 75 va_start(args, format); 76 vsnprintf(buffer + prefixLen, bufferSize - 1, format, args); 77 va_end(args); 78 79 buffer[sizeof(buffer) - 1] = '\0'; 80 81 debugger(buffer); 82} 83 84 85void 86kernel_debugger(const char *message) 87{ 88 debugger(message); 89} 90 91 92extern "C" void 93dprintf(const char *format,...) 94{ 95 if (!gDebugOutputEnabled) 96 return; 97 98 va_list args; 99 va_start(args, format); 100 printf("\33[34m"); 101 vprintf(format, args); 102 printf("\33[0m"); 103 fflush(stdout); 104 va_end(args); 105} 106 107 108extern "C" void 109dprintf_no_syslog(const char *format,...) 110{ 111 if (!gDebugOutputEnabled) 112 return; 113 114 va_list args; 115 va_start(args, format); 116 printf("\33[34m"); 117 vprintf(format, args); 118 printf("\33[0m"); 119 fflush(stdout); 120 va_end(args); 121} 122 123 124extern "C" void 125kprintf(const char *format,...) 126{ 127 va_list args; 128 va_start(args, format); 129 printf("\33[35m"); 130 vprintf(format, args); 131 printf("\33[0m"); 132 fflush(stdout); 133 va_end(args); 134} 135 136 137extern "C" void 138dump_block(const char *buffer, int size, const char *prefix) 139{ 140 const int DUMPED_BLOCK_SIZE = 16; 141 int i; 142 143 for (i = 0; i < size;) { 144 int start = i; 145 146 dprintf(prefix); 147 for (; i < start + DUMPED_BLOCK_SIZE; i++) { 148 if (!(i % 4)) 149 dprintf(" "); 150 151 if (i >= size) 152 dprintf(" "); 153 else 154 dprintf("%02x", *(unsigned char *)(buffer + i)); 155 } 156 dprintf(" "); 157 158 for (i = start; i < start + DUMPED_BLOCK_SIZE; i++) { 159 if (i < size) { 160 char c = buffer[i]; 161 162 if (c < 30) 163 dprintf("."); 164 else 165 dprintf("%c", c); 166 } else 167 break; 168 } 169 dprintf("\n"); 170 } 171} 172