openrisc: sanitize use of orig_gpr11
The pt_regs struct had both a 'syscallno' field and an 'orig_gpr11' field and it wasn't really clear how these were supposed to be used. This patch removes the syscallno field altogether and makes orig_gpr11 work more like other architectures: keep track of syscall number in progress or hold -1 for non-syscall exceptions. Signed-off-by: Jonas Bonn <jonas@southpole.se>
This commit is contained in:
@@ -73,9 +73,13 @@ struct pt_regs {
|
||||
};
|
||||
};
|
||||
long pc;
|
||||
/* For restarting system calls:
|
||||
* Set to syscall number for syscall exceptions,
|
||||
* -1 for all other exceptions.
|
||||
*/
|
||||
long orig_gpr11; /* For restarting system calls */
|
||||
long syscallno; /* Syscall number (used by strace) */
|
||||
long dummy; /* Cheap alignment fix */
|
||||
long dummy2; /* Cheap alignment fix */
|
||||
};
|
||||
|
||||
/* TODO: Rename this to REDZONE because that's what it is */
|
||||
|
@@ -25,7 +25,7 @@
|
||||
static inline int
|
||||
syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
|
||||
{
|
||||
return regs->syscallno ? regs->syscallno : -1;
|
||||
return regs->orig_gpr11;
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -50,10 +50,7 @@ static inline void
|
||||
syscall_set_return_value(struct task_struct *task, struct pt_regs *regs,
|
||||
int error, long val)
|
||||
{
|
||||
if (error)
|
||||
regs->gpr[11] = -error;
|
||||
else
|
||||
regs->gpr[11] = val;
|
||||
regs->gpr[11] = (long) error ?: val;
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
Reference in New Issue
Block a user