~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/kgdb.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /include/linux/kgdb.h (Version linux-6.11-rc3) and /include/linux/kgdb.h (Version linux-2.6.0)


  1 /*                                                  1 
  2  * This provides the callbacks and functions t    
  3  * the core, I/O and arch-specific portions.      
  4  *                                                
  5  * Author: Amit Kale <amitkale@linsyssoft.com>    
  6  *         Tom Rini <trini@kernel.crashing.org    
  7  *                                                
  8  * 2001-2004 (c) Amit S. Kale and 2003-2005 (c    
  9  * This file is licensed under the terms of th    
 10  * version 2. This program is licensed "as is"    
 11  * kind, whether express or implied.              
 12  */                                               
 13 #ifndef _KGDB_H_                                  
 14 #define _KGDB_H_                                  
 15                                                   
 16 #include <linux/linkage.h>                        
 17 #include <linux/init.h>                           
 18 #include <linux/atomic.h>                         
 19 #include <linux/kprobes.h>                        
 20 #ifdef CONFIG_HAVE_ARCH_KGDB                      
 21 #include <asm/kgdb.h>                             
 22 #endif                                            
 23                                                   
 24 #ifdef CONFIG_KGDB                                
 25 struct pt_regs;                                   
 26                                                   
 27 /**                                               
 28  *      kgdb_skipexception - (optional) exit k    
 29  *      @exception: Exception vector number       
 30  *      @regs: Current &struct pt_regs.           
 31  *                                                
 32  *      On some architectures it is required t    
 33  *      exception when it occurs after a break    
 34  *      This can be implemented in the archite    
 35  */                                               
 36 extern int kgdb_skipexception(int exception, s    
 37                                                   
 38 struct tasklet_struct;                            
 39 struct task_struct;                               
 40 struct uart_port;                                 
 41                                                   
 42 /**                                               
 43  *      kgdb_breakpoint - compiled in breakpoi    
 44  *                                                
 45  *      This will be implemented as a static i    
 46  *      function is called by the kgdb core to    
 47  *      specific trap to cause kgdb to enter t    
 48  *                                                
 49  */                                               
 50 void kgdb_breakpoint(void);                       
 51                                                   
 52 extern int kgdb_connected;                        
 53 extern int kgdb_io_module_registered;             
 54                                                   
 55 extern atomic_t                 kgdb_setting_b    
 56 extern atomic_t                 kgdb_cpu_doing    
 57                                                   
 58 extern struct task_struct       *kgdb_usethrea    
 59 extern struct task_struct       *kgdb_contthre    
 60                                                   
 61 enum kgdb_bptype {                                
 62         BP_BREAKPOINT = 0,                        
 63         BP_HARDWARE_BREAKPOINT,                   
 64         BP_WRITE_WATCHPOINT,                      
 65         BP_READ_WATCHPOINT,                       
 66         BP_ACCESS_WATCHPOINT,                     
 67         BP_POKE_BREAKPOINT,                       
 68 };                                                
 69                                                   
 70 enum kgdb_bpstate {                               
 71         BP_UNDEFINED = 0,                         
 72         BP_REMOVED,                               
 73         BP_SET,                                   
 74         BP_ACTIVE                                 
 75 };                                                
 76                                                   
 77 struct kgdb_bkpt {                                
 78         unsigned long           bpt_addr;         
 79         unsigned char           saved_instr[BR    
 80         enum kgdb_bptype        type;             
 81         enum kgdb_bpstate       state;            
 82 };                                                
 83                                                   
 84 struct dbg_reg_def_t {                            
 85         char *name;                               
 86         int size;                                 
 87         int offset;                               
 88 };                                                
 89                                                   
 90 #ifndef DBG_MAX_REG_NUM                           
 91 #define DBG_MAX_REG_NUM 0                         
 92 #else                                             
 93 extern struct dbg_reg_def_t dbg_reg_def[];        
 94 extern char *dbg_get_reg(int regno, void *mem,    
 95 extern int dbg_set_reg(int regno, void *mem, s    
 96 #endif                                            
 97 #ifndef KGDB_MAX_BREAKPOINTS                      
 98 # define KGDB_MAX_BREAKPOINTS   1000              
 99 #endif                                            
100                                                   
101 #define KGDB_HW_BREAKPOINT      1                 
102                                                   
103 /*                                                
104  * Functions each KGDB-supporting architecture    
105  */                                               
106                                                   
107 /**                                               
108  *      kgdb_arch_init - Perform any architect    
109  *                                                
110  *      This function will handle the initiali    
111  *      specific callbacks.                       
112  */                                               
113 extern int kgdb_arch_init(void);                  
114                                                   
115 /**                                               
116  *      kgdb_arch_exit - Perform any architect    
117  *                                                
118  *      This function will handle the uninital    
119  *      specific callbacks, for dynamic regist    
120  */                                               
121 extern void kgdb_arch_exit(void);                 
122                                                   
123 /**                                               
124  *      pt_regs_to_gdb_regs - Convert ptrace r    
125  *      @gdb_regs: A pointer to hold the regis    
126  *      @regs: The &struct pt_regs of the curr    
127  *                                                
128  *      Convert the pt_regs in @regs into the     
129  *      GDB expects, stored in @gdb_regs.         
130  */                                               
131 extern void pt_regs_to_gdb_regs(unsigned long     
132                                                   
133 /**                                               
134  *      sleeping_thread_to_gdb_regs - Convert     
135  *      @gdb_regs: A pointer to hold the regis    
136  *      @p: The &struct task_struct of the des    
137  *                                                
138  *      Convert the register values of the sle    
139  *      the format that GDB expects.              
140  *      This function is called when kgdb does    
141  *      &struct pt_regs and therefore it shoul    
142  *      @gdb_regs with what has been saved in     
143  *      thread field during switch_to.            
144  */                                               
145 extern void                                       
146 sleeping_thread_to_gdb_regs(unsigned long *gdb    
147                                                   
148 /**                                               
149  *      gdb_regs_to_pt_regs - Convert GDB regs    
150  *      @gdb_regs: A pointer to hold the regis    
151  *      @regs: A pointer to a &struct pt_regs     
152  *                                                
153  *      Convert the GDB regs in @gdb_regs into    
154  *      in @regs.                                 
155  */                                               
156 extern void gdb_regs_to_pt_regs(unsigned long     
157                                                   
158 /**                                               
159  *      kgdb_arch_handle_exception - Handle ar    
160  *      @vector: The error vector of the excep    
161  *      @signo: The signal number of the excep    
162  *      @err_code: The error code of the excep    
163  *      @remcom_in_buffer: The buffer of the p    
164  *      @remcom_out_buffer: The buffer of %BUF    
165  *      @regs: The &struct pt_regs of the curr    
166  *                                                
167  *      This function MUST handle the 'c' and     
168  *      as well packets to set / remove a hard    
169  *      If there are additional packets which     
170  *      they are handled here.  The code shoul    
171  *      process more packets, and a %0 or %1 i    
172  *      kgdb callback.                            
173  */                                               
174 extern int                                        
175 kgdb_arch_handle_exception(int vector, int sig    
176                            char *remcom_in_buf    
177                            char *remcom_out_bu    
178                            struct pt_regs *reg    
179                                                   
180 /**                                               
181  *      kgdb_arch_handle_qxfer_pkt - Handle ar    
182  *                                   packets.     
183  *      @remcom_in_buffer: The buffer of the p    
184  *      @remcom_out_buffer: The buffer of %BUF    
185  */                                               
186                                                   
187 extern void                                       
188 kgdb_arch_handle_qxfer_pkt(char *remcom_in_buf    
189                            char *remcom_out_bu    
190                                                   
191 /**                                               
192  *      kgdb_call_nmi_hook - Call kgdb_nmicall    
193  *      @ignored: This parameter is only here     
194  *                                                
195  *      If you're using the default implementa    
196  *      this function will be called per CPU.     
197  *      kgdb_call_nmi_hook() a default will be    
198  */                                               
199                                                   
200 extern void kgdb_call_nmi_hook(void *ignored);    
201                                                   
202 /**                                               
203  *      kgdb_roundup_cpus - Get other CPUs int    
204  *                                                
205  *      On SMP systems, we need to get the att    
206  *      and get them into a known state.  This    
207  *      to get the other CPUs to call kgdb_wai    
208  *      the NMI approach is not used for round    
209  *      those architectures can just not imple    
210  *                                                
211  *      On non-SMP systems, this is not called    
212  */                                               
213 extern void kgdb_roundup_cpus(void);              
214                                                   
215 /**                                               
216  *      kgdb_arch_set_pc - Generic call back t    
217  *      @regs: Current &struct pt_regs.           
218  *  @pc: The new value for the program counter    
219  *                                                
220  *      This function handles updating the pro    
221  *      architecture specific implementation.     
222  */                                               
223 extern void kgdb_arch_set_pc(struct pt_regs *r    
224                                                   
225                                                   
226 /* Optional functions. */                         
227 extern int kgdb_validate_break_address(unsigne    
228 extern int kgdb_arch_set_breakpoint(struct kgd    
229 extern int kgdb_arch_remove_breakpoint(struct     
230                                                   
231 /**                                               
232  *      kgdb_arch_late - Perform any architect    
233  *                                                
234  *      This function will handle the late ini    
235  *      architecture specific callbacks.  This    
236  *      handling things like late initializati    
237  *      default implementation does nothing.      
238  */                                               
239 extern void kgdb_arch_late(void);                 
240                                                   
241                                                   
242 /**                                               
243  * struct kgdb_arch - Describe architecture sp    
244  * @gdb_bpt_instr: The instruction to trigger     
245  * @flags: Flags for the breakpoint, currently    
246  * @set_breakpoint: Allow an architecture to s    
247  * breakpoint.                                    
248  * @remove_breakpoint: Allow an architecture t    
249  * software breakpoint.                           
250  * @set_hw_breakpoint: Allow an architecture t    
251  * breakpoint.                                    
252  * @remove_hw_breakpoint: Allow an architectur    
253  * hardware breakpoint.                           
254  * @disable_hw_break: Allow an architecture to    
255  * hardware breakpoints for a single cpu.         
256  * @remove_all_hw_break: Allow an architecture    
257  * hardware breakpoints.                          
258  * @correct_hw_break: Allow an architecture to    
259  * hardware debug registers.                      
260  * @enable_nmi: Manage NMI-triggered entry to     
261  */                                               
262 struct kgdb_arch {                                
263         unsigned char           gdb_bpt_instr[    
264         unsigned long           flags;            
265                                                   
266         int     (*set_breakpoint)(unsigned lon    
267         int     (*remove_breakpoint)(unsigned     
268         int     (*set_hw_breakpoint)(unsigned     
269         int     (*remove_hw_breakpoint)(unsign    
270         void    (*disable_hw_break)(struct pt_    
271         void    (*remove_all_hw_break)(void);     
272         void    (*correct_hw_break)(void);        
273                                                   
274         void    (*enable_nmi)(bool on);           
275 };                                                
276                                                   
277 /**                                               
278  * struct kgdb_io - Describe the interface for    
279  * @name: Name of the I/O driver.                 
280  * @read_char: Pointer to a function that will    
281  * @write_char: Pointer to a function that wil    
282  * @flush: Pointer to a function that will flu    
283  * @init: Pointer to a function that will init    
284  * @deinit: Pointer to a function that will de    
285  * this I/O driver is temporary and expects to    
286  * an I/O driver is replaced or explicitly unr    
287  * @pre_exception: Pointer to a function that     
288  * the I/O driver.                                
289  * @post_exception: Pointer to a function that    
290  * for the I/O driver.                            
291  * @cons: valid if the I/O device is a console    
292  */                                               
293 struct kgdb_io {                                  
294         const char              *name;            
295         int                     (*read_char) (    
296         void                    (*write_char)     
297         void                    (*flush) (void    
298         int                     (*init) (void)    
299         void                    (*deinit) (voi    
300         void                    (*pre_exceptio    
301         void                    (*post_excepti    
302         struct console          *cons;            
303 };                                                
304                                                   
305 extern const struct kgdb_arch           arch_k    
306                                                   
307 extern unsigned long kgdb_arch_pc(int exceptio    
308                                                   
309 #ifdef CONFIG_SERIAL_KGDB_NMI                     
310 extern int kgdb_register_nmi_console(void);       
311 extern int kgdb_unregister_nmi_console(void);     
312 extern bool kgdb_nmi_poll_knock(void);            
313 #else                                             
314 static inline int kgdb_register_nmi_console(vo    
315 static inline int kgdb_unregister_nmi_console(    
316 static inline bool kgdb_nmi_poll_knock(void) {    
317 #endif                                            
318                                                   
319 extern int kgdb_register_io_module(struct kgdb    
320 extern void kgdb_unregister_io_module(struct k    
321 extern struct kgdb_io *dbg_io_ops;                
322                                                   
323 extern int kgdb_hex2long(char **ptr, unsigned     
324 extern char *kgdb_mem2hex(char *mem, char *buf    
325 extern int kgdb_hex2mem(char *buf, char *mem,     
326                                                   
327 extern int kgdb_isremovedbreak(unsigned long a    
328 extern int kgdb_has_hit_break(unsigned long ad    
329                                                   
330 extern int                                        
331 kgdb_handle_exception(int ex_vector, int signo    
332                       struct pt_regs *regs);      
333 extern int kgdb_nmicallback(int cpu, void *reg    
334 extern int kgdb_nmicallin(int cpu, int trapnr,    
335                           atomic_t *snd_rdy);     
336 extern void gdbstub_exit(int status);             
337                                                   
338 /*                                                
339  * kgdb and kprobes both use the same (kprobe)    
340  * given they are both typically hooked up to     
341  * architectures one cannot be used to debug t    
342  *                                                
343  * However on architectures where kprobes is n    
344  * breakpoints everywhere rather than blocking    
345  */                                               
346 static inline bool kgdb_within_blocklist(unsig    
347 {                                                 
348 #ifdef CONFIG_KGDB_HONOUR_BLOCKLIST               
349         return within_kprobe_blacklist(addr);     
350 #else                                             
351         return false;                             
352 #endif                                            
353 }                                                 
354                                                   
355 extern int                      kgdb_single_st    
356 extern atomic_t                 kgdb_active;      
357 #define in_dbg_master() \                         
358         (irqs_disabled() && (smp_processor_id(    
359 extern bool dbg_is_early;                         
360 extern void __init dbg_late_init(void);           
361 extern void kgdb_panic(const char *msg);          
362 extern void kgdb_free_init_mem(void);             
363 #else /* ! CONFIG_KGDB */                         
364 #define in_dbg_master() (0)                       
365 #define dbg_late_init()                           
366 static inline void kgdb_panic(const char *msg)    
367 static inline void kgdb_free_init_mem(void) {     
368 static inline int kgdb_nmicallback(int cpu, vo    
369 #endif /* ! CONFIG_KGDB */                        
370 #endif /* _KGDB_H_ */                             
371                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php