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
Person | Tokens | Prop | Commits | CommitProp |
Paul Gortmaker | 61 | 100.00% | 1 | 100.00% |
Total | 61 | 100.00% | 1 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Paul Gortmaker | 54 | 100.00% | 1 | 100.00% |
Total | 54 | 100.00% | 1 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
K.Prasad | 46 | 100.00% | 1 | 100.00% |
Total | 46 | 100.00% | 1 | 100.00% |
static inline int hw_breakpoint_active(void)
{
return __this_cpu_read(cpu_dr7) & DR_GLOBAL_ENABLE_MASK;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Frédéric Weisbecker | 15 | 88.24% | 1 | 33.33% |
Tejun Heo | 2 | 11.76% | 2 | 66.67% |
Total | 17 | 100.00% | 3 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Steven Rostedt | 13 | 92.86% | 1 | 50.00% |
Christoph Lameter | 1 | 7.14% | 1 | 50.00% |
Total | 14 | 100.00% | 2 | 100.00% |
static inline void debug_stack_usage_dec(void)
{
__this_cpu_dec(debug_stack_usage);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Rostedt | 13 | 92.86% | 1 | 50.00% |
Christoph Lameter | 1 | 7.14% | 1 | 50.00% |
Total | 14 | 100.00% | 2 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Steven Rostedt | 14 | 100.00% | 1 | 100.00% |
Total | 14 | 100.00% | 1 | 100.00% |
static inline void debug_stack_set_zero(void) { }
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Rostedt | 8 | 100.00% | 1 | 100.00% |
Total | 8 | 100.00% | 1 | 100.00% |
static inline void debug_stack_reset(void) { }
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Rostedt | 8 | 100.00% | 1 | 100.00% |
Total | 8 | 100.00% | 1 | 100.00% |
static inline void debug_stack_usage_inc(void) { }
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Rostedt | 8 | 100.00% | 1 | 100.00% |
Total | 8 | 100.00% | 1 | 100.00% |
static inline void debug_stack_usage_dec(void) { }
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Rostedt | 8 | 100.00% | 1 | 100.00% |
Total | 8 | 100.00% | 1 | 100.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
Person | Tokens | Prop | Commits | CommitProp |
Jacob Shin | 13 | 100.00% | 1 | 100.00% |
Total | 13 | 100.00% | 1 | 100.00% |
#endif
#endif /* _ASM_X86_DEBUGREG_H */
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Paul Gortmaker | 144 | 37.31% | 1 | 7.14% |
Steven Rostedt | 108 | 27.98% | 1 | 7.14% |
K.Prasad | 46 | 11.92% | 1 | 7.14% |
Frédéric Weisbecker | 40 | 10.36% | 3 | 21.43% |
Jacob Shin | 32 | 8.29% | 1 | 7.14% |
Thomas Gleixner | 4 | 1.04% | 1 | 7.14% |
David Howells | 3 | 0.78% | 1 | 7.14% |
H. Peter Anvin | 3 | 0.78% | 1 | 7.14% |
Tejun Heo | 3 | 0.78% | 2 | 14.29% |
Christoph Lameter | 2 | 0.52% | 1 | 7.14% |
Greg Kroah-Hartman | 1 | 0.26% | 1 | 7.14% |
Total | 386 | 100.00% | 14 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.