qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 2/2] linux-user/riscv: Update the syscall_nr's to the 5.5


From: Laurent Vivier
Subject: Re: [PATCH v2 2/2] linux-user/riscv: Update the syscall_nr's to the 5.5 kernel
Date: Tue, 25 Feb 2020 12:50:46 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1

Le 25/02/2020 à 00:21, Alistair Francis a écrit :
> Signed-off-by: Alistair Francis <address@hidden>
> ---
>  linux-user/riscv/syscall32_nr.h | 314 ++++++++++++++++++++++++++++++++
>  linux-user/riscv/syscall64_nr.h | 303 ++++++++++++++++++++++++++++++
>  linux-user/riscv/syscall_nr.h   | 294 +-----------------------------
>  3 files changed, 619 insertions(+), 292 deletions(-)
>  create mode 100644 linux-user/riscv/syscall32_nr.h
>  create mode 100644 linux-user/riscv/syscall64_nr.h
> 
> diff --git a/linux-user/riscv/syscall32_nr.h b/linux-user/riscv/syscall32_nr.h
> new file mode 100644
> index 0000000000..c3bf5930d0
> --- /dev/null
> +++ b/linux-user/riscv/syscall32_nr.h
> @@ -0,0 +1,314 @@
> +/*
> + * Syscall numbers from asm-generic for RV32.
> + */
> +
> +#ifndef LINUX_USER_RISCV_SYSCALL32_NR_H
> +#define LINUX_USER_RISCV_SYSCALL32_NR_H
> +
> +#define TARGET_NR_io_setup 0
> +#define TARGET_NR_io_destroy 1
> +#define TARGET_NR_io_submit 2
> +#define TARGET_NR_io_cancel 3
> +#define TARGET_NR_setxattr 5
> +#define TARGET_NR_lsetxattr 6
> +#define TARGET_NR_fsetxattr 7
> +#define TARGET_NR_getxattr 8
> +#define TARGET_NR_lgetxattr 9
> +#define TARGET_NR_fgetxattr 10
> +#define TARGET_NR_listxattr 11
> +#define TARGET_NR_llistxattr 12
> +#define TARGET_NR_flistxattr 13
> +#define TARGET_NR_removexattr 14
> +#define TARGET_NR_lremovexattr 15
> +#define TARGET_NR_fremovexattr 16
> +#define TARGET_NR_getcwd 17
> +#define TARGET_NR_lookup_dcookie 18
> +#define TARGET_NR_eventfd2 19
> +#define TARGET_NR_epoll_create1 20
> +#define TARGET_NR_epoll_ctl 21
> +#define TARGET_NR_epoll_pwait 22
> +#define TARGET_NR_dup 23
> +#define TARGET_NR_dup3 24
> +#define TARGET_NR_fcntl64 25
> +#define TARGET_NR_inotify_init1 26
> +#define TARGET_NR_inotify_add_watch 27
> +#define TARGET_NR_inotify_rm_watch 28
> +#define TARGET_NR_ioctl 29
> +#define TARGET_NR_ioprio_set 30
> +#define TARGET_NR_ioprio_get 31
> +#define TARGET_NR_flock 32
> +#define TARGET_NR_mknodat 33
> +#define TARGET_NR_mkdirat 34
> +#define TARGET_NR_unlinkat 35
> +#define TARGET_NR_symlinkat 36
> +#define TARGET_NR_linkat 37
> +#define TARGET_NR_umount2 39
> +#define TARGET_NR_mount 40
> +#define TARGET_NR_pivot_root 41
> +#define TARGET_NR_nfsservctl 42
> +#define TARGET_NR_statfs 43
> +#define TARGET_NR_fstatfs 44
> +#define TARGET_NR_truncate 45
> +#define TARGET_NR_ftruncate 46

For riscv32, it's the 64bit version name to use:

#define TARGET_NR_statfs64 43
#define TARGET_NR_fstatfs64 44
#define TARGET_NR_truncate64 45
#define TARGET_NR_ftruncate64 46
(and below)

because:

include/uapi/asm-generic/unistd.h

#if __BITS_PER_LONG == 64 && !defined(__SYSCALL_COMPAT)
...
#else
#define __NR_fcntl64 __NR3264_fcntl
#define __NR_statfs64 __NR3264_statfs
#define __NR_fstatfs64 __NR3264_fstatfs
#define __NR_truncate64 __NR3264_truncate
#define __NR_ftruncate64 __NR3264_ftruncate
#define __NR_llseek __NR3264_lseek
#define __NR_sendfile64 __NR3264_sendfile
#if defined(__ARCH_WANT_NEW_STAT) || defined(__ARCH_WANT_STAT64)
#define __NR_fstatat64 __NR3264_fstatat
#define __NR_fstat64 __NR3264_fstat
#endif
...

arch/riscv/include/uapi/asm/unistd.h
#define __ARCH_WANT_NEW_STAT

arch/riscv/include/uapi/asm/bitsperlong.h

#define __BITS_PER_LONG (__SIZEOF_POINTER__ * 8)

...
> +#define TARGET_NR_getdents64 61
> +#define TARGET_NR__llseek 62

TARGET_NR_llseek

> +#define TARGET_NR_read 63
> +#define TARGET_NR_write 64
> +#define TARGET_NR_readv 65
> +#define TARGET_NR_writev 66
> +#define TARGET_NR_pread64 67
> +#define TARGET_NR_pwrite64 68
> +#define TARGET_NR_preadv 69
> +#define TARGET_NR_pwritev 70
> +#define TARGET_NR_sendfile 71

TARGET_NR_sendfile64

> +#define TARGET_NR_signalfd4 74
> +#define TARGET_NR_vmsplice 75
> +#define TARGET_NR_splice 76
> +#define TARGET_NR_tee 77
> +#define TARGET_NR_readlinkat 78
> +#define TARGET_NR_newfstatat 79
> +#define TARGET_NR_fstat 80

#define TARGET_NR_fstatat64 79
#define TARGET_NR_fstat64 80

...
> +#define TARGET_NR_sethostname 161
> +#define TARGET_NR_setdomainname 162

#define TARGET_NR_getrlimit 163
#define TARGET_NR_setrlimit 164

because

include/uapi/asm-generic/unistd.h

#ifdef __ARCH_WANT_SET_GET_RLIMIT
/* getrlimit and setrlimit are superseded with prlimit64 */
#define __NR_getrlimit 163
__SC_COMP(__NR_getrlimit, sys_getrlimit, compat_sys_getrlimit)
#define __NR_setrlimit 164
__SC_COMP(__NR_setrlimit, sys_setrlimit, compat_sys_setrlimit)
#endif

arch/riscv/include/uapi/asm/unistd.h

#define __ARCH_WANT_SET_GET_RLIMIT

...
> +#define TARGET_NR_arch_specific_syscall 244
> +#define TARGET_NR_riscv_flush_icache TARGET_NR_arch_specific_syscall + 15

It should be good to keep parenthesis around the declaration:

(TARGET_NR_arch_specific_syscall + 15)

...

I think you can remove following defintion as they should be translated
by the target glibc.

> +/*
> + * Alias some of the older pre 64-bit time_t syscalls to the 64-bit
> + * ones for RV32. This is based on the list used by glibc.
> + */
> +#define TARGET_NR_futex TARGET_NR_futex_time64
> +#define TARGET_NR_rt_sigtimedwait TARGET_NR_rt_sigtimedwait_time64
> +#define TARGET_NR_ppoll TARGET_NR_ppoll_time64
> +#define TARGET_NR_utimensat TARGET_NR_utimensat_time64
> +#define TARGET_NR_pselect6 TARGET_NR_pselect6_time64
> +#define TARGET_NR_recvmmsg TARGET_NR_recvmmsg_time64
> +#define TARGET_NR_semtimedop TARGET_NR_semtimedop_time64
> +#define TARGET_NR_mq_timedreceive TARGET_NR_mq_timedreceive_time64
> +#define TARGET_NR_mq_timedsend TARGET_NR_mq_timedsend_time64
> +#define TARGET_NR_clock_getres TARGET_NR_clock_getres_time64
> +#define TARGET_NR_timerfd_settime TARGET_NR_timerfd_settime64
> +#define TARGET_NR_timerfd_gettime TARGET_NR_timerfd_gettime64
> +#define TARGET_NR_sched_rr_get_interval 
> TARGET_NR_sched_rr_get_interval_time64
> +#define TARGET_NR_clock_adjtime TARGET_NR_clock_adjtime64
> +
> +#endif
> diff --git a/linux-user/riscv/syscall64_nr.h b/linux-user/riscv/syscall64_nr.h
> new file mode 100644
> index 0000000000..b58364b570
> --- /dev/null
> +++ b/linux-user/riscv/syscall64_nr.h

syscall64_nr.h is correct.

Thanks,
Laurent




reply via email to

[Prev in Thread] Current Thread [Next in Thread]