lkml.org 
[lkml]   [2022]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 022/158] um: Cleanup syscall_handler_t definition/cast, fix warning
    Date
    From: David Gow <davidgow@google.com>

    [ Upstream commit f4f03f299a56ce4d73c5431e0327b3b6cb55ebb9 ]

    The syscall_handler_t type for x86_64 was defined as 'long (*)(void)',
    but always cast to 'long (*)(long, long, long, long, long, long)' before
    use. This now triggers a warning (see below).

    Define syscall_handler_t as the latter instead, and remove the cast.
    This simplifies the code, and fixes the warning.

    Warning:
    In file included from ../arch/um/include/asm/processor-generic.h:13
    from ../arch/x86/um/asm/processor.h:41
    from ../include/linux/rcupdate.h:30
    from ../include/linux/rculist.h:11
    from ../include/linux/pid.h:5
    from ../include/linux/sched.h:14
    from ../include/linux/ptrace.h:6
    from ../arch/um/kernel/skas/syscall.c:7:
    ../arch/um/kernel/skas/syscall.c: In function ‘handle_syscall’:
    ../arch/x86/um/shared/sysdep/syscalls_64.h:18:11: warning: cast between incompatible function types from ‘long int (*)(void)’ to ‘long int (*)(long int, long int, long int, long int, long int, long int)’ [
    -Wcast-function-type]
    18 | (((long (*)(long, long, long, long, long, long)) \
    | ^
    ../arch/x86/um/asm/ptrace.h:36:62: note: in definition of macro ‘PT_REGS_SET_SYSCALL_RETURN’
    36 | #define PT_REGS_SET_SYSCALL_RETURN(r, res) (PT_REGS_AX(r) = (res))
    | ^~~
    ../arch/um/kernel/skas/syscall.c:46:33: note: in expansion of macro ‘EXECUTE_SYSCALL’
    46 | EXECUTE_SYSCALL(syscall, regs));
    | ^~~~~~~~~~~~~~~

    Signed-off-by: David Gow <davidgow@google.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/x86/um/shared/sysdep/syscalls_64.h | 5 ++---
    1 file changed, 2 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/um/shared/sysdep/syscalls_64.h b/arch/x86/um/shared/sysdep/syscalls_64.h
    index 48d6cd12f8a5..b6b997225841 100644
    --- a/arch/x86/um/shared/sysdep/syscalls_64.h
    +++ b/arch/x86/um/shared/sysdep/syscalls_64.h
    @@ -10,13 +10,12 @@
    #include <linux/msg.h>
    #include <linux/shm.h>

    -typedef long syscall_handler_t(void);
    +typedef long syscall_handler_t(long, long, long, long, long, long);

    extern syscall_handler_t *sys_call_table[];

    #define EXECUTE_SYSCALL(syscall, regs) \
    - (((long (*)(long, long, long, long, long, long)) \
    - (*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(&regs->regs), \
    + (((*sys_call_table[syscall]))(UPT_SYSCALL_ARG1(&regs->regs), \
    UPT_SYSCALL_ARG2(&regs->regs), \
    UPT_SYSCALL_ARG3(&regs->regs), \
    UPT_SYSCALL_ARG4(&regs->regs), \
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-05-23 19:49    [W:2.098 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site