Commit 8b7a87a0 authored by Max Filippov's avatar Max Filippov

xtensa: expose syscall through user_pt_regs

Use one of the reserved slots in struct user_pt_regs to return syscall
number in the GPR regset. Update syscall number from the GPR regset only
when it's non-zero.
Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent ef1a935c
...@@ -50,7 +50,8 @@ struct user_pt_regs { ...@@ -50,7 +50,8 @@ struct user_pt_regs {
__u32 windowstart; __u32 windowstart;
__u32 windowbase; __u32 windowbase;
__u32 threadptr; __u32 threadptr;
__u32 reserved[7 + 48]; __u32 syscall;
__u32 reserved[6 + 48];
__u32 a[64]; __u32 a[64];
}; };
......
...@@ -52,6 +52,7 @@ static int gpr_get(struct task_struct *target, ...@@ -52,6 +52,7 @@ static int gpr_get(struct task_struct *target,
.threadptr = regs->threadptr, .threadptr = regs->threadptr,
.windowbase = regs->windowbase, .windowbase = regs->windowbase,
.windowstart = regs->windowstart, .windowstart = regs->windowstart,
.syscall = regs->syscall,
}; };
memcpy(newregs.a, memcpy(newregs.a,
...@@ -91,6 +92,9 @@ static int gpr_set(struct task_struct *target, ...@@ -91,6 +92,9 @@ static int gpr_set(struct task_struct *target,
regs->sar = newregs.sar; regs->sar = newregs.sar;
regs->threadptr = newregs.threadptr; regs->threadptr = newregs.threadptr;
if (newregs.syscall)
regs->syscall = newregs.syscall;
if (newregs.windowbase != regs->windowbase || if (newregs.windowbase != regs->windowbase ||
newregs.windowstart != regs->windowstart) { newregs.windowstart != regs->windowstart) {
u32 rotws, wmask; u32 rotws, wmask;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment