138 lines
2.7 KiB
C
138 lines
2.7 KiB
C
/*
|
|
* Copyright Codito Technologies (www.codito.com)
|
|
*
|
|
* include/asm-arc/ptrace.h
|
|
*
|
|
* Copyright (C)
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
*
|
|
*/
|
|
#ifndef __ASM_ARC_PTRACE_H
|
|
#define __ASM_ARC_PTRACE_H
|
|
|
|
#include <linux/config.h>
|
|
#include <asm/debug.h>
|
|
#include <asm/arcregs.h>
|
|
|
|
/* Offsets of various elements(registers) of struct pt_regs on the stack.
|
|
* The offsets starts with 4 because sp points to next free element on stack
|
|
*/
|
|
|
|
#define PT_bta 4
|
|
#define PT_lp_start 8
|
|
#define PT_lp_end 12
|
|
#define PT_lp_count 16
|
|
#define PT_status32 20
|
|
#define PT_ret 24
|
|
#define PT_blink 28
|
|
#define PT_fp 32
|
|
#define PT_r26 36
|
|
#define PT_r12 40
|
|
#define PT_r11 44
|
|
#define PT_r10 48
|
|
#define PT_r9 52
|
|
#define PT_r8 56
|
|
#define PT_r7 60
|
|
#define PT_r6 64
|
|
#define PT_r5 68
|
|
#define PT_r4 72
|
|
#define PT_r3 76
|
|
#define PT_r2 80
|
|
#define PT_r1 84
|
|
#define PT_r0 88
|
|
#define PT_orig_r0 92
|
|
#define PT_orig_r8 96
|
|
#define PT_sp 100
|
|
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
/* this struct defines the way the registers are stored on the
|
|
stack during a system call. */
|
|
|
|
struct pt_regs {
|
|
/* After a SAVE_ALL_SYS or a SAVE ALL_INT, SP points to next free
|
|
* entry on stack. So this place holder
|
|
*/
|
|
long stack_place_holder;
|
|
long bta; /* bta_l1, bta_l2, erbta */
|
|
long lp_start;
|
|
long lp_end;
|
|
long lp_count;
|
|
long status32; /* status32_l1, status32_l2, erstatus */
|
|
long ret; /* ilink1, ilink2 or eret*/
|
|
long blink;
|
|
long fp;
|
|
long r26; /* gp */
|
|
long r12;
|
|
long r11;
|
|
long r10;
|
|
long r9;
|
|
long r8;
|
|
long r7;
|
|
long r6;
|
|
long r5;
|
|
long r4;
|
|
long r3;
|
|
long r2;
|
|
long r1;
|
|
long r0;
|
|
long orig_r0;
|
|
long orig_r8; /*used to distinguish between an exception, a system call, int1 or int2 */
|
|
long sp; /* user sp or kernel sp, depending on where we came from */
|
|
};
|
|
|
|
/* Callee saved registers - need to be saved only when you are scheduled out */
|
|
|
|
struct callee_regs {
|
|
/* After a SAVE_ALL_SYS or a SAVE ALL_INT, SP points to next free
|
|
* entry on stack. So this place holder
|
|
*/
|
|
long stack_place_holder;
|
|
long r25;
|
|
long r24;
|
|
long r23;
|
|
long r22;
|
|
long r21;
|
|
long r20;
|
|
long r19;
|
|
long r18;
|
|
long r17;
|
|
long r16;
|
|
long r15;
|
|
long r14;
|
|
long r13;
|
|
};
|
|
|
|
#endif /* !__ASSEMBLY__ */
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#define PTRACE_GETREGS 12
|
|
#define PTRACE_SETREGS 13
|
|
#define PTRACE_GETFPREGS 14
|
|
#define PTRACE_SETFPREGS 15
|
|
|
|
#define PTRACE_SETOPTIONS 21
|
|
|
|
#define PTRACE_O_TRACESYSGOOD 0x00000001
|
|
|
|
|
|
|
|
#ifndef __ASSEMBLY__
|
|
extern void show_regs(struct pt_regs *);
|
|
|
|
/* return 1 if user mode or 0 if kernel mode */
|
|
#define user_mode(regs) ((regs->status32 & STATUS_U_MASK) == STATUS_U_MASK)
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#endif /* __KERNEL__ */
|
|
|
|
#endif /* __ASM_PTRACE_H */
|
|
|