2
* linux/arch/unicore32/include/asm/ptrace.h
4
* Code specific to PKUnity SoC and UniCore ISA
6
* Copyright (C) 2001-2010 GUAN Xue-tao
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License version 2 as
10
* published by the Free Software Foundation.
12
#ifndef __UNICORE_PTRACE_H__
13
#define __UNICORE_PTRACE_H__
15
#define PTRACE_GET_THREAD_AREA 22
20
#define USER_MODE 0x00000010
21
#define REAL_MODE 0x00000011
22
#define INTR_MODE 0x00000012
23
#define PRIV_MODE 0x00000013
24
#define ABRT_MODE 0x00000017
25
#define EXTN_MODE 0x0000001b
26
#define SUSR_MODE 0x0000001f
27
#define MODE_MASK 0x0000001f
28
#define PSR_R_BIT 0x00000040
29
#define PSR_I_BIT 0x00000080
30
#define PSR_V_BIT 0x10000000
31
#define PSR_C_BIT 0x20000000
32
#define PSR_Z_BIT 0x40000000
33
#define PSR_S_BIT 0x80000000
38
#define PSR_f 0xff000000 /* Flags */
39
#define PSR_c 0x000000ff /* Control */
44
* This struct defines the way the registers are stored on the
45
* stack during a system call. Note that sizeof(struct pt_regs)
46
* has to be a multiple of 8.
49
unsigned long uregs[34];
52
#define UCreg_asr uregs[32]
53
#define UCreg_pc uregs[31]
54
#define UCreg_lr uregs[30]
55
#define UCreg_sp uregs[29]
56
#define UCreg_ip uregs[28]
57
#define UCreg_fp uregs[27]
58
#define UCreg_26 uregs[26]
59
#define UCreg_25 uregs[25]
60
#define UCreg_24 uregs[24]
61
#define UCreg_23 uregs[23]
62
#define UCreg_22 uregs[22]
63
#define UCreg_21 uregs[21]
64
#define UCreg_20 uregs[20]
65
#define UCreg_19 uregs[19]
66
#define UCreg_18 uregs[18]
67
#define UCreg_17 uregs[17]
68
#define UCreg_16 uregs[16]
69
#define UCreg_15 uregs[15]
70
#define UCreg_14 uregs[14]
71
#define UCreg_13 uregs[13]
72
#define UCreg_12 uregs[12]
73
#define UCreg_11 uregs[11]
74
#define UCreg_10 uregs[10]
75
#define UCreg_09 uregs[9]
76
#define UCreg_08 uregs[8]
77
#define UCreg_07 uregs[7]
78
#define UCreg_06 uregs[6]
79
#define UCreg_05 uregs[5]
80
#define UCreg_04 uregs[4]
81
#define UCreg_03 uregs[3]
82
#define UCreg_02 uregs[2]
83
#define UCreg_01 uregs[1]
84
#define UCreg_00 uregs[0]
85
#define UCreg_ORIG_00 uregs[33]
89
#define user_mode(regs) \
90
(processor_mode(regs) == USER_MODE)
92
#define processor_mode(regs) \
93
((regs)->UCreg_asr & MODE_MASK)
95
#define interrupts_enabled(regs) \
96
(!((regs)->UCreg_asr & PSR_I_BIT))
98
#define fast_interrupts_enabled(regs) \
99
(!((regs)->UCreg_asr & PSR_R_BIT))
101
/* Are the current registers suitable for user mode?
102
* (used to maintain security in signal handlers)
104
static inline int valid_user_regs(struct pt_regs *regs)
106
unsigned long mode = regs->UCreg_asr & MODE_MASK;
109
* Always clear the R (REAL) bits
111
regs->UCreg_asr &= ~(PSR_R_BIT);
113
if ((regs->UCreg_asr & PSR_I_BIT) == 0) {
114
if (mode == USER_MODE)
119
* Force ASR to something logical...
121
regs->UCreg_asr &= PSR_f | USER_MODE;
126
#define instruction_pointer(regs) ((regs)->UCreg_pc)
128
#endif /* __KERNEL__ */
130
#endif /* __ASSEMBLY__ */