mips o32: fix build
Commit 917c2ccf3a
"Refactor stack pointers" moved mips_REG_* macros
from linux/mips/arch_regs.h to linux/mips/arch_regs.c because these
macros are no longer used outside syscall.c or files included by
syscall.c, but this caused a build regression on mips o32 because
decode_syscall_subcall() uses mips_REG_SP prior to its definition.
* syscall.c (decode_syscall_subcall): Move ...
* linux/mips/get_syscall_args.c: ... here.
* NEWS: Mention this fix.
Reported-by: Baruch Siach <baruch@tkos.co.il>
Fixes: v4.26~61 "Refactor stack pointers"
This commit is contained in:
parent
f414d9e3ba
commit
2c8b6de913
1
NEWS
1
NEWS
@ -9,6 +9,7 @@ Noteworthy changes in release ?.?? (????-??-??)
|
||||
|
||||
* Bug fixes
|
||||
* Fixed strace-k test on alpha.
|
||||
* Fixed build on mips o32.
|
||||
* Fixed build on NOMMU architectures.
|
||||
|
||||
Noteworthy changes in release 4.26 (2018-12-26)
|
||||
|
@ -37,3 +37,29 @@ arch_get_syscall_args(struct tcb *tcp)
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
|
||||
#ifdef SYS_syscall_subcall
|
||||
static void
|
||||
decode_syscall_subcall(struct tcb *tcp)
|
||||
{
|
||||
if (!scno_is_valid(tcp->u_arg[0]))
|
||||
return;
|
||||
tcp->scno = tcp->u_arg[0];
|
||||
tcp->qual_flg = qual_flags(tcp->scno);
|
||||
tcp->s_ent = &sysent[tcp->scno];
|
||||
memmove(&tcp->u_arg[0], &tcp->u_arg[1],
|
||||
sizeof(tcp->u_arg) - sizeof(tcp->u_arg[0]));
|
||||
/*
|
||||
* Fetching the last arg of 7-arg syscalls (fadvise64_64
|
||||
* and sync_file_range) requires additional code,
|
||||
* see linux/mips/get_syscall_args.c
|
||||
*/
|
||||
if (tcp->s_ent->nargs == MAX_ARGS) {
|
||||
if (umoven(tcp,
|
||||
mips_REG_SP + MAX_ARGS * sizeof(tcp->u_arg[0]),
|
||||
sizeof(tcp->u_arg[0]),
|
||||
&tcp->u_arg[MAX_ARGS - 1]) < 0)
|
||||
tcp->u_arg[MAX_ARGS - 1] = 0;
|
||||
}
|
||||
}
|
||||
#endif /* SYS_syscall_subcall */
|
||||
|
27
syscall.c
27
syscall.c
@ -349,31 +349,8 @@ decode_ipc_subcall(struct tcb *tcp)
|
||||
#endif /* SYS_ipc_subcall */
|
||||
|
||||
#ifdef SYS_syscall_subcall
|
||||
static void
|
||||
decode_syscall_subcall(struct tcb *tcp)
|
||||
{
|
||||
if (!scno_is_valid(tcp->u_arg[0]))
|
||||
return;
|
||||
tcp->scno = tcp->u_arg[0];
|
||||
tcp->qual_flg = qual_flags(tcp->scno);
|
||||
tcp->s_ent = &sysent[tcp->scno];
|
||||
memmove(&tcp->u_arg[0], &tcp->u_arg[1],
|
||||
sizeof(tcp->u_arg) - sizeof(tcp->u_arg[0]));
|
||||
# ifdef LINUX_MIPSO32
|
||||
/*
|
||||
* Fetching the last arg of 7-arg syscalls (fadvise64_64
|
||||
* and sync_file_range) requires additional code,
|
||||
* see linux/mips/get_syscall_args.c
|
||||
*/
|
||||
if (tcp->s_ent->nargs == MAX_ARGS) {
|
||||
if (umoven(tcp,
|
||||
mips_REG_SP + MAX_ARGS * sizeof(tcp->u_arg[0]),
|
||||
sizeof(tcp->u_arg[0]),
|
||||
&tcp->u_arg[MAX_ARGS - 1]) < 0)
|
||||
tcp->u_arg[MAX_ARGS - 1] = 0;
|
||||
}
|
||||
# endif /* LINUX_MIPSO32 */
|
||||
}
|
||||
/* The implementation is architecture specific. */
|
||||
static void decode_syscall_subcall(struct tcb *);
|
||||
#endif /* SYS_syscall_subcall */
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user