]>
Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
6dea1ba1 G |
2 | /* |
3 | * linux/arch/unicore32/include/asm/ptrace.h | |
4 | * | |
5 | * Code specific to PKUnity SoC and UniCore ISA | |
6 | * | |
7 | * Copyright (C) 2001-2010 GUAN Xue-tao | |
6dea1ba1 G |
8 | */ |
9 | #ifndef __UNICORE_PTRACE_H__ | |
10 | #define __UNICORE_PTRACE_H__ | |
11 | ||
e8ce15a6 | 12 | #include <uapi/asm/ptrace.h> |
6dea1ba1 G |
13 | |
14 | #ifndef __ASSEMBLY__ | |
15 | ||
6dea1ba1 G |
16 | #define user_mode(regs) \ |
17 | (processor_mode(regs) == USER_MODE) | |
18 | ||
19 | #define processor_mode(regs) \ | |
20 | ((regs)->UCreg_asr & MODE_MASK) | |
21 | ||
22 | #define interrupts_enabled(regs) \ | |
23 | (!((regs)->UCreg_asr & PSR_I_BIT)) | |
24 | ||
25 | #define fast_interrupts_enabled(regs) \ | |
26 | (!((regs)->UCreg_asr & PSR_R_BIT)) | |
27 | ||
28 | /* Are the current registers suitable for user mode? | |
29 | * (used to maintain security in signal handlers) | |
30 | */ | |
31 | static inline int valid_user_regs(struct pt_regs *regs) | |
32 | { | |
33 | unsigned long mode = regs->UCreg_asr & MODE_MASK; | |
34 | ||
35 | /* | |
36 | * Always clear the R (REAL) bits | |
37 | */ | |
38 | regs->UCreg_asr &= ~(PSR_R_BIT); | |
39 | ||
40 | if ((regs->UCreg_asr & PSR_I_BIT) == 0) { | |
41 | if (mode == USER_MODE) | |
42 | return 1; | |
43 | } | |
44 | ||
45 | /* | |
46 | * Force ASR to something logical... | |
47 | */ | |
48 | regs->UCreg_asr &= PSR_f | USER_MODE; | |
49 | ||
50 | return 0; | |
51 | } | |
52 | ||
53 | #define instruction_pointer(regs) ((regs)->UCreg_pc) | |
5208ba24 | 54 | #define user_stack_pointer(regs) ((regs)->UCreg_sp) |
1febf615 | 55 | #define profile_pc(regs) instruction_pointer(regs) |
6dea1ba1 | 56 | |
6dea1ba1 | 57 | #endif /* __ASSEMBLY__ */ |
6dea1ba1 | 58 | #endif |