Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.13-rc5 131 lines 4.1 kB view raw
1/* 2 * May be copied or modified under the terms of the GNU General Public 3 * License. See linux/COPYING for more information. 4 * 5 * Based on original code by Glenn Engel, Jim Kingdon, 6 * David Grothe <dave@gcom.com>, Tigran Aivazian, <tigran@sco.com> and 7 * Amit S. Kale <akale@veritas.com> 8 * 9 * Super-H port based on sh-stub.c (Ben Lee and Steve Chamberlain) by 10 * Henry Bell <henry.bell@st.com> 11 * 12 * Header file for low-level support for remote debug using GDB. 13 * 14 */ 15 16#ifndef __KGDB_H 17#define __KGDB_H 18 19#include <asm/ptrace.h> 20 21struct console; 22 23/* Same as pt_regs but has vbr in place of syscall_nr */ 24struct kgdb_regs { 25 unsigned long regs[16]; 26 unsigned long pc; 27 unsigned long pr; 28 unsigned long sr; 29 unsigned long gbr; 30 unsigned long mach; 31 unsigned long macl; 32 unsigned long vbr; 33}; 34 35/* State info */ 36extern char kgdb_in_gdb_mode; 37extern int kgdb_done_init; 38extern int kgdb_enabled; 39extern int kgdb_nofault; /* Ignore bus errors (in gdb mem access) */ 40extern int kgdb_halt; /* Execute initial breakpoint at startup */ 41extern char in_nmi; /* Debounce flag to prevent NMI reentry*/ 42 43/* SCI */ 44extern int kgdb_portnum; 45extern int kgdb_baud; 46extern char kgdb_parity; 47extern char kgdb_bits; 48extern int kgdb_console_setup(struct console *, char *); 49 50/* Init and interface stuff */ 51extern int kgdb_init(void); 52extern int (*kgdb_serial_setup)(void); 53extern int (*kgdb_getchar)(void); 54extern void (*kgdb_putchar)(int); 55 56struct kgdb_sermap { 57 char *name; 58 int namelen; 59 int (*setup_fn)(struct console *, char *); 60 struct kgdb_sermap *next; 61}; 62extern void kgdb_register_sermap(struct kgdb_sermap *map); 63extern struct kgdb_sermap *kgdb_porttype; 64 65/* Trap functions */ 66typedef void (kgdb_debug_hook_t)(struct pt_regs *regs); 67typedef void (kgdb_bus_error_hook_t)(void); 68extern kgdb_debug_hook_t *kgdb_debug_hook; 69extern kgdb_bus_error_hook_t *kgdb_bus_err_hook; 70 71extern void breakpoint(void); 72 73/* Console */ 74struct console; 75void kgdb_console_write(struct console *co, const char *s, unsigned count); 76void kgdb_console_init(void); 77 78/* Prototypes for jmp fns */ 79#define _JBLEN 9 80typedef int jmp_buf[_JBLEN]; 81extern void longjmp(jmp_buf __jmpb, int __retval); 82extern int setjmp(jmp_buf __jmpb); 83 84/* Variadic macro to print our own message to the console */ 85#define KGDB_PRINTK(...) printk("KGDB: " __VA_ARGS__) 86 87/* Forced breakpoint */ 88#define BREAKPOINT() do { \ 89 if (kgdb_enabled) { \ 90 asm volatile("trapa #0xff"); \ 91 } \ 92} while (0) 93 94/* KGDB should be able to flush all kernel text space */ 95#if defined(CONFIG_CPU_SH4) 96#define kgdb_flush_icache_range(start, end) \ 97{ \ 98 extern void __flush_purge_region(void *, int); \ 99 __flush_purge_region((void*)(start), (int)(end) - (int)(start));\ 100 flush_icache_range((start), (end)); \ 101} 102#else 103#define kgdb_flush_icache_range(start, end) do { } while (0) 104#endif 105 106/* Kernel assert macros */ 107#ifdef CONFIG_KGDB_KERNEL_ASSERTS 108 109/* Predefined conditions */ 110#define KA_VALID_ERRNO(errno) ((errno) > 0 && (errno) <= EMEDIUMTYPE) 111#define KA_VALID_PTR_ERR(ptr) KA_VALID_ERRNO(-PTR_ERR(ptr)) 112#define KA_VALID_KPTR(ptr) (!(ptr) || \ 113 ((void *)(ptr) >= (void *)PAGE_OFFSET && \ 114 (void *)(ptr) < ERR_PTR(-EMEDIUMTYPE))) 115#define KA_VALID_PTRORERR(errptr) \ 116 (KA_VALID_KPTR(errptr) || KA_VALID_PTR_ERR(errptr)) 117#define KA_HELD_GKL() (current->lock_depth >= 0) 118 119/* The actual assert */ 120#define KGDB_ASSERT(condition, message) do { \ 121 if (!(condition) && (kgdb_enabled)) { \ 122 KGDB_PRINTK("Assertion failed at %s:%d: %s\n", \ 123 __FILE__, __LINE__, message);\ 124 BREAKPOINT(); \ 125 } \ 126} while (0) 127#else 128#define KGDB_ASSERT(condition, message) 129#endif 130 131#endif