cregit-Linux how code gets into the kernel

Release 4.14 arch/x86/include/asm/debugreg.h

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_X86_DEBUGREG_H

#define _ASM_X86_DEBUGREG_H


#include <linux/bug.h>
#include <uapi/asm/debugreg.h>

DECLARE_PER_CPU(unsigned long, cpu_dr7);

#ifndef CONFIG_PARAVIRT
/*
 * These special macros can be used to get or set a debugging register
 */

#define get_debugreg(var, register)				\
	(var) = native_get_debugreg(register)

#define set_debugreg(value, register)				\
	native_set_debugreg(register, value)
#endif


static inline unsigned long native_get_debugreg(int regno) { unsigned long val = 0; /* Damn you, gcc! */ switch (regno) { case 0: asm("mov %%db0, %0" :"=r" (val)); break; case 1: asm("mov %%db1, %0" :"=r" (val)); break; case 2: asm("mov %%db2, %0" :"=r" (val)); break; case 3: asm("mov %%db3, %0" :"=r" (val)); break; case 6: asm("mov %%db6, %0" :"=r" (val)); break; case 7: asm("mov %%db7, %0" :"=r" (val)); break; default: BUG(); } return val; }

Contributors

PersonTokensPropCommitsCommitProp
Paul Gortmaker61100.00%1100.00%
Total61100.00%1100.00%


static inline void native_set_debugreg(int regno, unsigned long value) { switch (regno) { case 0: asm("mov %0, %%db0" ::"r" (value)); break; case 1: asm("mov %0, %%db1" ::"r" (value)); break; case 2: asm("mov %0, %%db2" ::"r" (value)); break; case 3: asm("mov %0, %%db3" ::"r" (value)); break; case 6: asm("mov %0, %%db6" ::"r" (value)); break; case 7: asm("mov %0, %%db7" ::"r" (value)); break; default: BUG(); } }

Contributors

PersonTokensPropCommitsCommitProp
Paul Gortmaker54100.00%1100.00%
Total54100.00%1100.00%


static inline void hw_breakpoint_disable(void) { /* Zero the control register for HW Breakpoint */ set_debugreg(0UL, 7); /* Zero-out the individual HW breakpoint address registers */ set_debugreg(0UL, 0); set_debugreg(0UL, 1); set_debugreg(0UL, 2); set_debugreg(0UL, 3); }

Contributors

PersonTokensPropCommitsCommitProp
K.Prasad46100.00%1100.00%
Total46100.00%1100.00%


static inline int hw_breakpoint_active(void) { return __this_cpu_read(cpu_dr7) & DR_GLOBAL_ENABLE_MASK; }

Contributors

PersonTokensPropCommitsCommitProp
Frédéric Weisbecker1588.24%133.33%
Tejun Heo211.76%266.67%
Total17100.00%3100.00%

extern void aout_dump_debugregs(struct user *dump); extern void hw_breakpoint_restore(void); #ifdef CONFIG_X86_64 DECLARE_PER_CPU(int, debug_stack_usage);
static inline void debug_stack_usage_inc(void) { __this_cpu_inc(debug_stack_usage); }

Contributors

PersonTokensPropCommitsCommitProp
Steven Rostedt1392.86%150.00%
Christoph Lameter17.14%150.00%
Total14100.00%2100.00%


static inline void debug_stack_usage_dec(void) { __this_cpu_dec(debug_stack_usage); }

Contributors

PersonTokensPropCommitsCommitProp
Steven Rostedt1392.86%150.00%
Christoph Lameter17.14%150.00%
Total14100.00%2100.00%

int is_debug_stack(unsigned long addr); void debug_stack_set_zero(void); void debug_stack_reset(void); #else /* !X86_64 */
static inline int is_debug_stack(unsigned long addr) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Steven Rostedt14100.00%1100.00%
Total14100.00%1100.00%


static inline void debug_stack_set_zero(void) { }

Contributors

PersonTokensPropCommitsCommitProp
Steven Rostedt8100.00%1100.00%
Total8100.00%1100.00%


static inline void debug_stack_reset(void) { }

Contributors

PersonTokensPropCommitsCommitProp
Steven Rostedt8100.00%1100.00%
Total8100.00%1100.00%


static inline void debug_stack_usage_inc(void) { }

Contributors

PersonTokensPropCommitsCommitProp
Steven Rostedt8100.00%1100.00%
Total8100.00%1100.00%


static inline void debug_stack_usage_dec(void) { }

Contributors

PersonTokensPropCommitsCommitProp
Steven Rostedt8100.00%1100.00%
Total8100.00%1100.00%

#endif /* X86_64 */ #ifdef CONFIG_CPU_SUP_AMD extern void set_dr_addr_mask(unsigned long mask, int dr); #else
static inline void set_dr_addr_mask(unsigned long mask, int dr) { }

Contributors

PersonTokensPropCommitsCommitProp
Jacob Shin13100.00%1100.00%
Total13100.00%1100.00%

#endif #endif /* _ASM_X86_DEBUGREG_H */

Overall Contributors

PersonTokensPropCommitsCommitProp
Paul Gortmaker14437.31%17.14%
Steven Rostedt10827.98%17.14%
K.Prasad4611.92%17.14%
Frédéric Weisbecker4010.36%321.43%
Jacob Shin328.29%17.14%
Thomas Gleixner41.04%17.14%
David Howells30.78%17.14%
H. Peter Anvin30.78%17.14%
Tejun Heo30.78%214.29%
Christoph Lameter20.52%17.14%
Greg Kroah-Hartman10.26%17.14%
Total386100.00%14100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.