Linux Audio

Check our new training course

Loading...
v3.1
 
 1#ifndef _ASMAXP_PTRACE_H
 2#define _ASMAXP_PTRACE_H
 3
 
 4
 5/*
 6 * This struct defines the way the registers are stored on the
 7 * kernel stack during a system call or other kernel entry
 8 *
 9 * NOTE! I want to minimize the overhead of system calls, so this
10 * struct has as little information as possible.  I does not have
11 *
12 *  - floating point regs: the kernel doesn't change those
13 *  - r9-15: saved by the C compiler
14 *
15 * This makes "fork()" and "exec()" a bit more complex, but should
16 * give us low system call latency.
17 */
18
19struct pt_regs {
20	unsigned long r0;
21	unsigned long r1;
22	unsigned long r2;
23	unsigned long r3;
24	unsigned long r4;
25	unsigned long r5;
26	unsigned long r6;
27	unsigned long r7;
28	unsigned long r8;
29	unsigned long r19;
30	unsigned long r20;
31	unsigned long r21;
32	unsigned long r22;
33	unsigned long r23;
34	unsigned long r24;
35	unsigned long r25;
36	unsigned long r26;
37	unsigned long r27;
38	unsigned long r28;
39	unsigned long hae;
40/* JRP - These are the values provided to a0-a2 by PALcode */
41	unsigned long trap_a0;
42	unsigned long trap_a1;
43	unsigned long trap_a2;
44/* These are saved by PAL-code: */
45	unsigned long ps;
46	unsigned long pc;
47	unsigned long gp;
48	unsigned long r16;
49	unsigned long r17;
50	unsigned long r18;
51};
52
53/*
54 * This is the extended stack used by signal handlers and the context
55 * switcher: it's pushed after the normal "struct pt_regs".
56 */
57struct switch_stack {
58	unsigned long r9;
59	unsigned long r10;
60	unsigned long r11;
61	unsigned long r12;
62	unsigned long r13;
63	unsigned long r14;
64	unsigned long r15;
65	unsigned long r26;
66	unsigned long fp[32];	/* fp[31] is fpcr */
67};
68
69#ifdef __KERNEL__
70
71#define arch_has_single_step()		(1)
72#define user_mode(regs) (((regs)->ps & 8) != 0)
73#define instruction_pointer(regs) ((regs)->pc)
74#define profile_pc(regs) instruction_pointer(regs)
 
75
76#define task_pt_regs(task) \
77  ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1)
78
79#define force_successful_syscall_return() (task_pt_regs(current)->r0 = 0)
80
81#endif
 
 
 
 
 
 
 
82
83#endif
v5.9
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef _ASMAXP_PTRACE_H
 3#define _ASMAXP_PTRACE_H
 4
 5#include <uapi/asm/ptrace.h>
 6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7
 8#define arch_has_single_step()		(1)
 9#define user_mode(regs) (((regs)->ps & 8) != 0)
10#define instruction_pointer(regs) ((regs)->pc)
11#define profile_pc(regs) instruction_pointer(regs)
12#define current_user_stack_pointer() rdusp()
13
14#define task_pt_regs(task) \
15  ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1)
16
17#define current_pt_regs() \
18  ((struct pt_regs *) ((char *)current_thread_info() + 2*PAGE_SIZE) - 1)
19#define signal_pt_regs current_pt_regs
20
21#define force_successful_syscall_return() (current_pt_regs()->r0 = 0)
22
23static inline unsigned long regs_return_value(struct pt_regs *regs)
24{
25	return regs->r0;
26}
27
28#endif