Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* $Id: kgdb.h,v 1.8 1998/01/07 06:33:44 baccala Exp $ |
2 | * kgdb.h: Defines and declarations for serial line source level | |
3 | * remote debugging of the Linux kernel using gdb. | |
4 | * | |
5 | * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) | |
6 | */ | |
7 | #ifndef _SPARC_KGDB_H | |
8 | #define _SPARC_KGDB_H | |
9 | ||
10 | #ifndef __ASSEMBLY__ | |
11 | /* To init the kgdb engine. */ | |
12 | extern void set_debug_traps(void); | |
13 | ||
14 | /* To enter the debugger explicitly. */ | |
15 | extern void breakpoint(void); | |
16 | ||
17 | /* For convenience we define the format of a kgdb trap breakpoint | |
18 | * frame here also. | |
19 | */ | |
20 | struct kgdb_frame { | |
21 | unsigned long globals[8]; | |
22 | unsigned long outs[8]; | |
23 | unsigned long locals[8]; | |
24 | unsigned long ins[8]; | |
25 | unsigned long fpregs[32]; | |
26 | unsigned long y; | |
27 | unsigned long psr; | |
28 | unsigned long wim; | |
29 | unsigned long tbr; | |
30 | unsigned long pc; | |
31 | unsigned long npc; | |
32 | unsigned long fpsr; | |
33 | unsigned long cpsr; | |
34 | }; | |
35 | #endif /* !(__ASSEMBLY__) */ | |
36 | ||
37 | /* Macros for assembly usage of the kgdb breakpoint frame. */ | |
38 | #define KGDB_G0 0x000 | |
39 | #define KGDB_G1 0x004 | |
40 | #define KGDB_G2 0x008 | |
41 | #define KGDB_G4 0x010 | |
42 | #define KGDB_G6 0x018 | |
43 | #define KGDB_I0 0x020 | |
44 | #define KGDB_I2 0x028 | |
45 | #define KGDB_I4 0x030 | |
46 | #define KGDB_I6 0x038 | |
47 | #define KGDB_Y 0x100 | |
48 | #define KGDB_PSR 0x104 | |
49 | #define KGDB_WIM 0x108 | |
50 | #define KGDB_TBR 0x10c | |
51 | #define KGDB_PC 0x110 | |
52 | #define KGDB_NPC 0x114 | |
53 | ||
54 | #define SAVE_KGDB_GLOBALS(reg) \ | |
55 | std %g0, [%reg + STACKFRAME_SZ + KGDB_G0]; \ | |
56 | std %g2, [%reg + STACKFRAME_SZ + KGDB_G2]; \ | |
57 | std %g4, [%reg + STACKFRAME_SZ + KGDB_G4]; \ | |
58 | std %g6, [%reg + STACKFRAME_SZ + KGDB_G6]; | |
59 | ||
60 | #define SAVE_KGDB_INS(reg) \ | |
61 | std %i0, [%reg + STACKFRAME_SZ + KGDB_I0]; \ | |
62 | std %i2, [%reg + STACKFRAME_SZ + KGDB_I2]; \ | |
63 | std %i4, [%reg + STACKFRAME_SZ + KGDB_I4]; \ | |
64 | std %i6, [%reg + STACKFRAME_SZ + KGDB_I6]; | |
65 | ||
66 | #define SAVE_KGDB_SREGS(reg, reg_y, reg_psr, reg_wim, reg_tbr, reg_pc, reg_npc) \ | |
67 | st %reg_y, [%reg + STACKFRAME_SZ + KGDB_Y]; \ | |
68 | st %reg_psr, [%reg + STACKFRAME_SZ + KGDB_PSR]; \ | |
69 | st %reg_wim, [%reg + STACKFRAME_SZ + KGDB_WIM]; \ | |
70 | st %reg_tbr, [%reg + STACKFRAME_SZ + KGDB_TBR]; \ | |
71 | st %reg_pc, [%reg + STACKFRAME_SZ + KGDB_PC]; \ | |
72 | st %reg_npc, [%reg + STACKFRAME_SZ + KGDB_NPC]; | |
73 | ||
74 | #define LOAD_KGDB_GLOBALS(reg) \ | |
75 | ld [%reg + STACKFRAME_SZ + KGDB_G1], %g1; \ | |
76 | ldd [%reg + STACKFRAME_SZ + KGDB_G2], %g2; \ | |
77 | ldd [%reg + STACKFRAME_SZ + KGDB_G4], %g4; \ | |
78 | ldd [%reg + STACKFRAME_SZ + KGDB_G6], %g6; | |
79 | ||
80 | #define LOAD_KGDB_INS(reg) \ | |
81 | ldd [%reg + STACKFRAME_SZ + KGDB_I0], %i0; \ | |
82 | ldd [%reg + STACKFRAME_SZ + KGDB_I2], %i2; \ | |
83 | ldd [%reg + STACKFRAME_SZ + KGDB_I4], %i4; \ | |
84 | ldd [%reg + STACKFRAME_SZ + KGDB_I6], %i6; | |
85 | ||
86 | #define LOAD_KGDB_SREGS(reg, reg_y, reg_psr, reg_wim, reg_tbr, reg_pc, reg_npc) \ | |
87 | ld [%reg + STACKFRAME_SZ + KGDB_Y], %reg_y; \ | |
88 | ld [%reg + STACKFRAME_SZ + KGDB_PSR], %reg_psr; \ | |
89 | ld [%reg + STACKFRAME_SZ + KGDB_WIM], %reg_wim; \ | |
90 | ld [%reg + STACKFRAME_SZ + KGDB_TBR], %reg_tbr; \ | |
91 | ld [%reg + STACKFRAME_SZ + KGDB_PC], %reg_pc; \ | |
92 | ld [%reg + STACKFRAME_SZ + KGDB_NPC], %reg_npc; | |
93 | ||
94 | #endif /* !(_SPARC_KGDB_H) */ |