Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e9129e56 authored by Vincent Hanquez's avatar Vincent Hanquez Committed by Linus Torvalds
Browse files

[PATCH] xen: x86_64: Add macro for debugreg



Add 2 macros to set and get debugreg on x86_64.  This is useful for Xen
because it will need only to redefine each macro to a hypervisor call.

Signed-off-by: default avatarVincent Hanquez <vincent.hanquez@cl.cam.ac.uk>
Cc: Ian Pratt <m+Ian.Pratt@cl.cam.ac.uk>
Cc: Andi Kleen <ak@muc.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 717b594a
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -439,7 +439,7 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
		 * inside the kernel.
		 * inside the kernel.
		 */
		 */
		if (current->thread.debugreg7)
		if (current->thread.debugreg7)
			asm volatile("movq %0,%%db7"	: : "r" (current->thread.debugreg7));
			set_debugreg(current->thread.debugreg7, 7);


		/* Whee!  Actually deliver the signal.  */
		/* Whee!  Actually deliver the signal.  */
		return handle_signal(signr, &info, &ka, oldset, regs);
		return handle_signal(signr, &info, &ka, oldset, regs);
+2 −2
Original line number Original line Diff line number Diff line
@@ -669,7 +669,7 @@ asmlinkage void do_debug(struct pt_regs * regs, unsigned long error_code)
       }
       }
#endif
#endif


	asm("movq %%db6,%0" : "=r" (condition));
	get_debugreg(condition, 6);


	if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
	if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,
						SIGTRAP) == NOTIFY_STOP)
						SIGTRAP) == NOTIFY_STOP)
@@ -721,7 +721,7 @@ asmlinkage void do_debug(struct pt_regs * regs, unsigned long error_code)
	info.si_addr = (void __user *)regs->rip;
	info.si_addr = (void __user *)regs->rip;
	force_sig_info(SIGTRAP, &info, tsk);	
	force_sig_info(SIGTRAP, &info, tsk);	
clear_dr7:
clear_dr7:
	asm volatile("movq %0,%%db7"::"r"(0UL));
	set_debugreg(0UL, 7);
	return;
	return;


clear_TF_reenable:
clear_TF_reenable:
+8 −0
Original line number Original line Diff line number Diff line
@@ -280,6 +280,14 @@ struct thread_struct {
	set_fs(USER_DS);							 \
	set_fs(USER_DS);							 \
} while(0) 
} while(0) 


#define get_debugreg(var, register)				\
		__asm__("movq %%db" #register ", %0"		\
			:"=r" (var))
#define set_debugreg(value, register)			\
		__asm__("movq %0,%%db" #register		\
			: /* no output */			\
			:"r" (value))

struct task_struct;
struct task_struct;
struct mm_struct;
struct mm_struct;