linux/arch/mips/include/asm/ptrace.h
<<
>>
Prefs
   1/*
   2 * This file is subject to the terms and conditions of the GNU General Public
   3 * License.  See the file "COPYING" in the main directory of this archive
   4 * for more details.
   5 *
   6 * Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 by Ralf Baechle
   7 * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
   8 */
   9#ifndef _ASM_PTRACE_H
  10#define _ASM_PTRACE_H
  11
  12/* 0 - 31 are integer registers, 32 - 63 are fp registers.  */
  13#define FPR_BASE        32
  14#define PC              64
  15#define CAUSE           65
  16#define BADVADDR        66
  17#define MMHI            67
  18#define MMLO            68
  19#define FPC_CSR         69
  20#define FPC_EIR         70
  21#define DSP_BASE        71              /* 3 more hi / lo register pairs */
  22#define DSP_CONTROL     77
  23#define ACX             78
  24
  25/*
  26 * This struct defines the way the registers are stored on the stack during a
  27 * system call/exception. As usual the registers k0/k1 aren't being saved.
  28 */
  29struct pt_regs {
  30#ifdef CONFIG_32BIT
  31        /* Pad bytes for argument save space on the stack. */
  32        unsigned long pad0[6];
  33#endif
  34
  35        /* Saved main processor registers. */
  36        unsigned long regs[32];
  37
  38        /* Saved special registers. */
  39        unsigned long cp0_status;
  40        unsigned long hi;
  41        unsigned long lo;
  42#ifdef CONFIG_CPU_HAS_SMARTMIPS
  43        unsigned long acx;
  44#endif
  45        unsigned long cp0_badvaddr;
  46        unsigned long cp0_cause;
  47        unsigned long cp0_epc;
  48#ifdef CONFIG_MIPS_MT_SMTC
  49        unsigned long cp0_tcstatus;
  50#endif /* CONFIG_MIPS_MT_SMTC */
  51} __attribute__ ((aligned (8)));
  52
  53/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
  54#define PTRACE_GETREGS          12
  55#define PTRACE_SETREGS          13
  56#define PTRACE_GETFPREGS                14
  57#define PTRACE_SETFPREGS                15
  58/* #define PTRACE_GETFPXREGS            18 */
  59/* #define PTRACE_SETFPXREGS            19 */
  60
  61#define PTRACE_OLDSETOPTIONS    21
  62
  63#define PTRACE_GET_THREAD_AREA  25
  64#define PTRACE_SET_THREAD_AREA  26
  65
  66/* Calls to trace a 64bit program from a 32bit program.  */
  67#define PTRACE_PEEKTEXT_3264    0xc0
  68#define PTRACE_PEEKDATA_3264    0xc1
  69#define PTRACE_POKETEXT_3264    0xc2
  70#define PTRACE_POKEDATA_3264    0xc3
  71#define PTRACE_GET_THREAD_AREA_3264     0xc4
  72
  73/* Read and write watchpoint registers.  */
  74enum pt_watch_style {
  75        pt_watch_style_mips32,
  76        pt_watch_style_mips64
  77};
  78struct mips32_watch_regs {
  79        unsigned int watchlo[8];
  80        /* Lower 16 bits of watchhi. */
  81        unsigned short watchhi[8];
  82        /* Valid mask and I R W bits.
  83         * bit 0 -- 1 if W bit is usable.
  84         * bit 1 -- 1 if R bit is usable.
  85         * bit 2 -- 1 if I bit is usable.
  86         * bits 3 - 11 -- Valid watchhi mask bits.
  87         */
  88        unsigned short watch_masks[8];
  89        /* The number of valid watch register pairs.  */
  90        unsigned int num_valid;
  91} __attribute__((aligned(8)));
  92
  93struct mips64_watch_regs {
  94        unsigned long long watchlo[8];
  95        unsigned short watchhi[8];
  96        unsigned short watch_masks[8];
  97        unsigned int num_valid;
  98} __attribute__((aligned(8)));
  99
 100struct pt_watch_regs {
 101        enum pt_watch_style style;
 102        union {
 103                struct mips32_watch_regs mips32;
 104                struct mips32_watch_regs mips64;
 105        };
 106};
 107
 108#define PTRACE_GET_WATCH_REGS   0xd0
 109#define PTRACE_SET_WATCH_REGS   0xd1
 110
 111#ifdef __KERNEL__
 112
 113#include <linux/compiler.h>
 114#include <linux/linkage.h>
 115#include <linux/types.h>
 116#include <asm/isadep.h>
 117
 118struct task_struct;
 119
 120extern int ptrace_getregs(struct task_struct *child, __s64 __user *data);
 121extern int ptrace_setregs(struct task_struct *child, __s64 __user *data);
 122
 123extern int ptrace_getfpregs(struct task_struct *child, __u32 __user *data);
 124extern int ptrace_setfpregs(struct task_struct *child, __u32 __user *data);
 125
 126extern int ptrace_get_watch_regs(struct task_struct *child,
 127        struct pt_watch_regs __user *addr);
 128extern int ptrace_set_watch_regs(struct task_struct *child,
 129        struct pt_watch_regs __user *addr);
 130
 131/*
 132 * Does the process account for user or for system time?
 133 */
 134#define user_mode(regs) (((regs)->cp0_status & KU_MASK) == KU_USER)
 135
 136#define instruction_pointer(regs) ((regs)->cp0_epc)
 137#define profile_pc(regs) instruction_pointer(regs)
 138
 139extern asmlinkage void do_syscall_trace(struct pt_regs *regs, int entryexit);
 140
 141extern NORET_TYPE void die(const char *, const struct pt_regs *) ATTRIB_NORET;
 142
 143static inline void die_if_kernel(const char *str, const struct pt_regs *regs)
 144{
 145        if (unlikely(!user_mode(regs)))
 146                die(str, regs);
 147}
 148
 149#endif
 150
 151#endif /* _ASM_PTRACE_H */
 152
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.