OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-sh/] [kgdb.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
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
 
21
/* Same as pt_regs but has vbr in place of syscall_nr */
22
struct kgdb_regs {
23
        unsigned long regs[16];
24
        unsigned long pc;
25
        unsigned long pr;
26
        unsigned long sr;
27
        unsigned long gbr;
28
        unsigned long mach;
29
        unsigned long macl;
30
        unsigned long vbr;
31
};
32
 
33
/* State info */
34
extern char kgdb_in_gdb_mode;
35
extern int kgdb_done_init;
36
extern int kgdb_enabled;
37
extern int kgdb_nofault;        /* Ignore bus errors (in gdb mem access) */
38
extern int kgdb_halt;           /* Execute initial breakpoint at startup */
39
extern char in_nmi;             /* Debounce flag to prevent NMI reentry*/
40
 
41
/* SCI */
42
extern int kgdb_portnum;
43
extern int kgdb_baud;
44
extern char kgdb_parity;
45
extern char kgdb_bits;
46
extern int kgdb_cflag;
47
extern int kgdb_sci_setup(void);
48
 
49
/* Init and interface stuff */
50
extern int kgdb_init(void);
51
extern int (*kgdb_serial_setup)(void);
52
extern int (*kgdb_getchar)(void);
53
extern void (*kgdb_putchar)(int);
54
 
55
struct kgdb_sermap {
56
        char *name;
57
        int namelen;
58
        int (*setup_fn)(void);
59
        struct kgdb_sermap *next;
60
};
61
extern void kgdb_register_sermap(struct kgdb_sermap *map);
62
extern struct kgdb_sermap *kgdb_porttype;
63
 
64
/* Trap functions */
65
typedef void (kgdb_debug_hook_t)(struct pt_regs *regs);
66
typedef void (kgdb_bus_error_hook_t)(void);
67
extern kgdb_debug_hook_t  *kgdb_debug_hook;
68
extern kgdb_bus_error_hook_t *kgdb_bus_err_hook;
69
 
70
extern void breakpoint(void);
71
 
72
/* Console */
73
struct console;
74
void kgdb_console_write(struct console *co, const char *s, unsigned count);
75
void kgdb_console_init(void);
76
 
77
/* Prototypes for jmp fns */
78
#define _JBLEN 9
79
typedef        int jmp_buf[_JBLEN];
80
extern void    kgdb_longjmp(jmp_buf __jmpb, int __retval);
81
extern int     kgdb_setjmp(jmp_buf __jmpb);
82
 
83
/* Variadic macro to print our own message to the console */
84
#define KGDB_PRINTK(...) printk("KGDB: " __VA_ARGS__)
85
 
86
/* Forced breakpoint */
87
#define BREAKPOINT() do {                                     \
88
  if (kgdb_enabled) {                                         \
89
    asm volatile("trapa   #0xff");                            \
90
  }                                                           \
91
} while (0)
92
 
93
/* KGDB should be able to flush all kernel text space */
94
#if defined(__sh3__)
95
#define kgdb_flush_icache_range(start, end)     do { } while (0)
96
#elif defined(__SH4__)
97
#define kgdb_flush_icache_range(start, end) \
98
{                                                                              \
99
        extern void __flush_purge_region(void *, int);                         \
100
        __flush_purge_region((void*)(start), (int)(end) - (int)(start));       \
101
        flush_icache_range((start), (end));                                    \
102
}
103
#endif
104
 
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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.