Loading arch/hexagon/include/uapi/asm/ptrace.h +5 −0 Original line number Diff line number Diff line Loading @@ -36,4 +36,9 @@ extern const char *regs_query_register_name(unsigned int offset); ((struct pt_regs *) \ ((unsigned long)current_thread_info() + THREAD_SIZE) - 1) #if CONFIG_HEXAGON_ARCH_VERSION >= 4 #define arch_has_single_step() (1) #endif #endif arch/hexagon/include/uapi/asm/registers.h +3 −0 Original line number Diff line number Diff line Loading @@ -211,6 +211,9 @@ struct pt_regs { #define pt_psp(regs) ((regs)->hvmer.vmpsp) #define pt_badva(regs) ((regs)->hvmer.vmbadva) #define pt_set_singlestep(regs) ((regs)->hvmer.vmest |= (1<<HVM_VMEST_SS_SFT)) #define pt_clr_singlestep(regs) ((regs)->hvmer.vmest &= ~(1<<HVM_VMEST_SS_SFT)) #define pt_set_rte_sp(regs, sp) do {\ pt_psp(regs) = (sp);\ (regs)->SP = (unsigned long) &((regs)->hvmer);\ Loading arch/hexagon/kernel/ptrace.c +15 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,21 @@ #include <asm/user.h> #if arch_has_single_step() /* Both called from ptrace_resume */ void user_enable_single_step(struct task_struct *child) { pt_set_singlestep(task_pt_regs(child)); set_tsk_thread_flag(child, TIF_SINGLESTEP); } void user_disable_single_step(struct task_struct *child) { pt_clr_singlestep(task_pt_regs(child)); clear_tsk_thread_flag(child, TIF_SINGLESTEP); } #endif static int genregs_get(struct task_struct *target, const struct user_regset *regset, unsigned int pos, unsigned int count, Loading arch/hexagon/kernel/traps.c +11 −0 Original line number Diff line number Diff line Loading @@ -451,3 +451,14 @@ void do_machcheck(struct pt_regs *regs) /* Halt and catch fire */ __vmstop(); } /* * Treat this like the old 0xdb trap. */ void do_debug_exception(struct pt_regs *regs) { regs->hvmer.vmest &= ~HVM_VMEST_CAUSE_MSK; regs->hvmer.vmest |= (TRAP_DEBUG << HVM_VMEST_CAUSE_SFT); do_trap0(regs); } arch/hexagon/kernel/vm_entry.S +3 −0 Original line number Diff line number Diff line Loading @@ -367,6 +367,9 @@ _K_enter_trap0: _K_enter_machcheck: vm_event_entry(do_machcheck) .globl _K_enter_debug _K_enter_debug: vm_event_entry(do_debug_exception) .globl ret_from_fork ret_from_fork: Loading Loading
arch/hexagon/include/uapi/asm/ptrace.h +5 −0 Original line number Diff line number Diff line Loading @@ -36,4 +36,9 @@ extern const char *regs_query_register_name(unsigned int offset); ((struct pt_regs *) \ ((unsigned long)current_thread_info() + THREAD_SIZE) - 1) #if CONFIG_HEXAGON_ARCH_VERSION >= 4 #define arch_has_single_step() (1) #endif #endif
arch/hexagon/include/uapi/asm/registers.h +3 −0 Original line number Diff line number Diff line Loading @@ -211,6 +211,9 @@ struct pt_regs { #define pt_psp(regs) ((regs)->hvmer.vmpsp) #define pt_badva(regs) ((regs)->hvmer.vmbadva) #define pt_set_singlestep(regs) ((regs)->hvmer.vmest |= (1<<HVM_VMEST_SS_SFT)) #define pt_clr_singlestep(regs) ((regs)->hvmer.vmest &= ~(1<<HVM_VMEST_SS_SFT)) #define pt_set_rte_sp(regs, sp) do {\ pt_psp(regs) = (sp);\ (regs)->SP = (unsigned long) &((regs)->hvmer);\ Loading
arch/hexagon/kernel/ptrace.c +15 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,21 @@ #include <asm/user.h> #if arch_has_single_step() /* Both called from ptrace_resume */ void user_enable_single_step(struct task_struct *child) { pt_set_singlestep(task_pt_regs(child)); set_tsk_thread_flag(child, TIF_SINGLESTEP); } void user_disable_single_step(struct task_struct *child) { pt_clr_singlestep(task_pt_regs(child)); clear_tsk_thread_flag(child, TIF_SINGLESTEP); } #endif static int genregs_get(struct task_struct *target, const struct user_regset *regset, unsigned int pos, unsigned int count, Loading
arch/hexagon/kernel/traps.c +11 −0 Original line number Diff line number Diff line Loading @@ -451,3 +451,14 @@ void do_machcheck(struct pt_regs *regs) /* Halt and catch fire */ __vmstop(); } /* * Treat this like the old 0xdb trap. */ void do_debug_exception(struct pt_regs *regs) { regs->hvmer.vmest &= ~HVM_VMEST_CAUSE_MSK; regs->hvmer.vmest |= (TRAP_DEBUG << HVM_VMEST_CAUSE_SFT); do_trap0(regs); }
arch/hexagon/kernel/vm_entry.S +3 −0 Original line number Diff line number Diff line Loading @@ -367,6 +367,9 @@ _K_enter_trap0: _K_enter_machcheck: vm_event_entry(do_machcheck) .globl _K_enter_debug _K_enter_debug: vm_event_entry(do_debug_exception) .globl ret_from_fork ret_from_fork: Loading