lkml.org 
[lkml]   [2023]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 nolibc 47/53] tools/nolibc: arm: add missing my_syscall6
    Date
    From: Zhangjin Wu <falcon@tinylab.org>

    This is required by the coming removal of the oldselect and newselect
    support.

    pselect6/pselect6_time64 will be used unconditionally, they have 6
    arguments.

    Suggested-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/linux-riscv/bf3e07c1-75f5-425b-9124-f3f2b230e63a@app.fastmail.com/
    Signed-off-by: Zhangjin Wu <falcon@tinylab.org>
    Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    ---
    tools/include/nolibc/arch-arm.h | 23 +++++++++++++++++++++++
    1 file changed, 23 insertions(+)

    diff --git a/tools/include/nolibc/arch-arm.h b/tools/include/nolibc/arch-arm.h
    index 45b89ffe8247..ca4c66987497 100644
    --- a/tools/include/nolibc/arch-arm.h
    +++ b/tools/include/nolibc/arch-arm.h
    @@ -198,6 +198,29 @@ struct sys_stat_struct {
    _arg1; \
    })

    +#define my_syscall6(num, arg1, arg2, arg3, arg4, arg5, arg6) \
    +({ \
    + register long _num __asm__(_NOLIBC_SYSCALL_REG) = (num); \
    + register long _arg1 __asm__ ("r0") = (long)(arg1); \
    + register long _arg2 __asm__ ("r1") = (long)(arg2); \
    + register long _arg3 __asm__ ("r2") = (long)(arg3); \
    + register long _arg4 __asm__ ("r3") = (long)(arg4); \
    + register long _arg5 __asm__ ("r4") = (long)(arg5); \
    + register long _arg6 __asm__ ("r5") = (long)(arg6); \
    + \
    + __asm__ volatile ( \
    + _NOLIBC_THUMB_SET_R7 \
    + "svc #0\n" \
    + _NOLIBC_THUMB_RESTORE_R7 \
    + : "=r"(_arg1), "=r" (_num) \
    + : "r"(_arg1), "r"(_arg2), "r"(_arg3), "r"(_arg4), "r"(_arg5), \
    + "r"(_arg6), "r"(_num) \
    + : "memory", "cc", "lr" \
    + ); \
    + _arg1; \
    +})
    +
    +
    char **environ __attribute__((weak));
    const unsigned long *_auxv __attribute__((weak));

    --
    2.40.1
    \
     
     \ /
      Last update: 2023-06-12 22:51    [W:4.550 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site