You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.0 KiB
97 lines
3.0 KiB
/* |
|
* Copyright 2010 Tilera Corporation. All Rights Reserved. |
|
* |
|
* This program is free software; you can redistribute it and/or |
|
* modify it under the terms of the GNU General Public License |
|
* as published by the Free Software Foundation, version 2. |
|
* |
|
* This program is distributed in the hope that it will be useful, but |
|
* WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or |
|
* NON INFRINGEMENT. See the GNU General Public License for |
|
* more details. |
|
*/ |
|
#ifndef _ASM_TILE_PTRACE_H |
|
#define _ASM_TILE_PTRACE_H |
|
|
|
#include <linux/compiler.h> |
|
|
|
#ifndef __ASSEMBLY__ |
|
/* Benefit from consistent use of "long" on all chips. */ |
|
typedef unsigned long pt_reg_t; |
|
#endif |
|
|
|
#include <uapi/asm/ptrace.h> |
|
|
|
#define PTRACE_O_MASK_TILE (PTRACE_O_TRACEMIGRATE) |
|
#define PT_TRACE_MIGRATE PT_EVENT_FLAG(PTRACE_EVENT_MIGRATE) |
|
|
|
/* Flag bits in pt_regs.flags */ |
|
#define PT_FLAGS_DISABLE_IRQ 1 /* on return to kernel, disable irqs */ |
|
#define PT_FLAGS_CALLER_SAVES 2 /* caller-save registers are valid */ |
|
#define PT_FLAGS_RESTORE_REGS 4 /* restore callee-save regs on return */ |
|
|
|
#ifndef __ASSEMBLY__ |
|
|
|
#define regs_return_value(regs) ((regs)->regs[0]) |
|
#define instruction_pointer(regs) ((regs)->pc) |
|
#define profile_pc(regs) instruction_pointer(regs) |
|
#define user_stack_pointer(regs) ((regs)->sp) |
|
|
|
/* Does the process account for user or for system time? */ |
|
#define user_mode(regs) (EX1_PL((regs)->ex1) < KERNEL_PL) |
|
|
|
/* Fill in a struct pt_regs with the current kernel registers. */ |
|
struct pt_regs *get_pt_regs(struct pt_regs *); |
|
|
|
/* Trace the current syscall. */ |
|
extern int do_syscall_trace_enter(struct pt_regs *regs); |
|
extern void do_syscall_trace_exit(struct pt_regs *regs); |
|
|
|
#define arch_has_single_step() (1) |
|
|
|
/* |
|
* A structure for all single-stepper state. |
|
* |
|
* Also update defines in assembler section if it changes |
|
*/ |
|
struct single_step_state { |
|
/* the page to which we will write hacked-up bundles */ |
|
void __user *buffer; |
|
|
|
union { |
|
int flags; |
|
struct { |
|
unsigned long is_enabled:1, update:1, update_reg:6; |
|
}; |
|
}; |
|
|
|
unsigned long orig_pc; /* the original PC */ |
|
unsigned long next_pc; /* return PC if no branch (PC + 1) */ |
|
unsigned long branch_next_pc; /* return PC if we did branch/jump */ |
|
unsigned long update_value; /* value to restore to update_target */ |
|
}; |
|
|
|
/* Single-step the instruction at regs->pc */ |
|
extern void single_step_once(struct pt_regs *regs); |
|
|
|
/* Clean up after execve(). */ |
|
extern void single_step_execve(void); |
|
|
|
struct task_struct; |
|
|
|
extern void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs); |
|
|
|
#ifdef __tilegx__ |
|
/* We need this since sigval_t has a user pointer in it, for GETSIGINFO etc. */ |
|
#define __ARCH_WANT_COMPAT_SYS_PTRACE |
|
#endif |
|
|
|
#endif /* !__ASSEMBLY__ */ |
|
|
|
#define SINGLESTEP_STATE_MASK_IS_ENABLED 0x1 |
|
#define SINGLESTEP_STATE_MASK_UPDATE 0x2 |
|
#define SINGLESTEP_STATE_TARGET_LB 2 |
|
#define SINGLESTEP_STATE_TARGET_UB 7 |
|
|
|
#endif /* _ASM_TILE_PTRACE_H */
|
|
|