aboutsummaryrefslogtreecommitdiff
path: root/tests-mx32
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2018-02-20 17:03:16 -0800
committerElliott Hughes <enh@google.com>2018-02-20 17:06:23 -0800
commitb755614143ce6aab5265ed32c1bb6c8f748e7898 (patch)
tree4b0da9dce35635a264d079fb8ef8b27a16430c29 /tests-mx32
parentf174ca62c552149d51472717a480e2a571885b9a (diff)
downloadstrace-b755614143ce6aab5265ed32c1bb6c8f748e7898.tar.gz
Update strace to 4.21.
Noteworthy changes in release 4.21 (2018-02-13) =============================================== * Changes in behaviour * Warning is now issued when -F option is used. * Warning is now issued when a tracee with unsupported personality is attached. * Unknown syscall numbers are now printed in hexadecimal form. * Improvements * Implemented decoding of netlink descriptor attributes as file descriptors. * Implemented decoding of hugetlb page size selection flags. * Implemented decoding of BPF_PROG_TEST_RUN, BPF_PROG_GET_NEXT_ID, BPF_MAP_GET_NEXT_ID, BPF_PROG_GET_FD_BY_ID, BPF_MAP_GET_FD_BY_ID, and BPF_OBJ_GET_INFO_BY_FD commands of bpf syscall. * Enhanced decoding of get_thread_area, memfd_create, modify_ldt, perf_event_open, reboot, s390_guarded_storage, s390_pcio_mmio_read, s390_pci_mmio_write, s390_runtime_instr, s390_sthyi, set_thread_area, and shmget syscalls. * Implemented decoding of KVM_* and DM_LIST_DEVICES ioctl commands. * Implemented decoding of riscv_flush_icache syscall. * Enhanced decoding of getsockopt and setsockopt syscalls for SOL_NETLINK level. * Enhanced decoding of BPF_MAP_CREATE command of bpf syscall. * Print values returned by mq_open syscall and first arguments of mq_getsetattr, mq_notify, mq_timedreceive, and mq_timedsend syscalls as file descriptors. * Added decoding of get_tls syscall on arm. * Added -e trace=%pure option for tracing system calls with no arguments that never fail. * Updated lists of IPV6_*, MAP_*, MEMBARRIER_CMD_*, MSG_*, NT_*, PKEY_*, SHM_*, and TCP_* constants. * Added manual page for the strace-log-merge command. * Updated lists of ioctl commands from Linux 4.15. * Implemented biarch support for s390x. * Implemented an optional support for symbol demangling in strace -k output (activated by --with-libiberty configure option). * Information about availability of demangling and reliable personality decoding (on architectures with multiple personalities) is now available in strace -V output. * Added decoding of pkey_alloc, pkey_free, and pkey_mprotect syscalls on powerpc and powerpc64. * Enhanced manual page. * Bug fixes * Fixed multi-personality support in cross builds. * Added mq_getsetattr, mq_notify, mq_open, mq_timedreceive, and mq_timedsend syscalls to %desc tracing set. * Fixed path tracing support for mmap syscalls with indirect arguments and for old select syscall. * Fixed decoding of arm-specific (__ARM_NR_*) syscalls. * Fixed open mode flags decoding. * Fixed corner cases in handling of strace -ff -ttt logs by strace-log-merge. * Error counts that exceed one billion are now printed correctly in call summary output. * Fixed call summary header for x32 personality. * Changes of tracee personalities are reported more reliably. * Fixed the case when strace attaches to a tracee being inside exec and its first syscall stop is syscall-exit-stop instead of syscall-enter-stop, which messed up all the syscall state tracking. * Fixed printing of higher 32 bits of the return value for x32 personality. * Portability * A C compiler that supports "for" loop initial declarations is now required. * Inability to configure multiple personality support on architectures where multiple personalities are supported leads to configuration failure during build now. Use --enable-mpers=check to revert to the old behaviour. * Build-time requirement for the mpers support has been lowered from gawk 4 to gawk 3. * Removed incomplete and non-functional support for the CRIS architecture. * Removed incomplete and unused support for IA-32 mode on the IA-64 architecture. Bug: N/A Test: strace -f date Change-Id: I126eec18d7309a89f5a75dcab6498c99bb099836
Diffstat (limited to 'tests-mx32')
-rw-r--r--tests-mx32/Makefile.am45
-rw-r--r--tests-mx32/Makefile.in798
-rw-r--r--tests-mx32/_newselect-P.c2
-rwxr-xr-xtests-mx32/_newselect-P.gen.test4
-rwxr-xr-xtests-mx32/_newselect.gen.test4
-rw-r--r--tests-mx32/accept.c32
-rwxr-xr-xtests-mx32/accept.gen.test4
-rwxr-xr-xtests-mx32/accept4.gen.test4
-rw-r--r--tests-mx32/accept_compat.h25
-rwxr-xr-xtests-mx32/acct.gen.test4
-rwxr-xr-xtests-mx32/adjtimex.gen.test4
-rwxr-xr-xtests-mx32/alarm.gen.test4
-rw-r--r--tests-mx32/attach-p-cmd-cmd.c32
-rw-r--r--tests-mx32/attach-p-cmd-p.c65
-rw-r--r--tests-mx32/attach-p-cmd.h2
-rw-r--r--tests-mx32/bpf.c263
-rwxr-xr-xtests-mx32/bpf.gen.test4
-rwxr-xr-xtests-mx32/btrfs.gen.test3
-rwxr-xr-xtests-mx32/chmod.gen.test4
-rwxr-xr-xtests-mx32/chown.gen.test4
-rwxr-xr-xtests-mx32/chown32.gen.test4
-rwxr-xr-xtests-mx32/chroot.gen.test4
-rwxr-xr-xtests-mx32/clock_adjtime.gen.test4
-rwxr-xr-xtests-mx32/copy_file_range.gen.test4
-rwxr-xr-xtests-mx32/creat.gen.test4
-rwxr-xr-xtests-mx32/delete_module.gen.test4
-rwxr-xr-xtests-mx32/dup.gen.test4
-rwxr-xr-xtests-mx32/dup2.gen.test4
-rwxr-xr-xtests-mx32/dup3.gen.test4
-rwxr-xr-xtests-mx32/epoll_create.gen.test4
-rwxr-xr-xtests-mx32/epoll_create1.gen.test4
-rwxr-xr-xtests-mx32/epoll_ctl.gen.test4
-rwxr-xr-xtests-mx32/epoll_pwait.gen.test4
-rwxr-xr-xtests-mx32/epoll_wait.gen.test4
-rw-r--r--tests-mx32/error_msg.c4
-rwxr-xr-xtests-mx32/execveat.gen.test4
-rwxr-xr-xtests-mx32/fadvise64_64.gen.test3
-rwxr-xr-xtests-mx32/fallocate.gen.test4
-rwxr-xr-xtests-mx32/fanotify_init.gen.test4
-rwxr-xr-xtests-mx32/fanotify_mark.gen.test4
-rwxr-xr-xtests-mx32/fchdir.gen.test4
-rwxr-xr-xtests-mx32/fchmod.gen.test4
-rwxr-xr-xtests-mx32/fchmodat.gen.test4
-rwxr-xr-xtests-mx32/fchown.gen.test4
-rwxr-xr-xtests-mx32/fchown32.gen.test4
-rwxr-xr-xtests-mx32/fchownat.gen.test4
-rwxr-xr-xtests-mx32/fcntl.gen.test4
-rwxr-xr-xtests-mx32/fcntl64.gen.test4
-rwxr-xr-xtests-mx32/fdatasync.gen.test4
-rwxr-xr-xtests-mx32/file_ioctl.gen.test3
-rwxr-xr-xtests-mx32/filtering_fd-syntax.test60
-rwxr-xr-xtests-mx32/filtering_syscall-syntax.test121
-rwxr-xr-xtests-mx32/finit_module.gen.test4
-rwxr-xr-xtests-mx32/flock.gen.test4
-rwxr-xr-xtests-mx32/fstatfs.gen.test4
-rwxr-xr-xtests-mx32/fstatfs64.gen.test4
-rwxr-xr-xtests-mx32/fsync.gen.test4
-rwxr-xr-xtests-mx32/ftruncate.gen.test4
-rwxr-xr-xtests-mx32/ftruncate64.gen.test4
-rw-r--r--tests-mx32/futex.c65
-rwxr-xr-xtests-mx32/futimesat.gen.test4
-rw-r--r--tests-mx32/gen_tests.am74
-rw-r--r--tests-mx32/gen_tests.in36
-rwxr-xr-xtests-mx32/gen_tests.sh14
-rwxr-xr-xtests-mx32/get_regs.test4
-rwxr-xr-xtests-mx32/getcpu.gen.test4
-rw-r--r--tests-mx32/getcwd.c2
-rwxr-xr-xtests-mx32/getcwd.gen.test4
-rwxr-xr-xtests-mx32/getegid.gen.test3
-rwxr-xr-xtests-mx32/getegid32.gen.test3
-rwxr-xr-xtests-mx32/geteuid.gen.test3
-rwxr-xr-xtests-mx32/geteuid32.gen.test3
-rwxr-xr-xtests-mx32/getgid.gen.test3
-rwxr-xr-xtests-mx32/getgid32.gen.test3
-rwxr-xr-xtests-mx32/getgroups.gen.test4
-rwxr-xr-xtests-mx32/getgroups32.gen.test4
-rwxr-xr-xtests-mx32/getpeername.gen.test4
-rwxr-xr-xtests-mx32/getpgrp.gen.test4
-rwxr-xr-xtests-mx32/getpid.gen.test4
-rwxr-xr-xtests-mx32/getppid.gen.test4
-rwxr-xr-xtests-mx32/getresgid.gen.test4
-rwxr-xr-xtests-mx32/getresgid32.gen.test4
-rwxr-xr-xtests-mx32/getresuid.gen.test4
-rwxr-xr-xtests-mx32/getresuid32.gen.test4
-rwxr-xr-xtests-mx32/getrlimit.gen.test4
-rwxr-xr-xtests-mx32/getrusage.gen.test4
-rwxr-xr-xtests-mx32/getsid.gen.test4
-rwxr-xr-xtests-mx32/getsockname.gen.test4
-rwxr-xr-xtests-mx32/gettid.gen.test4
-rwxr-xr-xtests-mx32/getuid32.gen.test3
-rw-r--r--tests-mx32/group_req.c3
-rwxr-xr-xtests-mx32/init_module.gen.test4
-rw-r--r--tests-mx32/inode_of_sockfd.c3
-rwxr-xr-xtests-mx32/inotify_init1.gen.test4
-rwxr-xr-xtests-mx32/ioctl-v.sh11
-rw-r--r--tests-mx32/ioctl.c5
-rwxr-xr-xtests-mx32/ioctl.test2
-rwxr-xr-xtests-mx32/ioctl_block.gen.test3
-rwxr-xr-xtests-mx32/ioctl_dm-v.gen.test4
-rwxr-xr-xtests-mx32/ioctl_dm-v.test11
-rw-r--r--tests-mx32/ioctl_dm.c10
-rwxr-xr-xtests-mx32/ioctl_dm.gen.test4
-rwxr-xr-xtests-mx32/ioctl_dm.test11
-rwxr-xr-xtests-mx32/ioctl_evdev-v.gen.test5
-rwxr-xr-xtests-mx32/ioctl_evdev.gen.test3
-rw-r--r--tests-mx32/ioctl_kvm_run.c242
-rwxr-xr-xtests-mx32/ioctl_kvm_run.gen.test4
-rwxr-xr-xtests-mx32/ioctl_loop-nv.gen.test4
-rwxr-xr-xtests-mx32/ioctl_loop-nv.test11
-rwxr-xr-xtests-mx32/ioctl_loop-v.gen.test5
-rwxr-xr-xtests-mx32/ioctl_loop.gen.test3
-rw-r--r--tests-mx32/ioctl_mtd.c34
-rwxr-xr-xtests-mx32/ioctl_mtd.gen.test3
-rwxr-xr-xtests-mx32/ioctl_nsfs.gen.test4
-rwxr-xr-xtests-mx32/ioctl_nsfs.test11
-rwxr-xr-xtests-mx32/ioctl_rtc-v.gen.test5
-rwxr-xr-xtests-mx32/ioctl_rtc.gen.test3
-rwxr-xr-xtests-mx32/ioctl_scsi.gen.test3
-rwxr-xr-xtests-mx32/ioctl_sg_io_v3.gen.test3
-rwxr-xr-xtests-mx32/ioctl_sg_io_v4.gen.test3
-rwxr-xr-xtests-mx32/ioctl_sock_gifconf.gen.test4
-rwxr-xr-xtests-mx32/ioctl_sock_gifconf.test11
-rwxr-xr-xtests-mx32/ioctl_uffdio.gen.test3
-rwxr-xr-xtests-mx32/ioctl_v4l2.gen.test3
-rwxr-xr-xtests-mx32/ioperm.gen.test4
-rwxr-xr-xtests-mx32/iopl.gen.test4
-rw-r--r--tests-mx32/ip_mreq.c4
-rwxr-xr-xtests-mx32/ipc.gen.test4
-rwxr-xr-xtests-mx32/ipc_msg.gen.test3
-rw-r--r--tests-mx32/ipc_msgbuf.c16
-rwxr-xr-xtests-mx32/ipc_sem.gen.test3
-rw-r--r--tests-mx32/ipc_shm.c59
-rwxr-xr-xtests-mx32/ipc_shm.gen.test3
-rwxr-xr-xtests-mx32/kcmp.gen.test4
-rwxr-xr-xtests-mx32/kexec_file_load.gen.test4
-rwxr-xr-xtests-mx32/kexec_load.gen.test4
-rwxr-xr-xtests-mx32/lchown.gen.test4
-rwxr-xr-xtests-mx32/lchown32.gen.test4
-rwxr-xr-xtests-mx32/link.gen.test4
-rwxr-xr-xtests-mx32/linkat.gen.test4
-rwxr-xr-xtests-mx32/llseek.test2
-rwxr-xr-xtests-mx32/lookup_dcookie.gen.test4
-rwxr-xr-xtests-mx32/madvise.gen.test4
-rwxr-xr-xtests-mx32/mbind.gen.test4
-rw-r--r--tests-mx32/membarrier.c42
-rwxr-xr-xtests-mx32/membarrier.gen.test4
-rw-r--r--tests-mx32/memfd_create.c84
-rwxr-xr-xtests-mx32/memfd_create.gen.test4
-rwxr-xr-xtests-mx32/migrate_pages.gen.test4
-rwxr-xr-xtests-mx32/mincore.gen.test4
-rwxr-xr-xtests-mx32/mkdir.gen.test4
-rwxr-xr-xtests-mx32/mkdirat.gen.test4
-rwxr-xr-xtests-mx32/mknod.gen.test4
-rwxr-xr-xtests-mx32/mknodat.gen.test4
-rwxr-xr-xtests-mx32/mlock2.gen.test4
-rwxr-xr-xtests-mx32/mlockall.gen.test4
-rwxr-xr-xtests-mx32/mmap64.gen.test3
-rw-r--r--tests-mx32/modify_ldt.c137
-rwxr-xr-xtests-mx32/modify_ldt.gen.test4
-rwxr-xr-xtests-mx32/mount.gen.test4
-rwxr-xr-xtests-mx32/move_pages.gen.test4
-rwxr-xr-xtests-mx32/munlockall.gen.test4
-rwxr-xr-xtests-mx32/nanosleep.gen.test4
-rw-r--r--tests-mx32/net-accept-connect.c15
-rw-r--r--tests-mx32/net-y-unix.c8
-rw-r--r--tests-mx32/net-yy-inet.c6
-rw-r--r--tests-mx32/net-yy-unix.c8
-rw-r--r--tests-mx32/net.expected2
-rwxr-xr-xtests-mx32/netlink_audit.gen.test3
-rwxr-xr-xtests-mx32/netlink_crypto.gen.test3
-rwxr-xr-xtests-mx32/netlink_generic.gen.test3
-rwxr-xr-xtests-mx32/netlink_kobject_uevent.gen.test3
-rwxr-xr-xtests-mx32/netlink_netfilter.gen.test3
-rwxr-xr-xtests-mx32/netlink_route.gen.test3
-rwxr-xr-xtests-mx32/netlink_selinux.gen.test3
-rwxr-xr-xtests-mx32/netlink_xfrm.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_acct.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_cthelper.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_ctnetlink.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_ctnetlink_exp.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_cttimeout.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_ipset.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_nft_compat.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_nftables.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_osf.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_queue.gen.test3
-rwxr-xr-xtests-mx32/nfnetlink_ulog.gen.test3
-rwxr-xr-xtests-mx32/nlattr.gen.test3
-rwxr-xr-xtests-mx32/nlattr_br_port_msg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_crypto_user_alg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_dcbmsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_fib_rule_hdr.gen.test3
-rwxr-xr-xtests-mx32/nlattr_ifaddrlblmsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_ifaddrmsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_ifinfomsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_ifla_brport.gen.test3
-rwxr-xr-xtests-mx32/nlattr_ifla_port.gen.test3
-rwxr-xr-xtests-mx32/nlattr_ifla_xdp.gen.test3
-rwxr-xr-xtests-mx32/nlattr_inet_diag_msg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_inet_diag_req_compat.gen.test3
-rwxr-xr-xtests-mx32/nlattr_inet_diag_req_v2.gen.test3
-rwxr-xr-xtests-mx32/nlattr_mdba_mdb_entry.gen.test3
-rwxr-xr-xtests-mx32/nlattr_mdba_router_port.gen.test3
-rwxr-xr-xtests-mx32/nlattr_ndmsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_ndtmsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_netconfmsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_netlink_diag_msg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_nlmsgerr.gen.test3
-rwxr-xr-xtests-mx32/nlattr_packet_diag_msg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_rtgenmsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_rtmsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_smc_diag_msg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_tc_stats.gen.test3
-rwxr-xr-xtests-mx32/nlattr_tca_stab.gen.test3
-rwxr-xr-xtests-mx32/nlattr_tcamsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_tcmsg.gen.test3
-rwxr-xr-xtests-mx32/nlattr_unix_diag_msg.gen.test3
-rw-r--r--tests-mx32/nsyscalls-d.c2
-rwxr-xr-xtests-mx32/nsyscalls-d.test26
-rwxr-xr-xtests-mx32/nsyscalls-nd.test4
-rw-r--r--tests-mx32/nsyscalls.c42
-rw-r--r--tests-mx32/old_mmap-P.c3
-rwxr-xr-xtests-mx32/old_mmap-P.gen.test4
-rw-r--r--tests-mx32/old_mmap-v-none.c1
-rwxr-xr-xtests-mx32/old_mmap-v-none.gen.test4
-rw-r--r--tests-mx32/old_mmap.c56
-rw-r--r--tests-mx32/oldselect-P.c2
-rwxr-xr-xtests-mx32/oldselect-P.gen.test4
-rw-r--r--tests-mx32/oldselect-efault-P.c2
-rwxr-xr-xtests-mx32/oldselect-efault-P.gen.test4
-rw-r--r--tests-mx32/oldselect-efault.c78
-rwxr-xr-xtests-mx32/oldselect-efault.gen.test4
-rw-r--r--tests-mx32/oldselect.c53
-rw-r--r--tests-mx32/oldselect.expected2
-rwxr-xr-xtests-mx32/oldselect.gen.test4
-rwxr-xr-xtests-mx32/oldselect.test11
-rw-r--r--tests-mx32/open.c16
-rw-r--r--tests-mx32/openat.c76
-rwxr-xr-xtests-mx32/openat.gen.test4
-rwxr-xr-xtests-mx32/options-syntax.test53
-rwxr-xr-xtests-mx32/osf_utimes.gen.test4
-rw-r--r--tests-mx32/perf_event_open.c29
-rwxr-xr-xtests-mx32/perf_event_open.gen.test4
-rwxr-xr-xtests-mx32/pipe2.gen.test4
-rw-r--r--tests-mx32/pkey_alloc.c9
-rwxr-xr-xtests-mx32/pkey_alloc.gen.test4
-rwxr-xr-xtests-mx32/pkey_free.gen.test4
-rwxr-xr-xtests-mx32/pkey_mprotect.gen.test4
-rw-r--r--tests-mx32/poll-P.c2
-rwxr-xr-xtests-mx32/poll-P.test17
-rw-r--r--tests-mx32/poll.c54
-rw-r--r--tests-mx32/ppoll-P.c2
-rwxr-xr-xtests-mx32/ppoll-P.gen.test4
-rw-r--r--tests-mx32/ppoll.c60
-rwxr-xr-xtests-mx32/ppoll.gen.test4
-rw-r--r--tests-mx32/prctl-dumpable.c7
-rwxr-xr-xtests-mx32/preadv.gen.test4
-rw-r--r--tests-mx32/print_user_desc.c78
-rw-r--r--tests-mx32/printpath-umovestr.c3
-rwxr-xr-xtests-mx32/prlimit64.gen.test4
-rwxr-xr-xtests-mx32/pselect6.gen.test4
-rw-r--r--tests-mx32/ptrace.c4
-rw-r--r--tests-mx32/pure_executables.am16
-rwxr-xr-xtests-mx32/pure_executables.list16
-rwxr-xr-xtests-mx32/qual_fault-syntax.test19
-rw-r--r--tests-mx32/qual_fault.c4
-rwxr-xr-xtests-mx32/qual_inject-syntax.test20
-rwxr-xr-xtests-mx32/quotactl.gen.test4
-rwxr-xr-xtests-mx32/readahead.gen.test4
-rwxr-xr-xtests-mx32/readdir.gen.test4
-rwxr-xr-xtests-mx32/readlink.gen.test4
-rwxr-xr-xtests-mx32/readlinkat.gen.test4
-rw-r--r--tests-mx32/reboot.c72
-rwxr-xr-xtests-mx32/reboot.gen.test4
-rwxr-xr-xtests-mx32/recvfrom.gen.test4
-rw-r--r--tests-mx32/remap_file_pages.c64
-rwxr-xr-xtests-mx32/remap_file_pages.gen.test4
-rwxr-xr-xtests-mx32/rename.gen.test4
-rwxr-xr-xtests-mx32/renameat.gen.test4
-rwxr-xr-xtests-mx32/renameat2.gen.test4
-rw-r--r--tests-mx32/riscv_flush_icache.c93
-rwxr-xr-xtests-mx32/riscv_flush_icache.gen.test4
-rwxr-xr-xtests-mx32/rmdir.gen.test4
-rwxr-xr-xtests-mx32/rt_sigpending.gen.test4
-rwxr-xr-xtests-mx32/rt_sigprocmask.gen.test4
-rwxr-xr-xtests-mx32/rt_sigqueueinfo.gen.test4
-rwxr-xr-xtests-mx32/rt_sigreturn.gen.test4
-rwxr-xr-xtests-mx32/rt_sigtimedwait.gen.test4
-rwxr-xr-xtests-mx32/rt_tgsigqueueinfo.gen.test4
-rwxr-xr-xtests-mx32/run.sh7
-rw-r--r--tests-mx32/s390_guarded_storage-v.c2
-rwxr-xr-xtests-mx32/s390_guarded_storage-v.gen.test4
-rw-r--r--tests-mx32/s390_guarded_storage.c229
-rwxr-xr-xtests-mx32/s390_guarded_storage.gen.test4
-rw-r--r--tests-mx32/s390_pci_mmio_read_write.c155
-rwxr-xr-xtests-mx32/s390_pci_mmio_read_write.gen.test4
-rw-r--r--tests-mx32/s390_runtime_instr.c99
-rwxr-xr-xtests-mx32/s390_runtime_instr.gen.test4
-rw-r--r--tests-mx32/s390_sthyi-v.c2
-rwxr-xr-xtests-mx32/s390_sthyi-v.gen.test4
-rw-r--r--tests-mx32/s390_sthyi.c786
-rwxr-xr-xtests-mx32/s390_sthyi.gen.test4
-rwxr-xr-xtests-mx32/sched_rr_get_interval.gen.test4
-rwxr-xr-xtests-mx32/sched_yield.gen.test4
-rw-r--r--tests-mx32/select-P.c2
-rwxr-xr-xtests-mx32/select-P.gen.test4
-rwxr-xr-xtests-mx32/select.gen.test4
-rwxr-xr-xtests-mx32/sendfile.gen.test4
-rwxr-xr-xtests-mx32/sendfile64.gen.test4
-rw-r--r--tests-mx32/set_ptracer_any.c14
-rwxr-xr-xtests-mx32/setdomainname.gen.test4
-rwxr-xr-xtests-mx32/setfsgid.gen.test4
-rwxr-xr-xtests-mx32/setfsgid32.gen.test4
-rwxr-xr-xtests-mx32/setfsuid.gen.test4
-rwxr-xr-xtests-mx32/setfsuid32.gen.test4
-rwxr-xr-xtests-mx32/setgid.gen.test4
-rwxr-xr-xtests-mx32/setgid32.gen.test4
-rwxr-xr-xtests-mx32/sethostname.gen.test4
-rwxr-xr-xtests-mx32/setns.gen.test4
-rwxr-xr-xtests-mx32/setregid.gen.test4
-rwxr-xr-xtests-mx32/setregid32.gen.test4
-rwxr-xr-xtests-mx32/setresgid.gen.test4
-rwxr-xr-xtests-mx32/setresgid32.gen.test4
-rwxr-xr-xtests-mx32/setresuid.gen.test4
-rwxr-xr-xtests-mx32/setresuid32.gen.test4
-rwxr-xr-xtests-mx32/setreuid.gen.test4
-rwxr-xr-xtests-mx32/setreuid32.gen.test4
-rwxr-xr-xtests-mx32/setrlimit.gen.test4
-rw-r--r--tests-mx32/setugid.c8
-rwxr-xr-xtests-mx32/setuid.gen.test4
-rwxr-xr-xtests-mx32/setuid32.gen.test4
-rw-r--r--tests-mx32/shmxt.c29
-rwxr-xr-xtests-mx32/shutdown.gen.test4
-rwxr-xr-xtests-mx32/sigaction.gen.test4
-rwxr-xr-xtests-mx32/signalfd4.gen.test4
-rwxr-xr-xtests-mx32/sigpending.gen.test4
-rwxr-xr-xtests-mx32/sigprocmask.gen.test4
-rwxr-xr-xtests-mx32/sigreturn.gen.test4
-rwxr-xr-xtests-mx32/socketcall.gen.test4
-rw-r--r--tests-mx32/sockname.c6
-rw-r--r--tests-mx32/sockopt-sol_netlink.c213
-rwxr-xr-xtests-mx32/sockopt-sol_netlink.gen.test4
-rwxr-xr-xtests-mx32/splice.gen.test4
-rw-r--r--tests-mx32/stack-fcall-0.c2
-rw-r--r--tests-mx32/stack-fcall-1.c2
-rw-r--r--tests-mx32/stack-fcall-2.c2
-rw-r--r--tests-mx32/stack-fcall-3.c1
-rw-r--r--tests-mx32/stack-fcall-mangled-0.c2
-rw-r--r--tests-mx32/stack-fcall-mangled-1.c2
-rw-r--r--tests-mx32/stack-fcall-mangled-2.c2
-rw-r--r--tests-mx32/stack-fcall-mangled-3.c2
-rw-r--r--tests-mx32/stack-fcall-mangled.c2
-rw-r--r--tests-mx32/stack-fcall.c2
-rw-r--r--tests-mx32/stack-fcall.h13
-rwxr-xr-xtests-mx32/statfs.gen.test4
-rwxr-xr-xtests-mx32/statfs64.gen.test4
-rwxr-xr-xtests-mx32/strace-V.test15
-rwxr-xr-xtests-mx32/strace-k-demangle.test7
-rwxr-xr-xtests-mx32/strace-k.test10
-rwxr-xr-xtests-mx32/symlink.gen.test4
-rwxr-xr-xtests-mx32/symlinkat.gen.test4
-rwxr-xr-xtests-mx32/sync.gen.test4
-rwxr-xr-xtests-mx32/sync_file_range.gen.test4
-rwxr-xr-xtests-mx32/sync_file_range2.gen.test4
-rw-r--r--tests-mx32/syntax.sh10
-rwxr-xr-xtests-mx32/sysinfo.gen.test4
-rwxr-xr-xtests-mx32/syslog.gen.test4
-rwxr-xr-xtests-mx32/tee.gen.test4
-rw-r--r--tests-mx32/test_printpath.c3
-rw-r--r--tests-mx32/test_ucopy.c3
-rw-r--r--tests-mx32/tests.h11
-rwxr-xr-xtests-mx32/time.gen.test4
-rwxr-xr-xtests-mx32/timer_create.gen.test4
-rwxr-xr-xtests-mx32/times.gen.test4
-rwxr-xr-xtests-mx32/truncate.gen.test4
-rwxr-xr-xtests-mx32/truncate64.gen.test4
-rwxr-xr-xtests-mx32/ugetrlimit.gen.test4
-rwxr-xr-xtests-mx32/umask.gen.test4
-rw-r--r--tests-mx32/umovestr3.c3
-rwxr-xr-xtests-mx32/unlink.gen.test4
-rwxr-xr-xtests-mx32/unlinkat.gen.test4
-rwxr-xr-xtests-mx32/unshare.gen.test4
-rwxr-xr-xtests-mx32/userfaultfd.gen.test4
-rwxr-xr-xtests-mx32/ustat.gen.test4
-rwxr-xr-xtests-mx32/utime.gen.test4
-rwxr-xr-xtests-mx32/utimensat.gen.test4
-rwxr-xr-xtests-mx32/utimes.gen.test4
-rwxr-xr-xtests-mx32/vhangup.gen.test4
-rwxr-xr-xtests-mx32/vmsplice.gen.test4
-rwxr-xr-xtests-mx32/wait4.gen.test4
-rwxr-xr-xtests-mx32/waitid.gen.test4
-rwxr-xr-xtests-mx32/waitpid.gen.test4
-rw-r--r--tests-mx32/xet_thread_area_x86.c227
-rwxr-xr-xtests-mx32/xet_thread_area_x86.test11
-rw-r--r--tests-mx32/xselect.c449
395 files changed, 5546 insertions, 1233 deletions
diff --git a/tests-mx32/Makefile.am b/tests-mx32/Makefile.am
index c445353c0..fcfbf96a0 100644
--- a/tests-mx32/Makefile.am
+++ b/tests-mx32/Makefile.am
@@ -1,7 +1,7 @@
# Automake input for strace tests.
#
# Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2011-2017 The strace developers.
+# Copyright (c) 2011-2018 The strace developers.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -28,8 +28,12 @@
OS = linux
ARCH = @arch_mx32@
+NATIVE_ARCH = @arch_native@
+SIZEOF_KERNEL_LONG_T = @SIZEOF_KERNEL_LONG_T@
+SIZEOF_LONG = 4
MPERS_NAME = mx32
-ARCH_MFLAGS = -DMPERS_IS_$(MPERS_NAME) -mx32
+MPERS_CC_FLAGS = @cc_flags_mx32@
+ARCH_MFLAGS = -DMPERS_IS_$(MPERS_NAME) $(MPERS_CC_FLAGS)
AM_CFLAGS = $(WARN_CFLAGS)
AM_CPPFLAGS = $(ARCH_MFLAGS) \
-I$(builddir) \
@@ -80,6 +84,7 @@ LDADD = libtests.a
include pure_executables.am
check_PROGRAMS = $(PURE_EXECUTABLES) \
+ _newselect-P \
answer \
attach-f-p \
attach-f-p-cmd \
@@ -117,6 +122,9 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \
netlink_netlink_diag \
netlink_unix_diag \
nsyscalls \
+ nsyscalls-d \
+ oldselect-P \
+ oldselect-efault-P \
pc \
perf_event_open_nonverbose \
perf_event_open_unabbrev \
@@ -137,12 +145,14 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \
scm_rights \
seccomp-filter-v \
seccomp-strict \
+ select-P \
set_ptracer_any \
set_sigblock \
set_sigign \
signal_receive \
sleep \
stack-fcall \
+ stack-fcall-mangled \
threads-execve \
unblock_reset_raise \
unix-pair-send-recv \
@@ -182,10 +192,17 @@ uio_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
stack_fcall_SOURCES = stack-fcall.c \
stack-fcall-0.c stack-fcall-1.c stack-fcall-2.c stack-fcall-3.c
+stack_fcall_mangled_SOURCES = stack-fcall-mangled.c \
+ stack-fcall-mangled-0.c stack-fcall-mangled-1.c \
+ stack-fcall-mangled-2.c stack-fcall-mangled-3.c
+
include gen_tests.am
if USE_LIBUNWIND
LIBUNWIND_TESTS = strace-k.test
+if USE_DEMANGLE
+LIBUNWIND_TESTS += strace-k-demangle.test
+endif
else
LIBUNWIND_TESTS =
endif
@@ -204,11 +221,6 @@ DECODER_TESTS = \
futex.test \
getuid.test \
ioctl.test \
- ioctl_dm-v.test \
- ioctl_dm.test \
- ioctl_loop-nv.test \
- ioctl_nsfs.test \
- ioctl_sock_gifconf.test \
ipc_msgbuf.test \
llseek.test \
lseek.test \
@@ -220,9 +232,11 @@ DECODER_TESTS = \
net.test \
netlink_sock_diag.test \
nsyscalls.test \
- oldselect.test \
+ nsyscalls-d.test \
+ nsyscalls-nd.test \
personality.test \
pipe.test \
+ poll-P.test \
poll.test \
prctl-arg2-intptr.test \
prctl-dumpable.test \
@@ -241,6 +255,7 @@ DECODER_TESTS = \
seccomp-strict.test \
sigaltstack.test \
sun_path.test \
+ xet_thread_area_x86.test \
uio.test \
umount.test \
umount2.test \
@@ -263,6 +278,8 @@ MISC_TESTS = \
detach-sleeping.test \
detach-stopped.test \
filter-unavailable.test \
+ filtering_fd-syntax.test \
+ filtering_syscall-syntax.test \
fflush.test \
get_regs.test \
interactive_block.test \
@@ -309,13 +326,18 @@ XFAIL_TESTS_x32 = int_0x80.gen.test
XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
TEST_LOG_COMPILER = env
-AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) MIPS_ABI=$(MIPS_ABI) $(srcdir)/run.sh
+AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) STRACE_NATIVE_ARCH=$(NATIVE_ARCH) \
+ SIZEOF_KERNEL_LONG_T=$(SIZEOF_KERNEL_LONG_T) \
+ SIZEOF_LONG=$(SIZEOF_LONG) \
+ MIPS_ABI=$(MIPS_ABI) $(srcdir)/run.sh
@VALGRIND_CHECK_RULES@
VALGRIND_FLAGS = --quiet
VALGRIND_SUPPRESSIONS_FILES = $(abs_srcdir)/strace.supp
EXTRA_DIST = \
+ accept_compat.h \
+ attach-p-cmd.h \
caps-abbrev.awk \
caps.awk \
clock.in \
@@ -331,7 +353,6 @@ EXTRA_DIST = \
getresugid.c \
init.sh \
init_delete_module.h \
- ioctl-v.sh \
ipc.sh \
ipc_msgbuf.expected \
ksysent.sed \
@@ -339,8 +360,8 @@ EXTRA_DIST = \
match.awk \
net.expected \
netlink_sock_diag-v.sh \
- oldselect.expected \
pipe.expected \
+ print_user_desc.c \
process_vm_readv_writev.c \
pure_executables.list \
qual_fault-exit_group.expected \
@@ -358,10 +379,12 @@ EXTRA_DIST = \
setugid.c \
sigaltstack.expected \
sockname.c \
+ stack-fcall.h \
strace-C.expected \
strace-E.expected \
strace-T.expected \
strace-ff.expected \
+ strace-k-demangle.test \
strace-k.test \
strace-r.expected \
strace.supp \
diff --git a/tests-mx32/Makefile.in b/tests-mx32/Makefile.in
index 272fa4701..1082a8324 100644
--- a/tests-mx32/Makefile.in
+++ b/tests-mx32/Makefile.in
@@ -17,7 +17,7 @@
# Automake input for strace tests.
#
# Copyright (c) 2011-2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2011-2017 The strace developers.
+# Copyright (c) 2011-2018 The strace developers.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -136,23 +136,25 @@ DIST_COMMON = $(srcdir)/pure_executables.am $(srcdir)/gen_tests.am \
$(srcdir)/../scno.am $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(top_srcdir)/depcomp \
$(top_srcdir)/test-driver
-check_PROGRAMS = $(am__EXEEXT_1) answer$(EXEEXT) attach-f-p$(EXEEXT) \
- attach-f-p-cmd$(EXEEXT) attach-p-cmd-cmd$(EXEEXT) \
- attach-p-cmd-p$(EXEEXT) block_reset_raise_run$(EXEEXT) \
- caps-abbrev$(EXEEXT) check_sigblock$(EXEEXT) \
- check_sigign$(EXEEXT) clone_parent$(EXEEXT) \
- clone_ptrace$(EXEEXT) count-f$(EXEEXT) execve-v$(EXEEXT) \
- execveat-v$(EXEEXT) filter-unavailable$(EXEEXT) \
- fork-f$(EXEEXT) getpid$(EXEEXT) getppid$(EXEEXT) \
- gettid$(EXEEXT) int_0x80$(EXEEXT) ioctl_dm-v$(EXEEXT) \
- ioctl_evdev-v$(EXEEXT) ioctl_loop-nv$(EXEEXT) \
- ioctl_loop-v$(EXEEXT) ioctl_nsfs$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
+check_PROGRAMS = $(am__EXEEXT_1) _newselect-P$(EXEEXT) answer$(EXEEXT) \
+ attach-f-p$(EXEEXT) attach-f-p-cmd$(EXEEXT) \
+ attach-p-cmd-cmd$(EXEEXT) attach-p-cmd-p$(EXEEXT) \
+ block_reset_raise_run$(EXEEXT) caps-abbrev$(EXEEXT) \
+ check_sigblock$(EXEEXT) check_sigign$(EXEEXT) \
+ clone_parent$(EXEEXT) clone_ptrace$(EXEEXT) count-f$(EXEEXT) \
+ execve-v$(EXEEXT) execveat-v$(EXEEXT) \
+ filter-unavailable$(EXEEXT) fork-f$(EXEEXT) getpid$(EXEEXT) \
+ getppid$(EXEEXT) gettid$(EXEEXT) int_0x80$(EXEEXT) \
+ ioctl_dm-v$(EXEEXT) ioctl_evdev-v$(EXEEXT) \
+ ioctl_loop-nv$(EXEEXT) ioctl_loop-v$(EXEEXT) \
+ ioctl_nsfs$(EXEEXT) ioctl_rtc-v$(EXEEXT) \
is_linux_mips_n64$(EXEEXT) ksysent$(EXEEXT) \
list_sigaction_signum$(EXEEXT) mmsg-silent$(EXEEXT) \
mmsg_name-v$(EXEEXT) msg_control-v$(EXEEXT) \
net-accept-connect$(EXEEXT) netlink_inet_diag$(EXEEXT) \
netlink_netlink_diag$(EXEEXT) netlink_unix_diag$(EXEEXT) \
- nsyscalls$(EXEEXT) pc$(EXEEXT) \
+ nsyscalls$(EXEEXT) nsyscalls-d$(EXEEXT) oldselect-P$(EXEEXT) \
+ oldselect-efault-P$(EXEEXT) pc$(EXEEXT) \
perf_event_open_nonverbose$(EXEEXT) \
perf_event_open_unabbrev$(EXEEXT) ppoll-v$(EXEEXT) \
prctl-seccomp-filter-v$(EXEEXT) prctl-seccomp-strict$(EXEEXT) \
@@ -163,19 +165,21 @@ check_PROGRAMS = $(am__EXEEXT_1) answer$(EXEEXT) attach-f-p$(EXEEXT) \
redirect-fds$(EXEEXT) restart_syscall$(EXEEXT) \
run_expect_termsig$(EXEEXT) scm_rights$(EXEEXT) \
seccomp-filter-v$(EXEEXT) seccomp-strict$(EXEEXT) \
- set_ptracer_any$(EXEEXT) set_sigblock$(EXEEXT) \
- set_sigign$(EXEEXT) signal_receive$(EXEEXT) sleep$(EXEEXT) \
- stack-fcall$(EXEEXT) threads-execve$(EXEEXT) \
+ select-P$(EXEEXT) set_ptracer_any$(EXEEXT) \
+ set_sigblock$(EXEEXT) set_sigign$(EXEEXT) \
+ signal_receive$(EXEEXT) sleep$(EXEEXT) stack-fcall$(EXEEXT) \
+ stack-fcall-mangled$(EXEEXT) threads-execve$(EXEEXT) \
unblock_reset_raise$(EXEEXT) unix-pair-send-recv$(EXEEXT) \
unix-pair-sendto-recvfrom$(EXEEXT) vfork-f$(EXEEXT) \
wait4-v$(EXEEXT) waitid-v$(EXEEXT) zeroargc$(EXEEXT)
+@USE_DEMANGLE_TRUE@@USE_LIBUNWIND_TRUE@am__append_1 = strace-k-demangle.test
TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(am__EXEEXT_2)
subdir = tests-mx32
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_code_coverage.m4 \
$(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
$(top_srcdir)/m4/ax_valgrind_check.m4 \
- $(top_srcdir)/m4/mpers.m4 $(top_srcdir)/m4/st_bpf.m4 \
+ $(top_srcdir)/m4/mpers.m4 \
$(top_srcdir)/m4/st_save_restore_var.m4 \
$(top_srcdir)/m4/st_warn_cflags.m4 \
$(top_srcdir)/m4/warnings.m4 $(top_srcdir)/configure.ac
@@ -250,8 +254,9 @@ am__EXEEXT_1 = _newselect$(EXEEXT) accept$(EXEEXT) accept4$(EXEEXT) \
getxxid$(EXEEXT) group_req$(EXEEXT) inet-cmsg$(EXEEXT) \
init_module$(EXEEXT) inotify$(EXEEXT) inotify_init1$(EXEEXT) \
ioctl$(EXEEXT) ioctl_block$(EXEEXT) ioctl_dm$(EXEEXT) \
- ioctl_evdev$(EXEEXT) ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) \
- ioctl_rtc$(EXEEXT) ioctl_scsi$(EXEEXT) ioctl_sg_io_v3$(EXEEXT) \
+ ioctl_evdev$(EXEEXT) ioctl_kvm_run$(EXEEXT) \
+ ioctl_loop$(EXEEXT) ioctl_mtd$(EXEEXT) ioctl_rtc$(EXEEXT) \
+ ioctl_scsi$(EXEEXT) ioctl_sg_io_v3$(EXEEXT) \
ioctl_sg_io_v4$(EXEEXT) ioctl_sock_gifconf$(EXEEXT) \
ioctl_uffdio$(EXEEXT) ioctl_v4l2$(EXEEXT) ioperm$(EXEEXT) \
iopl$(EXEEXT) ioprio$(EXEEXT) ip_mreq$(EXEEXT) ipc$(EXEEXT) \
@@ -266,12 +271,12 @@ am__EXEEXT_1 = _newselect$(EXEEXT) accept$(EXEEXT) accept4$(EXEEXT) \
mkdir$(EXEEXT) mkdirat$(EXEEXT) mknod$(EXEEXT) \
mknodat$(EXEEXT) mlock$(EXEEXT) mlock2$(EXEEXT) \
mlockall$(EXEEXT) mmap$(EXEEXT) mmap64$(EXEEXT) mmsg$(EXEEXT) \
- mmsg_name$(EXEEXT) mount$(EXEEXT) move_pages$(EXEEXT) \
- mq$(EXEEXT) mq_sendrecv$(EXEEXT) mq_sendrecv-read$(EXEEXT) \
- mq_sendrecv-write$(EXEEXT) msg_control$(EXEEXT) \
- msg_name$(EXEEXT) munlockall$(EXEEXT) nanosleep$(EXEEXT) \
- net-icmp_filter$(EXEEXT) net-sockaddr$(EXEEXT) \
- net-y-unix$(EXEEXT) net-yy-inet$(EXEEXT) \
+ mmsg_name$(EXEEXT) modify_ldt$(EXEEXT) mount$(EXEEXT) \
+ move_pages$(EXEEXT) mq$(EXEEXT) mq_sendrecv$(EXEEXT) \
+ mq_sendrecv-read$(EXEEXT) mq_sendrecv-write$(EXEEXT) \
+ msg_control$(EXEEXT) msg_name$(EXEEXT) munlockall$(EXEEXT) \
+ nanosleep$(EXEEXT) net-icmp_filter$(EXEEXT) \
+ net-sockaddr$(EXEEXT) net-y-unix$(EXEEXT) net-yy-inet$(EXEEXT) \
net-yy-netlink$(EXEEXT) net-yy-unix$(EXEEXT) \
netlink_audit$(EXEEXT) netlink_crypto$(EXEEXT) \
netlink_generic$(EXEEXT) netlink_kobject_uevent$(EXEEXT) \
@@ -301,16 +306,18 @@ am__EXEEXT_1 = _newselect$(EXEEXT) accept$(EXEEXT) accept4$(EXEEXT) \
nlattr_tc_stats$(EXEEXT) nlattr_tca_stab$(EXEEXT) \
nlattr_tcamsg$(EXEEXT) nlattr_tcmsg$(EXEEXT) \
nlattr_unix_diag_msg$(EXEEXT) old_mmap$(EXEEXT) \
- oldfstat$(EXEEXT) oldlstat$(EXEEXT) oldselect$(EXEEXT) \
+ old_mmap-P$(EXEEXT) old_mmap-v-none$(EXEEXT) oldfstat$(EXEEXT) \
+ oldlstat$(EXEEXT) oldselect$(EXEEXT) oldselect-efault$(EXEEXT) \
oldstat$(EXEEXT) open$(EXEEXT) openat$(EXEEXT) \
osf_utimes$(EXEEXT) pause$(EXEEXT) perf_event_open$(EXEEXT) \
personality$(EXEEXT) pipe$(EXEEXT) pipe2$(EXEEXT) \
pkey_alloc$(EXEEXT) pkey_free$(EXEEXT) pkey_mprotect$(EXEEXT) \
- poll$(EXEEXT) ppoll$(EXEEXT) prctl-arg2-intptr$(EXEEXT) \
- prctl-dumpable$(EXEEXT) prctl-name$(EXEEXT) \
- prctl-no-args$(EXEEXT) prctl-pdeathsig$(EXEEXT) \
- prctl-securebits$(EXEEXT) prctl-tid_address$(EXEEXT) \
- prctl-tsc$(EXEEXT) pread64-pwrite64$(EXEEXT) preadv$(EXEEXT) \
+ poll$(EXEEXT) poll-P$(EXEEXT) ppoll$(EXEEXT) ppoll-P$(EXEEXT) \
+ prctl-arg2-intptr$(EXEEXT) prctl-dumpable$(EXEEXT) \
+ prctl-name$(EXEEXT) prctl-no-args$(EXEEXT) \
+ prctl-pdeathsig$(EXEEXT) prctl-securebits$(EXEEXT) \
+ prctl-tid_address$(EXEEXT) prctl-tsc$(EXEEXT) \
+ pread64-pwrite64$(EXEEXT) preadv$(EXEEXT) \
preadv-pwritev$(EXEEXT) preadv2-pwritev2$(EXEEXT) \
printpath-umovestr$(EXEEXT) \
printpath-umovestr-peekdata$(EXEEXT) \
@@ -324,11 +331,15 @@ am__EXEEXT_1 = _newselect$(EXEEXT) accept$(EXEEXT) accept4$(EXEEXT) \
readlinkat$(EXEEXT) readv$(EXEEXT) reboot$(EXEEXT) \
recvfrom$(EXEEXT) recvmmsg-timeout$(EXEEXT) recvmsg$(EXEEXT) \
remap_file_pages$(EXEEXT) rename$(EXEEXT) renameat$(EXEEXT) \
- renameat2$(EXEEXT) request_key$(EXEEXT) rmdir$(EXEEXT) \
+ renameat2$(EXEEXT) request_key$(EXEEXT) \
+ riscv_flush_icache$(EXEEXT) rmdir$(EXEEXT) \
rt_sigaction$(EXEEXT) rt_sigpending$(EXEEXT) \
rt_sigprocmask$(EXEEXT) rt_sigqueueinfo$(EXEEXT) \
rt_sigreturn$(EXEEXT) rt_sigsuspend$(EXEEXT) \
rt_sigtimedwait$(EXEEXT) rt_tgsigqueueinfo$(EXEEXT) \
+ s390_guarded_storage$(EXEEXT) s390_guarded_storage-v$(EXEEXT) \
+ s390_pci_mmio_read_write$(EXEEXT) s390_runtime_instr$(EXEEXT) \
+ s390_sthyi$(EXEEXT) s390_sthyi-v$(EXEEXT) \
sched_get_priority_mxx$(EXEEXT) sched_rr_get_interval$(EXEEXT) \
sched_xetaffinity$(EXEEXT) sched_xetattr$(EXEEXT) \
sched_xetparam$(EXEEXT) sched_xetscheduler$(EXEEXT) \
@@ -348,30 +359,34 @@ am__EXEEXT_1 = _newselect$(EXEEXT) accept$(EXEEXT) accept4$(EXEEXT) \
signalfd4$(EXEEXT) sigpending$(EXEEXT) sigprocmask$(EXEEXT) \
sigreturn$(EXEEXT) sigsuspend$(EXEEXT) so_linger$(EXEEXT) \
so_peercred$(EXEEXT) sock_filter-v$(EXEEXT) \
- socketcall$(EXEEXT) splice$(EXEEXT) stat$(EXEEXT) \
- stat64$(EXEEXT) statfs$(EXEEXT) statfs64$(EXEEXT) \
- statx$(EXEEXT) swap$(EXEEXT) sxetmask$(EXEEXT) \
- symlink$(EXEEXT) symlinkat$(EXEEXT) sync$(EXEEXT) \
- sync_file_range$(EXEEXT) sync_file_range2$(EXEEXT) \
- sysinfo$(EXEEXT) syslog$(EXEEXT) tee$(EXEEXT) time$(EXEEXT) \
- timer_create$(EXEEXT) timer_xettime$(EXEEXT) \
- timerfd_xettime$(EXEEXT) times$(EXEEXT) times-fail$(EXEEXT) \
- truncate$(EXEEXT) truncate64$(EXEEXT) ugetrlimit$(EXEEXT) \
- uio$(EXEEXT) umask$(EXEEXT) umount$(EXEEXT) umount2$(EXEEXT) \
- umoven-illptr$(EXEEXT) umovestr$(EXEEXT) \
- umovestr-illptr$(EXEEXT) umovestr2$(EXEEXT) umovestr3$(EXEEXT) \
- uname$(EXEEXT) unlink$(EXEEXT) unlinkat$(EXEEXT) \
- unshare$(EXEEXT) userfaultfd$(EXEEXT) ustat$(EXEEXT) \
- utime$(EXEEXT) utimensat$(EXEEXT) utimes$(EXEEXT) \
- vhangup$(EXEEXT) vmsplice$(EXEEXT) wait4$(EXEEXT) \
- waitid$(EXEEXT) waitpid$(EXEEXT) xattr$(EXEEXT) \
+ socketcall$(EXEEXT) sockopt-sol_netlink$(EXEEXT) \
+ splice$(EXEEXT) stat$(EXEEXT) stat64$(EXEEXT) statfs$(EXEEXT) \
+ statfs64$(EXEEXT) statx$(EXEEXT) swap$(EXEEXT) \
+ sxetmask$(EXEEXT) symlink$(EXEEXT) symlinkat$(EXEEXT) \
+ sync$(EXEEXT) sync_file_range$(EXEEXT) \
+ sync_file_range2$(EXEEXT) sysinfo$(EXEEXT) syslog$(EXEEXT) \
+ tee$(EXEEXT) time$(EXEEXT) timer_create$(EXEEXT) \
+ timer_xettime$(EXEEXT) timerfd_xettime$(EXEEXT) times$(EXEEXT) \
+ times-fail$(EXEEXT) truncate$(EXEEXT) truncate64$(EXEEXT) \
+ ugetrlimit$(EXEEXT) uio$(EXEEXT) umask$(EXEEXT) \
+ umount$(EXEEXT) umount2$(EXEEXT) umoven-illptr$(EXEEXT) \
+ umovestr$(EXEEXT) umovestr-illptr$(EXEEXT) umovestr2$(EXEEXT) \
+ umovestr3$(EXEEXT) uname$(EXEEXT) unlink$(EXEEXT) \
+ unlinkat$(EXEEXT) unshare$(EXEEXT) userfaultfd$(EXEEXT) \
+ ustat$(EXEEXT) utime$(EXEEXT) utimensat$(EXEEXT) \
+ utimes$(EXEEXT) vhangup$(EXEEXT) vmsplice$(EXEEXT) \
+ wait4$(EXEEXT) waitid$(EXEEXT) waitpid$(EXEEXT) xattr$(EXEEXT) \
xattr-strings$(EXEEXT) xet_robust_list$(EXEEXT) \
- xetitimer$(EXEEXT) xetpgid$(EXEEXT) xetpriority$(EXEEXT) \
- xettimeofday$(EXEEXT)
+ xet_thread_area_x86$(EXEEXT) xetitimer$(EXEEXT) \
+ xetpgid$(EXEEXT) xetpriority$(EXEEXT) xettimeofday$(EXEEXT)
_newselect_SOURCES = _newselect.c
_newselect_OBJECTS = _newselect.$(OBJEXT)
_newselect_LDADD = $(LDADD)
_newselect_DEPENDENCIES = libtests.a
+_newselect_P_SOURCES = _newselect-P.c
+_newselect_P_OBJECTS = _newselect-P.$(OBJEXT)
+_newselect_P_LDADD = $(LDADD)
+_newselect_P_DEPENDENCIES = libtests.a
accept_SOURCES = accept.c
accept_OBJECTS = accept.$(OBJEXT)
accept_LDADD = $(LDADD)
@@ -860,6 +875,10 @@ ioctl_evdev_v_SOURCES = ioctl_evdev-v.c
ioctl_evdev_v_OBJECTS = ioctl_evdev-v.$(OBJEXT)
ioctl_evdev_v_LDADD = $(LDADD)
ioctl_evdev_v_DEPENDENCIES = libtests.a
+ioctl_kvm_run_SOURCES = ioctl_kvm_run.c
+ioctl_kvm_run_OBJECTS = ioctl_kvm_run.$(OBJEXT)
+ioctl_kvm_run_LDADD = $(LDADD)
+ioctl_kvm_run_DEPENDENCIES = libtests.a
ioctl_loop_SOURCES = ioctl_loop.c
ioctl_loop_OBJECTS = ioctl_loop.$(OBJEXT)
ioctl_loop_LDADD = $(LDADD)
@@ -1096,6 +1115,10 @@ mmsg_name_v_SOURCES = mmsg_name-v.c
mmsg_name_v_OBJECTS = mmsg_name-v.$(OBJEXT)
mmsg_name_v_LDADD = $(LDADD)
mmsg_name_v_DEPENDENCIES = libtests.a
+modify_ldt_SOURCES = modify_ldt.c
+modify_ldt_OBJECTS = modify_ldt.$(OBJEXT)
+modify_ldt_LDADD = $(LDADD)
+modify_ldt_DEPENDENCIES = libtests.a
mount_SOURCES = mount.c
mount_OBJECTS = mount.$(OBJEXT)
mount_LDADD = $(LDADD)
@@ -1389,10 +1412,22 @@ nsyscalls_SOURCES = nsyscalls.c
nsyscalls_OBJECTS = nsyscalls.$(OBJEXT)
nsyscalls_LDADD = $(LDADD)
nsyscalls_DEPENDENCIES = libtests.a
+nsyscalls_d_SOURCES = nsyscalls-d.c
+nsyscalls_d_OBJECTS = nsyscalls-d.$(OBJEXT)
+nsyscalls_d_LDADD = $(LDADD)
+nsyscalls_d_DEPENDENCIES = libtests.a
old_mmap_SOURCES = old_mmap.c
old_mmap_OBJECTS = old_mmap.$(OBJEXT)
old_mmap_LDADD = $(LDADD)
old_mmap_DEPENDENCIES = libtests.a
+old_mmap_P_SOURCES = old_mmap-P.c
+old_mmap_P_OBJECTS = old_mmap-P.$(OBJEXT)
+old_mmap_P_LDADD = $(LDADD)
+old_mmap_P_DEPENDENCIES = libtests.a
+old_mmap_v_none_SOURCES = old_mmap-v-none.c
+old_mmap_v_none_OBJECTS = old_mmap-v-none.$(OBJEXT)
+old_mmap_v_none_LDADD = $(LDADD)
+old_mmap_v_none_DEPENDENCIES = libtests.a
oldfstat_SOURCES = oldfstat.c
oldfstat_OBJECTS = oldfstat.$(OBJEXT)
oldfstat_LDADD = $(LDADD)
@@ -1405,6 +1440,18 @@ oldselect_SOURCES = oldselect.c
oldselect_OBJECTS = oldselect.$(OBJEXT)
oldselect_LDADD = $(LDADD)
oldselect_DEPENDENCIES = libtests.a
+oldselect_P_SOURCES = oldselect-P.c
+oldselect_P_OBJECTS = oldselect-P.$(OBJEXT)
+oldselect_P_LDADD = $(LDADD)
+oldselect_P_DEPENDENCIES = libtests.a
+oldselect_efault_SOURCES = oldselect-efault.c
+oldselect_efault_OBJECTS = oldselect-efault.$(OBJEXT)
+oldselect_efault_LDADD = $(LDADD)
+oldselect_efault_DEPENDENCIES = libtests.a
+oldselect_efault_P_SOURCES = oldselect-efault-P.c
+oldselect_efault_P_OBJECTS = oldselect-efault-P.$(OBJEXT)
+oldselect_efault_P_LDADD = $(LDADD)
+oldselect_efault_P_DEPENDENCIES = libtests.a
oldstat_SOURCES = oldstat.c
oldstat_OBJECTS = oldstat.$(OBJEXT)
oldstat_LDADD = $(LDADD)
@@ -1470,10 +1517,18 @@ poll_SOURCES = poll.c
poll_OBJECTS = poll.$(OBJEXT)
poll_LDADD = $(LDADD)
poll_DEPENDENCIES = libtests.a
+poll_P_SOURCES = poll-P.c
+poll_P_OBJECTS = poll-P.$(OBJEXT)
+poll_P_LDADD = $(LDADD)
+poll_P_DEPENDENCIES = libtests.a
ppoll_SOURCES = ppoll.c
ppoll_OBJECTS = ppoll.$(OBJEXT)
ppoll_LDADD = $(LDADD)
ppoll_DEPENDENCIES = libtests.a
+ppoll_P_SOURCES = ppoll-P.c
+ppoll_P_OBJECTS = ppoll-P.$(OBJEXT)
+ppoll_P_LDADD = $(LDADD)
+ppoll_P_DEPENDENCIES = libtests.a
ppoll_v_SOURCES = ppoll-v.c
ppoll_v_OBJECTS = ppoll-v.$(OBJEXT)
ppoll_v_LDADD = $(LDADD)
@@ -1700,6 +1755,10 @@ restart_syscall_SOURCES = restart_syscall.c
restart_syscall_OBJECTS = restart_syscall.$(OBJEXT)
restart_syscall_LDADD = $(LDADD)
restart_syscall_DEPENDENCIES = libtests.a
+riscv_flush_icache_SOURCES = riscv_flush_icache.c
+riscv_flush_icache_OBJECTS = riscv_flush_icache.$(OBJEXT)
+riscv_flush_icache_LDADD = $(LDADD)
+riscv_flush_icache_DEPENDENCIES = libtests.a
rmdir_SOURCES = rmdir.c
rmdir_OBJECTS = rmdir.$(OBJEXT)
rmdir_LDADD = $(LDADD)
@@ -1740,6 +1799,30 @@ run_expect_termsig_SOURCES = run_expect_termsig.c
run_expect_termsig_OBJECTS = run_expect_termsig.$(OBJEXT)
run_expect_termsig_LDADD = $(LDADD)
run_expect_termsig_DEPENDENCIES = libtests.a
+s390_guarded_storage_SOURCES = s390_guarded_storage.c
+s390_guarded_storage_OBJECTS = s390_guarded_storage.$(OBJEXT)
+s390_guarded_storage_LDADD = $(LDADD)
+s390_guarded_storage_DEPENDENCIES = libtests.a
+s390_guarded_storage_v_SOURCES = s390_guarded_storage-v.c
+s390_guarded_storage_v_OBJECTS = s390_guarded_storage-v.$(OBJEXT)
+s390_guarded_storage_v_LDADD = $(LDADD)
+s390_guarded_storage_v_DEPENDENCIES = libtests.a
+s390_pci_mmio_read_write_SOURCES = s390_pci_mmio_read_write.c
+s390_pci_mmio_read_write_OBJECTS = s390_pci_mmio_read_write.$(OBJEXT)
+s390_pci_mmio_read_write_LDADD = $(LDADD)
+s390_pci_mmio_read_write_DEPENDENCIES = libtests.a
+s390_runtime_instr_SOURCES = s390_runtime_instr.c
+s390_runtime_instr_OBJECTS = s390_runtime_instr.$(OBJEXT)
+s390_runtime_instr_LDADD = $(LDADD)
+s390_runtime_instr_DEPENDENCIES = libtests.a
+s390_sthyi_SOURCES = s390_sthyi.c
+s390_sthyi_OBJECTS = s390_sthyi.$(OBJEXT)
+s390_sthyi_LDADD = $(LDADD)
+s390_sthyi_DEPENDENCIES = libtests.a
+s390_sthyi_v_SOURCES = s390_sthyi-v.c
+s390_sthyi_v_OBJECTS = s390_sthyi-v.$(OBJEXT)
+s390_sthyi_v_LDADD = $(LDADD)
+s390_sthyi_v_DEPENDENCIES = libtests.a
sched_get_priority_mxx_SOURCES = sched_get_priority_mxx.c
sched_get_priority_mxx_OBJECTS = sched_get_priority_mxx.$(OBJEXT)
sched_get_priority_mxx_LDADD = $(LDADD)
@@ -1792,6 +1875,10 @@ select_SOURCES = select.c
select_OBJECTS = select.$(OBJEXT)
select_LDADD = $(LDADD)
select_DEPENDENCIES = libtests.a
+select_P_SOURCES = select-P.c
+select_P_OBJECTS = select-P.$(OBJEXT)
+select_P_LDADD = $(LDADD)
+select_P_DEPENDENCIES = libtests.a
semop_SOURCES = semop.c
semop_OBJECTS = semop.$(OBJEXT)
semop_LDADD = $(LDADD)
@@ -1976,6 +2063,10 @@ socketcall_SOURCES = socketcall.c
socketcall_OBJECTS = socketcall.$(OBJEXT)
socketcall_LDADD = $(LDADD)
socketcall_DEPENDENCIES = libtests.a
+sockopt_sol_netlink_SOURCES = sockopt-sol_netlink.c
+sockopt_sol_netlink_OBJECTS = sockopt-sol_netlink.$(OBJEXT)
+sockopt_sol_netlink_LDADD = $(LDADD)
+sockopt_sol_netlink_DEPENDENCIES = libtests.a
splice_SOURCES = splice.c
splice_OBJECTS = splice.$(OBJEXT)
splice_LDADD = $(LDADD)
@@ -1986,6 +2077,14 @@ am_stack_fcall_OBJECTS = stack-fcall.$(OBJEXT) stack-fcall-0.$(OBJEXT) \
stack_fcall_OBJECTS = $(am_stack_fcall_OBJECTS)
stack_fcall_LDADD = $(LDADD)
stack_fcall_DEPENDENCIES = libtests.a
+am_stack_fcall_mangled_OBJECTS = stack-fcall-mangled.$(OBJEXT) \
+ stack-fcall-mangled-0.$(OBJEXT) \
+ stack-fcall-mangled-1.$(OBJEXT) \
+ stack-fcall-mangled-2.$(OBJEXT) \
+ stack-fcall-mangled-3.$(OBJEXT)
+stack_fcall_mangled_OBJECTS = $(am_stack_fcall_mangled_OBJECTS)
+stack_fcall_mangled_LDADD = $(LDADD)
+stack_fcall_mangled_DEPENDENCIES = libtests.a
stat_SOURCES = stat.c
stat_OBJECTS = stat.$(OBJEXT)
stat_LDADD = $(LDADD)
@@ -2213,6 +2312,10 @@ xet_robust_list_SOURCES = xet_robust_list.c
xet_robust_list_OBJECTS = xet_robust_list.$(OBJEXT)
xet_robust_list_LDADD = $(LDADD)
xet_robust_list_DEPENDENCIES = libtests.a
+xet_thread_area_x86_SOURCES = xet_thread_area_x86.c
+xet_thread_area_x86_OBJECTS = xet_thread_area_x86.$(OBJEXT)
+xet_thread_area_x86_LDADD = $(LDADD)
+xet_thread_area_x86_DEPENDENCIES = libtests.a
xetitimer_SOURCES = xetitimer.c
xetitimer_OBJECTS = xetitimer.$(OBJEXT)
xetitimer_LDADD = $(LDADD)
@@ -2265,9 +2368,9 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
- access.c acct.c add_key.c adjtimex.c aio.c alarm.c answer.c \
- attach-f-p.c attach-f-p-cmd.c attach-p-cmd-cmd.c \
+SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.c accept.c \
+ accept4.c access.c acct.c add_key.c adjtimex.c aio.c alarm.c \
+ answer.c attach-f-p.c attach-f-p-cmd.c attach-p-cmd-cmd.c \
attach-p-cmd-p.c block_reset_raise_run.c bpf.c bpf-v.c brk.c \
btrfs.c caps.c caps-abbrev.c check_sigblock.c check_sigign.c \
chmod.c chown.c chown32.c chroot.c clock_adjtime.c \
@@ -2291,9 +2394,9 @@ SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
gettid.c getuid.c getuid32.c getxxid.c group_req.c inet-cmsg.c \
init_module.c inotify.c inotify_init1.c int_0x80.c ioctl.c \
ioctl_block.c ioctl_dm.c ioctl_dm-v.c ioctl_evdev.c \
- ioctl_evdev-v.c ioctl_loop.c ioctl_loop-nv.c ioctl_loop-v.c \
- ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c ioctl_rtc-v.c \
- ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
+ ioctl_evdev-v.c ioctl_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
+ ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+ ioctl_rtc-v.c ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
ioctl_sock_gifconf.c ioctl_uffdio.c ioctl_v4l2.c ioperm.c \
iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msgbuf.c \
ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c kcmp-y.c \
@@ -2303,13 +2406,13 @@ SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
- mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
- mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
- msg_control-v.c msg_name.c munlockall.c nanosleep.c \
- net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
- net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
- netlink_audit.c netlink_crypto.c netlink_generic.c \
- netlink_inet_diag.c netlink_kobject_uevent.c \
+ mmsg_name-v.c modify_ldt.c mount.c move_pages.c mq.c \
+ mq_sendrecv.c mq_sendrecv-read.c mq_sendrecv-write.c \
+ msg_control.c msg_control-v.c msg_name.c munlockall.c \
+ nanosleep.c net-accept-connect.c net-icmp_filter.c \
+ net-sockaddr.c net-y-unix.c net-yy-inet.c net-yy-netlink.c \
+ net-yy-unix.c netlink_audit.c netlink_crypto.c \
+ netlink_generic.c netlink_inet_diag.c netlink_kobject_uevent.c \
netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
netlink_route.c netlink_selinux.c netlink_sock_diag.c \
netlink_unix_diag.c netlink_xfrm.c newfstatat.c \
@@ -2328,13 +2431,16 @@ SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
nlattr_packet_diag_msg.c nlattr_rtgenmsg.c nlattr_rtmsg.c \
nlattr_smc_diag_msg.c nlattr_tc_stats.c nlattr_tca_stab.c \
nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
- nsyscalls.c old_mmap.c oldfstat.c oldlstat.c oldselect.c \
+ nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
+ old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
+ oldselect-P.c oldselect-efault.c oldselect-efault-P.c \
oldstat.c open.c openat.c osf_utimes.c pause.c pc.c \
perf_event_open.c perf_event_open_nonverbose.c \
perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
- pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
- ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
- prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+ pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
+ ppoll.c ppoll-P.c ppoll-v.c prctl-arg2-intptr.c \
+ prctl-dumpable.c prctl-name.c prctl-no-args.c \
+ prctl-pdeathsig.c prctl-seccomp-filter-v.c \
prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
@@ -2348,28 +2454,32 @@ SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
readdir.c readlink.c readlinkat.c readv.c reboot.c recvfrom.c \
recvmmsg-timeout.c recvmsg.c redirect-fds.c remap_file_pages.c \
rename.c renameat.c renameat2.c request_key.c \
- restart_syscall.c rmdir.c rt_sigaction.c rt_sigpending.c \
- rt_sigprocmask.c rt_sigqueueinfo.c rt_sigreturn.c \
- rt_sigsuspend.c rt_sigtimedwait.c rt_tgsigqueueinfo.c \
- run_expect_termsig.c sched_get_priority_mxx.c \
+ restart_syscall.c riscv_flush_icache.c rmdir.c rt_sigaction.c \
+ rt_sigpending.c rt_sigprocmask.c rt_sigqueueinfo.c \
+ rt_sigreturn.c rt_sigsuspend.c rt_sigtimedwait.c \
+ rt_tgsigqueueinfo.c run_expect_termsig.c \
+ s390_guarded_storage.c s390_guarded_storage-v.c \
+ s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
+ s390_sthyi-v.c sched_get_priority_mxx.c \
sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
sched_xetparam.c sched_xetscheduler.c sched_yield.c \
scm_rights.c seccomp-filter.c seccomp-filter-v.c \
- seccomp-strict.c seccomp_get_action_avail.c select.c semop.c \
- sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
- set_sigblock.c set_sigign.c setdomainname.c setfsgid.c \
- setfsgid32.c setfsuid.c setfsuid32.c setgid.c setgid32.c \
- setgroups.c setgroups32.c sethostname.c setns.c setregid.c \
- setregid32.c setresgid.c setresgid32.c setresuid.c \
+ seccomp-strict.c seccomp_get_action_avail.c select.c \
+ select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
+ set_ptracer_any.c set_sigblock.c set_sigign.c setdomainname.c \
+ setfsgid.c setfsgid32.c setfsuid.c setfsuid32.c setgid.c \
+ setgid32.c setgroups.c setgroups32.c sethostname.c setns.c \
+ setregid.c setregid32.c setresgid.c setresgid32.c setresuid.c \
setresuid32.c setreuid.c setreuid32.c setrlimit.c setuid.c \
setuid32.c shmxt.c shutdown.c sigaction.c sigaltstack.c \
siginfo.c signal.c signal_receive.c signalfd4.c sigpending.c \
sigprocmask.c sigreturn.c sigsuspend.c sleep.c so_linger.c \
- so_peercred.c sock_filter-v.c socketcall.c splice.c \
- $(stack_fcall_SOURCES) stat.c stat64.c statfs.c statfs64.c \
- statx.c swap.c sxetmask.c symlink.c symlinkat.c sync.c \
- sync_file_range.c sync_file_range2.c sysinfo.c syslog.c tee.c \
- threads-execve.c time.c timer_create.c timer_xettime.c \
+ so_peercred.c sock_filter-v.c socketcall.c \
+ sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
+ $(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
+ statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
+ sync.c sync_file_range.c sync_file_range2.c sysinfo.c syslog.c \
+ tee.c threads-execve.c time.c timer_create.c timer_xettime.c \
timerfd_xettime.c times.c times-fail.c truncate.c truncate64.c \
ugetrlimit.c uio.c umask.c umount.c umount2.c umoven-illptr.c \
umovestr.c umovestr-illptr.c umovestr2.c umovestr3.c uname.c \
@@ -2378,16 +2488,17 @@ SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
userfaultfd.c ustat.c utime.c utimensat.c utimes.c vfork-f.c \
vhangup.c vmsplice.c wait4.c wait4-v.c waitid.c waitid-v.c \
waitpid.c xattr.c xattr-strings.c xet_robust_list.c \
- xetitimer.c xetpgid.c xetpriority.c xettimeofday.c zeroargc.c
-DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
- access.c acct.c add_key.c adjtimex.c aio.c alarm.c answer.c \
- attach-f-p.c attach-f-p-cmd.c attach-p-cmd-cmd.c \
- attach-p-cmd-p.c block_reset_raise_run.c bpf.c bpf-v.c brk.c \
- btrfs.c caps.c caps-abbrev.c check_sigblock.c check_sigign.c \
- chmod.c chown.c chown32.c chroot.c clock_adjtime.c \
- clock_nanosleep.c clock_xettime.c clone_parent.c \
- clone_ptrace.c copy_file_range.c count-f.c creat.c \
- delete_module.c dup.c dup2.c dup3.c epoll_create.c \
+ xet_thread_area_x86.c xetitimer.c xetpgid.c xetpriority.c \
+ xettimeofday.c zeroargc.c
+DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c _newselect-P.c \
+ accept.c accept4.c access.c acct.c add_key.c adjtimex.c aio.c \
+ alarm.c answer.c attach-f-p.c attach-f-p-cmd.c \
+ attach-p-cmd-cmd.c attach-p-cmd-p.c block_reset_raise_run.c \
+ bpf.c bpf-v.c brk.c btrfs.c caps.c caps-abbrev.c \
+ check_sigblock.c check_sigign.c chmod.c chown.c chown32.c \
+ chroot.c clock_adjtime.c clock_nanosleep.c clock_xettime.c \
+ clone_parent.c clone_ptrace.c copy_file_range.c count-f.c \
+ creat.c delete_module.c dup.c dup2.c dup3.c epoll_create.c \
epoll_create1.c epoll_ctl.c epoll_pwait.c epoll_wait.c \
erestartsys.c eventfd.c execve.c execve-v.c execveat.c \
execveat-v.c faccessat.c fadvise64.c fadvise64_64.c \
@@ -2405,9 +2516,9 @@ DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
gettid.c getuid.c getuid32.c getxxid.c group_req.c inet-cmsg.c \
init_module.c inotify.c inotify_init1.c int_0x80.c ioctl.c \
ioctl_block.c ioctl_dm.c ioctl_dm-v.c ioctl_evdev.c \
- ioctl_evdev-v.c ioctl_loop.c ioctl_loop-nv.c ioctl_loop-v.c \
- ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c ioctl_rtc-v.c \
- ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
+ ioctl_evdev-v.c ioctl_kvm_run.c ioctl_loop.c ioctl_loop-nv.c \
+ ioctl_loop-v.c ioctl_mtd.c ioctl_nsfs.c ioctl_rtc.c \
+ ioctl_rtc-v.c ioctl_scsi.c ioctl_sg_io_v3.c ioctl_sg_io_v4.c \
ioctl_sock_gifconf.c ioctl_uffdio.c ioctl_v4l2.c ioperm.c \
iopl.c ioprio.c ip_mreq.c ipc.c ipc_msg.c ipc_msgbuf.c \
ipc_sem.c ipc_shm.c is_linux_mips_n64.c kcmp.c kcmp-y.c \
@@ -2417,13 +2528,13 @@ DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
mbind.c membarrier.c memfd_create.c migrate_pages.c mincore.c \
mkdir.c mkdirat.c mknod.c mknodat.c mlock.c mlock2.c \
mlockall.c mmap.c mmap64.c mmsg.c mmsg-silent.c mmsg_name.c \
- mmsg_name-v.c mount.c move_pages.c mq.c mq_sendrecv.c \
- mq_sendrecv-read.c mq_sendrecv-write.c msg_control.c \
- msg_control-v.c msg_name.c munlockall.c nanosleep.c \
- net-accept-connect.c net-icmp_filter.c net-sockaddr.c \
- net-y-unix.c net-yy-inet.c net-yy-netlink.c net-yy-unix.c \
- netlink_audit.c netlink_crypto.c netlink_generic.c \
- netlink_inet_diag.c netlink_kobject_uevent.c \
+ mmsg_name-v.c modify_ldt.c mount.c move_pages.c mq.c \
+ mq_sendrecv.c mq_sendrecv-read.c mq_sendrecv-write.c \
+ msg_control.c msg_control-v.c msg_name.c munlockall.c \
+ nanosleep.c net-accept-connect.c net-icmp_filter.c \
+ net-sockaddr.c net-y-unix.c net-yy-inet.c net-yy-netlink.c \
+ net-yy-unix.c netlink_audit.c netlink_crypto.c \
+ netlink_generic.c netlink_inet_diag.c netlink_kobject_uevent.c \
netlink_netfilter.c netlink_netlink_diag.c netlink_protocol.c \
netlink_route.c netlink_selinux.c netlink_sock_diag.c \
netlink_unix_diag.c netlink_xfrm.c newfstatat.c \
@@ -2442,13 +2553,16 @@ DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
nlattr_packet_diag_msg.c nlattr_rtgenmsg.c nlattr_rtmsg.c \
nlattr_smc_diag_msg.c nlattr_tc_stats.c nlattr_tca_stab.c \
nlattr_tcamsg.c nlattr_tcmsg.c nlattr_unix_diag_msg.c \
- nsyscalls.c old_mmap.c oldfstat.c oldlstat.c oldselect.c \
+ nsyscalls.c nsyscalls-d.c old_mmap.c old_mmap-P.c \
+ old_mmap-v-none.c oldfstat.c oldlstat.c oldselect.c \
+ oldselect-P.c oldselect-efault.c oldselect-efault-P.c \
oldstat.c open.c openat.c osf_utimes.c pause.c pc.c \
perf_event_open.c perf_event_open_nonverbose.c \
perf_event_open_unabbrev.c personality.c pipe.c pipe2.c \
- pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c ppoll.c \
- ppoll-v.c prctl-arg2-intptr.c prctl-dumpable.c prctl-name.c \
- prctl-no-args.c prctl-pdeathsig.c prctl-seccomp-filter-v.c \
+ pkey_alloc.c pkey_free.c pkey_mprotect.c poll.c poll-P.c \
+ ppoll.c ppoll-P.c ppoll-v.c prctl-arg2-intptr.c \
+ prctl-dumpable.c prctl-name.c prctl-no-args.c \
+ prctl-pdeathsig.c prctl-seccomp-filter-v.c \
prctl-seccomp-strict.c prctl-securebits.c prctl-tid_address.c \
prctl-tsc.c pread64-pwrite64.c preadv.c preadv-pwritev.c \
preadv2-pwritev2.c print_maxfd.c printpath-umovestr.c \
@@ -2462,28 +2576,32 @@ DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
readdir.c readlink.c readlinkat.c readv.c reboot.c recvfrom.c \
recvmmsg-timeout.c recvmsg.c redirect-fds.c remap_file_pages.c \
rename.c renameat.c renameat2.c request_key.c \
- restart_syscall.c rmdir.c rt_sigaction.c rt_sigpending.c \
- rt_sigprocmask.c rt_sigqueueinfo.c rt_sigreturn.c \
- rt_sigsuspend.c rt_sigtimedwait.c rt_tgsigqueueinfo.c \
- run_expect_termsig.c sched_get_priority_mxx.c \
+ restart_syscall.c riscv_flush_icache.c rmdir.c rt_sigaction.c \
+ rt_sigpending.c rt_sigprocmask.c rt_sigqueueinfo.c \
+ rt_sigreturn.c rt_sigsuspend.c rt_sigtimedwait.c \
+ rt_tgsigqueueinfo.c run_expect_termsig.c \
+ s390_guarded_storage.c s390_guarded_storage-v.c \
+ s390_pci_mmio_read_write.c s390_runtime_instr.c s390_sthyi.c \
+ s390_sthyi-v.c sched_get_priority_mxx.c \
sched_rr_get_interval.c sched_xetaffinity.c sched_xetattr.c \
sched_xetparam.c sched_xetscheduler.c sched_yield.c \
scm_rights.c seccomp-filter.c seccomp-filter-v.c \
- seccomp-strict.c seccomp_get_action_avail.c select.c semop.c \
- sendfile.c sendfile64.c set_mempolicy.c set_ptracer_any.c \
- set_sigblock.c set_sigign.c setdomainname.c setfsgid.c \
- setfsgid32.c setfsuid.c setfsuid32.c setgid.c setgid32.c \
- setgroups.c setgroups32.c sethostname.c setns.c setregid.c \
- setregid32.c setresgid.c setresgid32.c setresuid.c \
+ seccomp-strict.c seccomp_get_action_avail.c select.c \
+ select-P.c semop.c sendfile.c sendfile64.c set_mempolicy.c \
+ set_ptracer_any.c set_sigblock.c set_sigign.c setdomainname.c \
+ setfsgid.c setfsgid32.c setfsuid.c setfsuid32.c setgid.c \
+ setgid32.c setgroups.c setgroups32.c sethostname.c setns.c \
+ setregid.c setregid32.c setresgid.c setresgid32.c setresuid.c \
setresuid32.c setreuid.c setreuid32.c setrlimit.c setuid.c \
setuid32.c shmxt.c shutdown.c sigaction.c sigaltstack.c \
siginfo.c signal.c signal_receive.c signalfd4.c sigpending.c \
sigprocmask.c sigreturn.c sigsuspend.c sleep.c so_linger.c \
- so_peercred.c sock_filter-v.c socketcall.c splice.c \
- $(stack_fcall_SOURCES) stat.c stat64.c statfs.c statfs64.c \
- statx.c swap.c sxetmask.c symlink.c symlinkat.c sync.c \
- sync_file_range.c sync_file_range2.c sysinfo.c syslog.c tee.c \
- threads-execve.c time.c timer_create.c timer_xettime.c \
+ so_peercred.c sock_filter-v.c socketcall.c \
+ sockopt-sol_netlink.c splice.c $(stack_fcall_SOURCES) \
+ $(stack_fcall_mangled_SOURCES) stat.c stat64.c statfs.c \
+ statfs64.c statx.c swap.c sxetmask.c symlink.c symlinkat.c \
+ sync.c sync_file_range.c sync_file_range2.c sysinfo.c syslog.c \
+ tee.c threads-execve.c time.c timer_create.c timer_xettime.c \
timerfd_xettime.c times.c times-fail.c truncate.c truncate64.c \
ugetrlimit.c uio.c umask.c umount.c umount2.c umoven-illptr.c \
umovestr.c umovestr-illptr.c umovestr2.c umovestr3.c uname.c \
@@ -2492,7 +2610,8 @@ DIST_SOURCES = $(libtests_a_SOURCES) _newselect.c accept.c accept4.c \
userfaultfd.c ustat.c utime.c utimensat.c utimes.c vfork-f.c \
vhangup.c vmsplice.c wait4.c wait4-v.c waitid.c waitid-v.c \
waitpid.c xattr.c xattr-strings.c xet_robust_list.c \
- xetitimer.c xetpgid.c xetpriority.c xettimeofday.c zeroargc.c
+ xet_thread_area_x86.c xetitimer.c xetpgid.c xetpriority.c \
+ xettimeofday.c zeroargc.c
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -2705,7 +2824,7 @@ am__set_TESTS_bases = \
bases=`echo $$bases`
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
-@USE_LIBUNWIND_TRUE@am__EXEEXT_2 = strace-k.test
+@USE_LIBUNWIND_TRUE@am__EXEEXT_2 = strace-k.test $(am__append_1)
TEST_SUITE_LOG = test-suite.log
TEST_EXTENSIONS = @EXEEXT@ .test
am__test_logs1 = $(TESTS:=.log)
@@ -2793,10 +2912,13 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
RANLIB = @RANLIB@
+READELF = @READELF@
RPM_CHANGELOGTIME = @RPM_CHANGELOGTIME@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
+SIZEOF_KERNEL_LONG_T = @SIZEOF_KERNEL_LONG_T@
+SIZEOF_LONG = 4
STRIP = @STRIP@
VALGRIND = @VALGRIND@
VALGRIND_ENABLED = @VALGRIND_ENABLED@
@@ -2817,6 +2939,7 @@ am__untar = @am__untar@
arch = @arch@
arch_m32 = @arch_m32@
arch_mx32 = @arch_mx32@
+arch_native = @arch_native@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -2824,6 +2947,8 @@ build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
+cc_flags_m32 = @cc_flags_m32@
+cc_flags_mx32 = @cc_flags_mx32@
datadir = @datadir@
datarootdir = @datarootdir@
dl_LIBS = @dl_LIBS@
@@ -2841,6 +2966,9 @@ infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
+libiberty_CPPFLAGS = @libiberty_CPPFLAGS@
+libiberty_LDFLAGS = @libiberty_LDFLAGS@
+libiberty_LIBS = @libiberty_LIBS@
libunwind_CPPFLAGS = @libunwind_CPPFLAGS@
libunwind_LDFLAGS = @libunwind_LDFLAGS@
libunwind_LIBS = @libunwind_LIBS@
@@ -2865,8 +2993,10 @@ valgrind_enabled_tools = @valgrind_enabled_tools@
valgrind_tools = @valgrind_tools@
OS = linux
ARCH = @arch_mx32@
+NATIVE_ARCH = @arch_native@
MPERS_NAME = mx32
-ARCH_MFLAGS = -DMPERS_IS_$(MPERS_NAME) -mx32
+MPERS_CC_FLAGS = @cc_flags_mx32@
+ARCH_MFLAGS = -DMPERS_IS_$(MPERS_NAME) $(MPERS_CC_FLAGS)
AM_CFLAGS = $(WARN_CFLAGS)
AM_CPPFLAGS = $(ARCH_MFLAGS) \
-I$(builddir) \
@@ -3021,6 +3151,7 @@ PURE_EXECUTABLES = \
ioctl_block \
ioctl_dm \
ioctl_evdev \
+ ioctl_kvm_run \
ioctl_loop \
ioctl_mtd \
ioctl_rtc \
@@ -3071,6 +3202,7 @@ PURE_EXECUTABLES = \
mmap64 \
mmsg \
mmsg_name \
+ modify_ldt \
mount \
move_pages \
mq \
@@ -3140,9 +3272,12 @@ PURE_EXECUTABLES = \
nlattr_tcmsg \
nlattr_unix_diag_msg \
old_mmap \
+ old_mmap-P \
+ old_mmap-v-none \
oldfstat \
oldlstat \
oldselect \
+ oldselect-efault \
oldstat \
open \
openat \
@@ -3156,7 +3291,9 @@ PURE_EXECUTABLES = \
pkey_free \
pkey_mprotect \
poll \
+ poll-P \
ppoll \
+ ppoll-P \
prctl-arg2-intptr \
prctl-dumpable \
prctl-name \
@@ -3199,6 +3336,7 @@ PURE_EXECUTABLES = \
renameat \
renameat2 \
request_key \
+ riscv_flush_icache \
rmdir \
rt_sigaction \
rt_sigpending \
@@ -3208,6 +3346,12 @@ PURE_EXECUTABLES = \
rt_sigsuspend \
rt_sigtimedwait \
rt_tgsigqueueinfo \
+ s390_guarded_storage \
+ s390_guarded_storage-v \
+ s390_pci_mmio_read_write \
+ s390_runtime_instr \
+ s390_sthyi \
+ s390_sthyi-v \
sched_get_priority_mxx \
sched_rr_get_interval \
sched_xetaffinity \
@@ -3259,6 +3403,7 @@ PURE_EXECUTABLES = \
so_peercred \
sock_filter-v \
socketcall \
+ sockopt-sol_netlink \
splice \
stat \
stat64 \
@@ -3310,6 +3455,7 @@ PURE_EXECUTABLES = \
xattr \
xattr-strings \
xet_robust_list \
+ xet_thread_area_x86 \
xetitimer \
xetpgid \
xetpriority \
@@ -3344,13 +3490,17 @@ uio_CPPFLAGS = $(AM_CPPFLAGS) -D_FILE_OFFSET_BITS=64
stack_fcall_SOURCES = stack-fcall.c \
stack-fcall-0.c stack-fcall-1.c stack-fcall-2.c stack-fcall-3.c
+stack_fcall_mangled_SOURCES = stack-fcall-mangled.c \
+ stack-fcall-mangled-0.c stack-fcall-mangled-1.c \
+ stack-fcall-mangled-2.c stack-fcall-mangled-3.c
+
# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
-GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test \
- access.gen.test acct.gen.test add_key.gen.test \
- adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test \
- bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test \
- chown32.gen.test chroot.gen.test clock.gen.test \
+GEN_TESTS = _newselect.gen.test _newselect-P.gen.test accept.gen.test \
+ accept4.gen.test access.gen.test acct.gen.test \
+ add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test \
+ bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test \
+ chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test \
clock_adjtime.gen.test clock_nanosleep.gen.test \
clock_xettime.gen.test copy_file_range.gen.test creat.gen.test \
delete_module.gen.test dup.gen.test dup2.gen.test \
@@ -3378,46 +3528,49 @@ GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test \
gettid.gen.test getuid32.gen.test getxxid.gen.test \
group_req.gen.test inet-cmsg.gen.test init_module.gen.test \
inotify.gen.test inotify_init1.gen.test int_0x80.gen.test \
- ioctl_block.gen.test ioctl_evdev.gen.test \
- ioctl_evdev-v.gen.test ioctl_loop.gen.test \
- ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test \
+ ioctl_block.gen.test ioctl_dm.gen.test ioctl_dm-v.gen.test \
+ ioctl_evdev.gen.test ioctl_evdev-v.gen.test \
+ ioctl_kvm_run.gen.test ioctl_loop.gen.test \
+ ioctl_loop-nv.gen.test ioctl_loop-v.gen.test \
+ ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_rtc.gen.test \
ioctl_rtc-v.gen.test ioctl_scsi.gen.test \
ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test \
- ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test \
- iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test \
- ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test \
- kcmp.gen.test kcmp-y.gen.test kexec_file_load.gen.test \
- kexec_load.gen.test keyctl.gen.test kill.gen.test \
- lchown.gen.test lchown32.gen.test link.gen.test \
- linkat.gen.test lookup_dcookie.gen.test lstat.gen.test \
- lstat64.gen.test madvise.gen.test mbind.gen.test \
- membarrier.gen.test memfd_create.gen.test \
- migrate_pages.gen.test mincore.gen.test mkdir.gen.test \
- mkdirat.gen.test mknod.gen.test mknodat.gen.test \
- mlock.gen.test mlock2.gen.test mlockall.gen.test \
- mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test \
- mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test \
- move_pages.gen.test mq.gen.test mq_sendrecv.gen.test \
- mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test \
- msg_control.gen.test msg_control-v.gen.test msg_name.gen.test \
- munlockall.gen.test nanosleep.gen.test \
- net-icmp_filter.gen.test net-sockaddr.gen.test \
- netlink_audit.gen.test netlink_crypto.gen.test \
- netlink_generic.gen.test netlink_kobject_uevent.gen.test \
- netlink_netfilter.gen.test netlink_protocol.gen.test \
- netlink_route.gen.test netlink_selinux.gen.test \
- netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test \
- nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test \
- nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test \
- nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test \
- nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test \
- nfnetlink_osf.gen.test nfnetlink_queue.gen.test \
- nfnetlink_ulog.gen.test nlattr_crypto_user_alg.gen.test \
- nlattr_br_port_msg.gen.test nlattr_dcbmsg.gen.test \
- nlattr_fib_rule_hdr.gen.test nlattr_ifaddrlblmsg.gen.test \
- nlattr_ifaddrmsg.gen.test nlattr_ifinfomsg.gen.test \
- nlattr_ifla_brport.gen.test nlattr_ifla_port.gen.test \
- nlattr_ifla_xdp.gen.test nlattr_inet_diag_msg.gen.test \
+ ioctl_sock_gifconf.gen.test ioctl_uffdio.gen.test \
+ ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test \
+ ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test \
+ ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test \
+ kcmp-y.gen.test kexec_file_load.gen.test kexec_load.gen.test \
+ keyctl.gen.test kill.gen.test lchown.gen.test \
+ lchown32.gen.test link.gen.test linkat.gen.test \
+ lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test \
+ madvise.gen.test mbind.gen.test membarrier.gen.test \
+ memfd_create.gen.test migrate_pages.gen.test mincore.gen.test \
+ mkdir.gen.test mkdirat.gen.test mknod.gen.test \
+ mknodat.gen.test mlock.gen.test mlock2.gen.test \
+ mlockall.gen.test mmap64.gen.test mmsg.gen.test \
+ mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test \
+ modify_ldt.gen.test mount.gen.test move_pages.gen.test \
+ mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test \
+ mq_sendrecv-write.gen.test msg_control.gen.test \
+ msg_control-v.gen.test msg_name.gen.test munlockall.gen.test \
+ nanosleep.gen.test net-icmp_filter.gen.test \
+ net-sockaddr.gen.test netlink_audit.gen.test \
+ netlink_crypto.gen.test netlink_generic.gen.test \
+ netlink_kobject_uevent.gen.test netlink_netfilter.gen.test \
+ netlink_protocol.gen.test netlink_route.gen.test \
+ netlink_selinux.gen.test netlink_xfrm.gen.test \
+ newfstatat.gen.test nlattr.gen.test nfnetlink_acct.gen.test \
+ nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test \
+ nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test \
+ nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test \
+ nfnetlink_nftables.gen.test nfnetlink_osf.gen.test \
+ nfnetlink_queue.gen.test nfnetlink_ulog.gen.test \
+ nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test \
+ nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test \
+ nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test \
+ nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test \
+ nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test \
+ nlattr_inet_diag_msg.gen.test \
nlattr_inet_diag_req_compat.gen.test \
nlattr_inet_diag_req_v2.gen.test \
nlattr_mdba_mdb_entry.gen.test \
@@ -3429,16 +3582,18 @@ GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test \
nlattr_tc_stats.gen.test nlattr_tca_stab.gen.test \
nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test \
nlattr_unix_diag_msg.gen.test old_mmap.gen.test \
- oldfstat.gen.test oldlstat.gen.test oldstat.gen.test \
- open.gen.test openat.gen.test osf_utimes.gen.test \
- pause.gen.test perf_event_open.gen.test \
+ old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test \
+ oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test \
+ oldselect-efault.gen.test oldselect-efault-P.gen.test \
+ oldstat.gen.test open.gen.test openat.gen.test \
+ osf_utimes.gen.test pause.gen.test perf_event_open.gen.test \
perf_event_open_nonverbose.gen.test \
perf_event_open_unabbrev.gen.test pipe2.gen.test \
pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test \
- ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test \
- preadv.gen.test preadv-pwritev.gen.test \
- preadv2-pwritev2.gen.test printstr.gen.test \
- printpath-umovestr.gen.test \
+ ppoll.gen.test ppoll-P.gen.test ppoll-v.gen.test \
+ pread64-pwrite64.gen.test preadv.gen.test \
+ preadv-pwritev.gen.test preadv2-pwritev2.gen.test \
+ printstr.gen.test printpath-umovestr.gen.test \
printpath-umovestr-peekdata.gen.test \
printpath-umovestr-undumpable.gen.test \
printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test \
@@ -3451,44 +3606,48 @@ GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test \
reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test \
recvmsg.gen.test regex.gen.test remap_file_pages.gen.test \
rename.gen.test renameat.gen.test renameat2.gen.test \
- request_key.gen.test rmdir.gen.test rt_sigpending.gen.test \
- rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test \
- rt_sigreturn.gen.test rt_sigsuspend.gen.test \
- rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test \
- sched.gen.test sched_get_priority_mxx.gen.test \
- sched_rr_get_interval.gen.test sched_xetaffinity.gen.test \
- sched_xetattr.gen.test sched_xetparam.gen.test \
- sched_xetscheduler.gen.test sched_yield.gen.test \
- seccomp-filter.gen.test seccomp-filter-v.gen.test \
- seccomp_get_action_avail.gen.test select.gen.test \
- semop.gen.test sendfile.gen.test sendfile64.gen.test \
- set_mempolicy.gen.test setdomainname.gen.test \
- setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test \
- setfsuid32.gen.test setgid.gen.test setgid32.gen.test \
- setgroups.gen.test setgroups32.gen.test sethostname.gen.test \
- setns.gen.test setregid.gen.test setregid32.gen.test \
- setresgid.gen.test setresgid32.gen.test setresuid.gen.test \
- setresuid32.gen.test setreuid.gen.test setreuid32.gen.test \
- setrlimit.gen.test setuid.gen.test setuid32.gen.test \
- shmxt.gen.test shutdown.gen.test sigaction.gen.test \
- siginfo.gen.test signal.gen.test signal_receive.gen.test \
- signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test \
- sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test \
- so_peercred.gen.test sock_filter-v.gen.test \
- socketcall.gen.test splice.gen.test stat.gen.test \
- stat64.gen.test statfs.gen.test statfs64.gen.test \
- statx.gen.test swap.gen.test sxetmask.gen.test \
- symlink.gen.test symlinkat.gen.test sync.gen.test \
- sync_file_range.gen.test sync_file_range2.gen.test \
- sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test \
- timer_create.gen.test timer_xettime.gen.test \
- timerfd_xettime.gen.test times.gen.test times-fail.gen.test \
- trace_fstat.gen.test trace_fstatfs.gen.test \
- trace_lstat.gen.test trace_question.gen.test \
- trace_stat.gen.test trace_stat_like.gen.test \
- trace_statfs.gen.test trace_statfs_like.gen.test \
- truncate.gen.test truncate64.gen.test ugetrlimit.gen.test \
- umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test \
+ request_key.gen.test riscv_flush_icache.gen.test \
+ rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test \
+ rt_sigqueueinfo.gen.test rt_sigreturn.gen.test \
+ rt_sigsuspend.gen.test rt_sigtimedwait.gen.test \
+ rt_tgsigqueueinfo.gen.test s390_guarded_storage.gen.test \
+ s390_guarded_storage-v.gen.test \
+ s390_pci_mmio_read_write.gen.test s390_runtime_instr.gen.test \
+ s390_sthyi.gen.test s390_sthyi-v.gen.test sched.gen.test \
+ sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test \
+ sched_xetaffinity.gen.test sched_xetattr.gen.test \
+ sched_xetparam.gen.test sched_xetscheduler.gen.test \
+ sched_yield.gen.test seccomp-filter.gen.test \
+ seccomp-filter-v.gen.test seccomp_get_action_avail.gen.test \
+ select.gen.test select-P.gen.test semop.gen.test \
+ sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test \
+ setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test \
+ setfsuid.gen.test setfsuid32.gen.test setgid.gen.test \
+ setgid32.gen.test setgroups.gen.test setgroups32.gen.test \
+ sethostname.gen.test setns.gen.test setregid.gen.test \
+ setregid32.gen.test setresgid.gen.test setresgid32.gen.test \
+ setresuid.gen.test setresuid32.gen.test setreuid.gen.test \
+ setreuid32.gen.test setrlimit.gen.test setuid.gen.test \
+ setuid32.gen.test shmxt.gen.test shutdown.gen.test \
+ sigaction.gen.test siginfo.gen.test signal.gen.test \
+ signal_receive.gen.test signalfd4.gen.test sigpending.gen.test \
+ sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test \
+ so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test \
+ socketcall.gen.test sockopt-sol_netlink.gen.test \
+ splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test \
+ statfs64.gen.test statx.gen.test swap.gen.test \
+ sxetmask.gen.test symlink.gen.test symlinkat.gen.test \
+ sync.gen.test sync_file_range.gen.test \
+ sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test \
+ tee.gen.test time.gen.test timer_create.gen.test \
+ timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test \
+ times-fail.gen.test trace_fstat.gen.test \
+ trace_fstatfs.gen.test trace_lstat.gen.test \
+ trace_question.gen.test trace_stat.gen.test \
+ trace_stat_like.gen.test trace_statfs.gen.test \
+ trace_statfs_like.gen.test truncate.gen.test \
+ truncate64.gen.test ugetrlimit.gen.test umask.gen.test \
+ umoven-illptr.gen.test umovestr-illptr.gen.test \
umovestr3.gen.test unlink.gen.test unlinkat.gen.test \
unshare.gen.test userfaultfd.gen.test ustat.gen.test \
utime.gen.test utimensat.gen.test utimes.gen.test \
@@ -3499,7 +3658,7 @@ GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test \
xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test \
xettimeofday.gen.test
@USE_LIBUNWIND_FALSE@LIBUNWIND_TESTS =
-@USE_LIBUNWIND_TRUE@LIBUNWIND_TESTS = strace-k.test
+@USE_LIBUNWIND_TRUE@LIBUNWIND_TESTS = strace-k.test $(am__append_1)
DECODER_TESTS = \
brk.test \
btrfs-v.test \
@@ -3514,11 +3673,6 @@ DECODER_TESTS = \
futex.test \
getuid.test \
ioctl.test \
- ioctl_dm-v.test \
- ioctl_dm.test \
- ioctl_loop-nv.test \
- ioctl_nsfs.test \
- ioctl_sock_gifconf.test \
ipc_msgbuf.test \
llseek.test \
lseek.test \
@@ -3530,9 +3684,11 @@ DECODER_TESTS = \
net.test \
netlink_sock_diag.test \
nsyscalls.test \
- oldselect.test \
+ nsyscalls-d.test \
+ nsyscalls-nd.test \
personality.test \
pipe.test \
+ poll-P.test \
poll.test \
prctl-arg2-intptr.test \
prctl-dumpable.test \
@@ -3551,6 +3707,7 @@ DECODER_TESTS = \
seccomp-strict.test \
sigaltstack.test \
sun_path.test \
+ xet_thread_area_x86.test \
uio.test \
umount.test \
umount2.test \
@@ -3573,6 +3730,8 @@ MISC_TESTS = \
detach-sleeping.test \
detach-stopped.test \
filter-unavailable.test \
+ filtering_fd-syntax.test \
+ filtering_syscall-syntax.test \
fflush.test \
get_regs.test \
interactive_block.test \
@@ -3616,10 +3775,16 @@ XFAIL_TESTS_x86_64 = int_0x80.gen.test
XFAIL_TESTS_x32 = int_0x80.gen.test
XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
TEST_LOG_COMPILER = env
-AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) MIPS_ABI=$(MIPS_ABI) $(srcdir)/run.sh
+AM_TEST_LOG_FLAGS = STRACE_ARCH=$(ARCH) STRACE_NATIVE_ARCH=$(NATIVE_ARCH) \
+ SIZEOF_KERNEL_LONG_T=$(SIZEOF_KERNEL_LONG_T) \
+ SIZEOF_LONG=$(SIZEOF_LONG) \
+ MIPS_ABI=$(MIPS_ABI) $(srcdir)/run.sh
+
VALGRIND_FLAGS = --quiet
VALGRIND_SUPPRESSIONS_FILES = $(abs_srcdir)/strace.supp
EXTRA_DIST = \
+ accept_compat.h \
+ attach-p-cmd.h \
caps-abbrev.awk \
caps.awk \
clock.in \
@@ -3635,7 +3800,6 @@ EXTRA_DIST = \
getresugid.c \
init.sh \
init_delete_module.h \
- ioctl-v.sh \
ipc.sh \
ipc_msgbuf.expected \
ksysent.sed \
@@ -3643,8 +3807,8 @@ EXTRA_DIST = \
match.awk \
net.expected \
netlink_sock_diag-v.sh \
- oldselect.expected \
pipe.expected \
+ print_user_desc.c \
process_vm_readv_writev.c \
pure_executables.list \
qual_fault-exit_group.expected \
@@ -3662,10 +3826,12 @@ EXTRA_DIST = \
setugid.c \
sigaltstack.expected \
sockname.c \
+ stack-fcall.h \
strace-C.expected \
strace-E.expected \
strace-T.expected \
strace-ff.expected \
+ strace-k-demangle.test \
strace-k.test \
strace-r.expected \
strace.supp \
@@ -3756,6 +3922,10 @@ _newselect$(EXEEXT): $(_newselect_OBJECTS) $(_newselect_DEPENDENCIES) $(EXTRA__n
@rm -f _newselect$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(_newselect_OBJECTS) $(_newselect_LDADD) $(LIBS)
+_newselect-P$(EXEEXT): $(_newselect_P_OBJECTS) $(_newselect_P_DEPENDENCIES) $(EXTRA__newselect_P_DEPENDENCIES)
+ @rm -f _newselect-P$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(_newselect_P_OBJECTS) $(_newselect_P_LDADD) $(LIBS)
+
accept$(EXEEXT): $(accept_OBJECTS) $(accept_DEPENDENCIES) $(EXTRA_accept_DEPENDENCIES)
@rm -f accept$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(accept_OBJECTS) $(accept_LDADD) $(LIBS)
@@ -4248,6 +4418,10 @@ ioctl_evdev-v$(EXEEXT): $(ioctl_evdev_v_OBJECTS) $(ioctl_evdev_v_DEPENDENCIES) $
@rm -f ioctl_evdev-v$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ioctl_evdev_v_OBJECTS) $(ioctl_evdev_v_LDADD) $(LIBS)
+ioctl_kvm_run$(EXEEXT): $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_DEPENDENCIES) $(EXTRA_ioctl_kvm_run_DEPENDENCIES)
+ @rm -f ioctl_kvm_run$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(ioctl_kvm_run_OBJECTS) $(ioctl_kvm_run_LDADD) $(LIBS)
+
ioctl_loop$(EXEEXT): $(ioctl_loop_OBJECTS) $(ioctl_loop_DEPENDENCIES) $(EXTRA_ioctl_loop_DEPENDENCIES)
@rm -f ioctl_loop$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ioctl_loop_OBJECTS) $(ioctl_loop_LDADD) $(LIBS)
@@ -4484,6 +4658,10 @@ mmsg_name-v$(EXEEXT): $(mmsg_name_v_OBJECTS) $(mmsg_name_v_DEPENDENCIES) $(EXTRA
@rm -f mmsg_name-v$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(mmsg_name_v_OBJECTS) $(mmsg_name_v_LDADD) $(LIBS)
+modify_ldt$(EXEEXT): $(modify_ldt_OBJECTS) $(modify_ldt_DEPENDENCIES) $(EXTRA_modify_ldt_DEPENDENCIES)
+ @rm -f modify_ldt$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(modify_ldt_OBJECTS) $(modify_ldt_LDADD) $(LIBS)
+
mount$(EXEEXT): $(mount_OBJECTS) $(mount_DEPENDENCIES) $(EXTRA_mount_DEPENDENCIES)
@rm -f mount$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(mount_OBJECTS) $(mount_LDADD) $(LIBS)
@@ -4780,10 +4958,22 @@ nsyscalls$(EXEEXT): $(nsyscalls_OBJECTS) $(nsyscalls_DEPENDENCIES) $(EXTRA_nsysc
@rm -f nsyscalls$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(nsyscalls_OBJECTS) $(nsyscalls_LDADD) $(LIBS)
+nsyscalls-d$(EXEEXT): $(nsyscalls_d_OBJECTS) $(nsyscalls_d_DEPENDENCIES) $(EXTRA_nsyscalls_d_DEPENDENCIES)
+ @rm -f nsyscalls-d$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(nsyscalls_d_OBJECTS) $(nsyscalls_d_LDADD) $(LIBS)
+
old_mmap$(EXEEXT): $(old_mmap_OBJECTS) $(old_mmap_DEPENDENCIES) $(EXTRA_old_mmap_DEPENDENCIES)
@rm -f old_mmap$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(old_mmap_OBJECTS) $(old_mmap_LDADD) $(LIBS)
+old_mmap-P$(EXEEXT): $(old_mmap_P_OBJECTS) $(old_mmap_P_DEPENDENCIES) $(EXTRA_old_mmap_P_DEPENDENCIES)
+ @rm -f old_mmap-P$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(old_mmap_P_OBJECTS) $(old_mmap_P_LDADD) $(LIBS)
+
+old_mmap-v-none$(EXEEXT): $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_DEPENDENCIES) $(EXTRA_old_mmap_v_none_DEPENDENCIES)
+ @rm -f old_mmap-v-none$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(old_mmap_v_none_OBJECTS) $(old_mmap_v_none_LDADD) $(LIBS)
+
oldfstat$(EXEEXT): $(oldfstat_OBJECTS) $(oldfstat_DEPENDENCIES) $(EXTRA_oldfstat_DEPENDENCIES)
@rm -f oldfstat$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(oldfstat_OBJECTS) $(oldfstat_LDADD) $(LIBS)
@@ -4796,6 +4986,18 @@ oldselect$(EXEEXT): $(oldselect_OBJECTS) $(oldselect_DEPENDENCIES) $(EXTRA_oldse
@rm -f oldselect$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(oldselect_OBJECTS) $(oldselect_LDADD) $(LIBS)
+oldselect-P$(EXEEXT): $(oldselect_P_OBJECTS) $(oldselect_P_DEPENDENCIES) $(EXTRA_oldselect_P_DEPENDENCIES)
+ @rm -f oldselect-P$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(oldselect_P_OBJECTS) $(oldselect_P_LDADD) $(LIBS)
+
+oldselect-efault$(EXEEXT): $(oldselect_efault_OBJECTS) $(oldselect_efault_DEPENDENCIES) $(EXTRA_oldselect_efault_DEPENDENCIES)
+ @rm -f oldselect-efault$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(oldselect_efault_OBJECTS) $(oldselect_efault_LDADD) $(LIBS)
+
+oldselect-efault-P$(EXEEXT): $(oldselect_efault_P_OBJECTS) $(oldselect_efault_P_DEPENDENCIES) $(EXTRA_oldselect_efault_P_DEPENDENCIES)
+ @rm -f oldselect-efault-P$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(oldselect_efault_P_OBJECTS) $(oldselect_efault_P_LDADD) $(LIBS)
+
oldstat$(EXEEXT): $(oldstat_OBJECTS) $(oldstat_DEPENDENCIES) $(EXTRA_oldstat_DEPENDENCIES)
@rm -f oldstat$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(oldstat_OBJECTS) $(oldstat_LDADD) $(LIBS)
@@ -4860,10 +5062,18 @@ poll$(EXEEXT): $(poll_OBJECTS) $(poll_DEPENDENCIES) $(EXTRA_poll_DEPENDENCIES)
@rm -f poll$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(poll_OBJECTS) $(poll_LDADD) $(LIBS)
+poll-P$(EXEEXT): $(poll_P_OBJECTS) $(poll_P_DEPENDENCIES) $(EXTRA_poll_P_DEPENDENCIES)
+ @rm -f poll-P$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(poll_P_OBJECTS) $(poll_P_LDADD) $(LIBS)
+
ppoll$(EXEEXT): $(ppoll_OBJECTS) $(ppoll_DEPENDENCIES) $(EXTRA_ppoll_DEPENDENCIES)
@rm -f ppoll$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ppoll_OBJECTS) $(ppoll_LDADD) $(LIBS)
+ppoll-P$(EXEEXT): $(ppoll_P_OBJECTS) $(ppoll_P_DEPENDENCIES) $(EXTRA_ppoll_P_DEPENDENCIES)
+ @rm -f ppoll-P$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(ppoll_P_OBJECTS) $(ppoll_P_LDADD) $(LIBS)
+
ppoll-v$(EXEEXT): $(ppoll_v_OBJECTS) $(ppoll_v_DEPENDENCIES) $(EXTRA_ppoll_v_DEPENDENCIES)
@rm -f ppoll-v$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(ppoll_v_OBJECTS) $(ppoll_v_LDADD) $(LIBS)
@@ -5084,6 +5294,10 @@ restart_syscall$(EXEEXT): $(restart_syscall_OBJECTS) $(restart_syscall_DEPENDENC
@rm -f restart_syscall$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(restart_syscall_OBJECTS) $(restart_syscall_LDADD) $(LIBS)
+riscv_flush_icache$(EXEEXT): $(riscv_flush_icache_OBJECTS) $(riscv_flush_icache_DEPENDENCIES) $(EXTRA_riscv_flush_icache_DEPENDENCIES)
+ @rm -f riscv_flush_icache$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(riscv_flush_icache_OBJECTS) $(riscv_flush_icache_LDADD) $(LIBS)
+
rmdir$(EXEEXT): $(rmdir_OBJECTS) $(rmdir_DEPENDENCIES) $(EXTRA_rmdir_DEPENDENCIES)
@rm -f rmdir$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(rmdir_OBJECTS) $(rmdir_LDADD) $(LIBS)
@@ -5124,6 +5338,30 @@ run_expect_termsig$(EXEEXT): $(run_expect_termsig_OBJECTS) $(run_expect_termsig_
@rm -f run_expect_termsig$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(run_expect_termsig_OBJECTS) $(run_expect_termsig_LDADD) $(LIBS)
+s390_guarded_storage$(EXEEXT): $(s390_guarded_storage_OBJECTS) $(s390_guarded_storage_DEPENDENCIES) $(EXTRA_s390_guarded_storage_DEPENDENCIES)
+ @rm -f s390_guarded_storage$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(s390_guarded_storage_OBJECTS) $(s390_guarded_storage_LDADD) $(LIBS)
+
+s390_guarded_storage-v$(EXEEXT): $(s390_guarded_storage_v_OBJECTS) $(s390_guarded_storage_v_DEPENDENCIES) $(EXTRA_s390_guarded_storage_v_DEPENDENCIES)
+ @rm -f s390_guarded_storage-v$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(s390_guarded_storage_v_OBJECTS) $(s390_guarded_storage_v_LDADD) $(LIBS)
+
+s390_pci_mmio_read_write$(EXEEXT): $(s390_pci_mmio_read_write_OBJECTS) $(s390_pci_mmio_read_write_DEPENDENCIES) $(EXTRA_s390_pci_mmio_read_write_DEPENDENCIES)
+ @rm -f s390_pci_mmio_read_write$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(s390_pci_mmio_read_write_OBJECTS) $(s390_pci_mmio_read_write_LDADD) $(LIBS)
+
+s390_runtime_instr$(EXEEXT): $(s390_runtime_instr_OBJECTS) $(s390_runtime_instr_DEPENDENCIES) $(EXTRA_s390_runtime_instr_DEPENDENCIES)
+ @rm -f s390_runtime_instr$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(s390_runtime_instr_OBJECTS) $(s390_runtime_instr_LDADD) $(LIBS)
+
+s390_sthyi$(EXEEXT): $(s390_sthyi_OBJECTS) $(s390_sthyi_DEPENDENCIES) $(EXTRA_s390_sthyi_DEPENDENCIES)
+ @rm -f s390_sthyi$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(s390_sthyi_OBJECTS) $(s390_sthyi_LDADD) $(LIBS)
+
+s390_sthyi-v$(EXEEXT): $(s390_sthyi_v_OBJECTS) $(s390_sthyi_v_DEPENDENCIES) $(EXTRA_s390_sthyi_v_DEPENDENCIES)
+ @rm -f s390_sthyi-v$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(s390_sthyi_v_OBJECTS) $(s390_sthyi_v_LDADD) $(LIBS)
+
sched_get_priority_mxx$(EXEEXT): $(sched_get_priority_mxx_OBJECTS) $(sched_get_priority_mxx_DEPENDENCIES) $(EXTRA_sched_get_priority_mxx_DEPENDENCIES)
@rm -f sched_get_priority_mxx$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(sched_get_priority_mxx_OBJECTS) $(sched_get_priority_mxx_LDADD) $(LIBS)
@@ -5176,6 +5414,10 @@ select$(EXEEXT): $(select_OBJECTS) $(select_DEPENDENCIES) $(EXTRA_select_DEPENDE
@rm -f select$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(select_OBJECTS) $(select_LDADD) $(LIBS)
+select-P$(EXEEXT): $(select_P_OBJECTS) $(select_P_DEPENDENCIES) $(EXTRA_select_P_DEPENDENCIES)
+ @rm -f select-P$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(select_P_OBJECTS) $(select_P_LDADD) $(LIBS)
+
semop$(EXEEXT): $(semop_OBJECTS) $(semop_DEPENDENCIES) $(EXTRA_semop_DEPENDENCIES)
@rm -f semop$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(semop_OBJECTS) $(semop_LDADD) $(LIBS)
@@ -5360,6 +5602,10 @@ socketcall$(EXEEXT): $(socketcall_OBJECTS) $(socketcall_DEPENDENCIES) $(EXTRA_so
@rm -f socketcall$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(socketcall_OBJECTS) $(socketcall_LDADD) $(LIBS)
+sockopt-sol_netlink$(EXEEXT): $(sockopt_sol_netlink_OBJECTS) $(sockopt_sol_netlink_DEPENDENCIES) $(EXTRA_sockopt_sol_netlink_DEPENDENCIES)
+ @rm -f sockopt-sol_netlink$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(sockopt_sol_netlink_OBJECTS) $(sockopt_sol_netlink_LDADD) $(LIBS)
+
splice$(EXEEXT): $(splice_OBJECTS) $(splice_DEPENDENCIES) $(EXTRA_splice_DEPENDENCIES)
@rm -f splice$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(splice_OBJECTS) $(splice_LDADD) $(LIBS)
@@ -5368,6 +5614,10 @@ stack-fcall$(EXEEXT): $(stack_fcall_OBJECTS) $(stack_fcall_DEPENDENCIES) $(EXTRA
@rm -f stack-fcall$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(stack_fcall_OBJECTS) $(stack_fcall_LDADD) $(LIBS)
+stack-fcall-mangled$(EXEEXT): $(stack_fcall_mangled_OBJECTS) $(stack_fcall_mangled_DEPENDENCIES) $(EXTRA_stack_fcall_mangled_DEPENDENCIES)
+ @rm -f stack-fcall-mangled$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(stack_fcall_mangled_OBJECTS) $(stack_fcall_mangled_LDADD) $(LIBS)
+
stat$(EXEEXT): $(stat_OBJECTS) $(stat_DEPENDENCIES) $(EXTRA_stat_DEPENDENCIES)
@rm -f stat$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(stat_OBJECTS) $(stat_LDADD) $(LIBS)
@@ -5596,6 +5846,10 @@ xet_robust_list$(EXEEXT): $(xet_robust_list_OBJECTS) $(xet_robust_list_DEPENDENC
@rm -f xet_robust_list$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(xet_robust_list_OBJECTS) $(xet_robust_list_LDADD) $(LIBS)
+xet_thread_area_x86$(EXEEXT): $(xet_thread_area_x86_OBJECTS) $(xet_thread_area_x86_DEPENDENCIES) $(EXTRA_xet_thread_area_x86_DEPENDENCIES)
+ @rm -f xet_thread_area_x86$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(xet_thread_area_x86_OBJECTS) $(xet_thread_area_x86_LDADD) $(LIBS)
+
xetitimer$(EXEEXT): $(xetitimer_OBJECTS) $(xetitimer_DEPENDENCIES) $(EXTRA_xetitimer_DEPENDENCIES)
@rm -f xetitimer$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(xetitimer_OBJECTS) $(xetitimer_LDADD) $(LIBS)
@@ -5622,6 +5876,7 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_newselect-P.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_newselect.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accept.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accept4.Po@am__quote@
@@ -5746,6 +6001,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_dm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_evdev-v.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_evdev.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_kvm_run.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop-nv.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop-v.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioctl_loop.Po@am__quote@
@@ -5831,6 +6087,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg_name-v.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmsg_name.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modify_ldt.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mount.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/move_pages.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mq.Po@am__quote@
@@ -5904,10 +6161,16 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcamsg.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_tcmsg.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlattr_unix_diag_msg.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls-d.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsyscalls.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-P.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap-v-none.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/old_mmap.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldfstat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldlstat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldselect-P.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldselect-efault-P.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldselect-efault.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldselect.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oldstat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Po@am__quote@
@@ -5924,7 +6187,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkey_alloc.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkey_free.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkey_mprotect.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poll-P.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poll.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppoll-P.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppoll-v.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppoll.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prctl-arg2-intptr.Po@am__quote@
@@ -5981,6 +6246,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/renameat2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/request_key.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/restart_syscall.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/riscv_flush_icache.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmdir.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rt_sigaction.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rt_sigpending.Po@am__quote@
@@ -5991,6 +6257,12 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rt_sigtimedwait.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rt_tgsigqueueinfo.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_expect_termsig.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_guarded_storage-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_guarded_storage.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_pci_mmio_read_write.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_runtime_instr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_sthyi-v.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s390_sthyi.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched_get_priority_mxx.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched_rr_get_interval.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched_xetaffinity.Po@am__quote@
@@ -6003,6 +6275,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp-filter.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp-strict.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp_get_action_avail.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select-P.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/semop.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sendfile.Po@am__quote@
@@ -6050,11 +6323,17 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/so_peercred.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sock_filter-v.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socketcall.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockopt-sol_netlink.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splice.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-0.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-1.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-mangled-0.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-mangled-1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-mangled-2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-mangled-3.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall-mangled.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack-fcall.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat64-stat64.Po@am__quote@
@@ -6113,6 +6392,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xattr-strings.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xattr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xet_robust_list.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xet_thread_area_x86.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xetitimer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xetpgid.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xetpriority.Po@am__quote@
@@ -7094,6 +7374,9 @@ uninstall-am:
$(srcdir)/_newselect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/_newselect-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/accept.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -7385,21 +7668,36 @@ $(srcdir)/int_0x80.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(srcdir)/ioctl_block.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_dm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_dm-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_evdev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
$(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_loop.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_loop-nv.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_loop-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
$(srcdir)/ioctl_mtd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -7415,6 +7713,9 @@ $(srcdir)/ioctl_sg_io_v3.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_test
$(srcdir)/ioctl_sg_io_v4.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_sock_gifconf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_uffdio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -7538,6 +7839,9 @@ $(srcdir)/mmsg_name.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(srcdir)/mmsg_name-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/modify_ldt.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -7733,12 +8037,30 @@ $(srcdir)/nlattr_unix_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/ge
$(srcdir)/old_mmap.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/old_mmap-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
$(srcdir)/oldlstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/oldselect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/oldselect-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/oldselect-efault.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/oldselect-efault-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/oldstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -7778,6 +8100,9 @@ $(srcdir)/pkey_mprotect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests
$(srcdir)/ppoll.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ppoll-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ppoll-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -7889,6 +8214,9 @@ $(srcdir)/renameat2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(srcdir)/request_key.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/riscv_flush_icache.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/rmdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -7913,6 +8241,24 @@ $(srcdir)/rt_sigtimedwait.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tes
$(srcdir)/rt_tgsigqueueinfo.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/s390_guarded_storage.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_guarded_storage-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_pci_mmio_read_write.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_runtime_instr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_sthyi.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_sthyi-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/sched.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -7949,6 +8295,9 @@ $(srcdir)/seccomp_get_action_avail.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir
$(srcdir)/select.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/select-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/semop.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -8072,6 +8421,9 @@ $(srcdir)/sock_filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests
$(srcdir)/socketcall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/sockopt-sol_netlink.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/splice.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
diff --git a/tests-mx32/_newselect-P.c b/tests-mx32/_newselect-P.c
new file mode 100644
index 000000000..561fbfe2e
--- /dev/null
+++ b/tests-mx32/_newselect-P.c
@@ -0,0 +1,2 @@
+#define PATH_TRACING_FD 9
+#include "_newselect.c"
diff --git a/tests-mx32/_newselect-P.gen.test b/tests-mx32/_newselect-P.gen.test
new file mode 100755
index 000000000..9c4247a1d
--- /dev/null
+++ b/tests-mx32/_newselect-P.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (_newselect-P -e trace=_newselect -P /dev/full 9>>/dev/full); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=_newselect -P /dev/full 9>>/dev/full
diff --git a/tests-mx32/_newselect.gen.test b/tests-mx32/_newselect.gen.test
index 490abe467..8e4d5f245 100755
--- a/tests-mx32/_newselect.gen.test
+++ b/tests-mx32/_newselect.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (_newselect ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (_newselect ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/accept.c b/tests-mx32/accept.c
index 8d42ba156..40b45db2c 100644
--- a/tests-mx32/accept.c
+++ b/tests-mx32/accept.c
@@ -2,6 +2,7 @@
* Check decoding of accept syscall.
*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -27,9 +28,34 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef TEST_SYSCALL_NAME
-# define TEST_SYSCALL_NAME accept
-#endif
+#include "tests.h"
+
+#include <unistd.h>
+
+#include <asm/unistd.h>
+
+#if defined __NR_accept
+
+# ifndef TEST_SYSCALL_NAME
+# define TEST_SYSCALL_NAME do_accept
+
+# ifndef TEST_SYSCALL_STR
+# define TEST_SYSCALL_STR "accept"
+# endif
+
+int do_accept(int sockfd, void *addr, void *addrlen)
+{
+ return syscall(__NR_accept, sockfd, addr, addrlen);
+}
+# endif /* !TEST_SYSCALL_NAME */
+
+#else /* !__NR_accept */
+
+# ifndef TEST_SYSCALL_NAME
+# define TEST_SYSCALL_NAME accept
+# endif
+
+#endif /* __NR_accept */
#define TEST_SYSCALL_PREPARE connect_un()
static void connect_un(void);
diff --git a/tests-mx32/accept.gen.test b/tests-mx32/accept.gen.test
index 3ebba3b5e..45d9239e5 100755
--- a/tests-mx32/accept.gen.test
+++ b/tests-mx32/accept.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (accept -a22); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (accept -a22 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a22
+run_strace_match_diff -a22
diff --git a/tests-mx32/accept4.gen.test b/tests-mx32/accept4.gen.test
index 5bd7fe6c5..711997033 100755
--- a/tests-mx32/accept4.gen.test
+++ b/tests-mx32/accept4.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (accept4 -a37); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (accept4 -a37 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a37
+run_strace_match_diff -a37
diff --git a/tests-mx32/accept_compat.h b/tests-mx32/accept_compat.h
new file mode 100644
index 000000000..c45b2551c
--- /dev/null
+++ b/tests-mx32/accept_compat.h
@@ -0,0 +1,25 @@
+#ifndef _STRACE_TESTS_ACCEPT_COMPAT_H_
+#define _STRACE_TESTS_ACCEPT_COMPAT_H_
+
+#include <unistd.h>
+#include <sys/socket.h>
+#include <asm/unistd.h>
+
+#if defined __NR_socketcall && defined __sparc__
+/*
+ * Work around the fact that
+ * - glibc >= 2.26 uses accept4 syscall to implement accept() call on sparc;
+ * - accept syscall had not been wired up on sparc until v4.4-rc8~4^2~1.
+ */
+static inline int
+do_accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
+{
+ const long args[] = { sockfd, (long) addr, (long) addrlen };
+
+ return syscall(__NR_socketcall, 5, args);
+}
+#else
+# define do_accept accept
+#endif
+
+#endif /* !_STRACE_TESTS_ACCEPT_COMPAT_H_ */
diff --git a/tests-mx32/acct.gen.test b/tests-mx32/acct.gen.test
index fa14e85b6..4a98dd46d 100755
--- a/tests-mx32/acct.gen.test
+++ b/tests-mx32/acct.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (acct -a20); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (acct -a20 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a20
+run_strace_match_diff -a20
diff --git a/tests-mx32/adjtimex.gen.test b/tests-mx32/adjtimex.gen.test
index 8db59f29f..e60244313 100755
--- a/tests-mx32/adjtimex.gen.test
+++ b/tests-mx32/adjtimex.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (adjtimex -a15); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (adjtimex -a15 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a15
+run_strace_match_diff -a15
diff --git a/tests-mx32/alarm.gen.test b/tests-mx32/alarm.gen.test
index ba1dea8b7..25982e147 100755
--- a/tests-mx32/alarm.gen.test
+++ b/tests-mx32/alarm.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (alarm -a10); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (alarm -a10 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a10
+run_strace_match_diff -a10
diff --git a/tests-mx32/attach-p-cmd-cmd.c b/tests-mx32/attach-p-cmd-cmd.c
index d0f824e95..70e3a2de8 100644
--- a/tests-mx32/attach-p-cmd-cmd.c
+++ b/tests-mx32/attach-p-cmd-cmd.c
@@ -1,7 +1,7 @@
/*
* This file is part of attach-p-cmd strace test.
*
- * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,19 +32,41 @@
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
+#include "attach-p-cmd.h"
-int
-main(void)
+static void
+write_pidfile(const pid_t pid)
+{
+ FILE *fp = fopen(pidfile, "w");
+ if (!fp)
+ perror_msg_and_fail("fopen: %s", pidfile);
+
+ if (fprintf(fp, "%d", pid) < 0)
+ perror_msg_and_fail("fprintf: %s", pidfile);
+
+ if (fclose(fp))
+ perror_msg_and_fail("fclose: %s", pidfile);
+}
+
+static void
+wait_for_peer_invocation(void)
{
- static const char lockdir[] = "attach-p-cmd.test-lock";
/* wait for the lock directory to be created by peer */
while (rmdir(lockdir)) {
if (ENOENT != errno)
perror_msg_and_fail("rmdir: %s", lockdir);
}
+}
+
+int
+main(void)
+{
+ const pid_t pid = getpid();
+ write_pidfile(pid);
+
+ wait_for_peer_invocation();
static const char dir[] = "attach-p-cmd.test cmd";
- pid_t pid = getpid();
int rc = chdir(dir);
printf("%-5d chdir(\"%s\") = %s\n"
diff --git a/tests-mx32/attach-p-cmd-p.c b/tests-mx32/attach-p-cmd-p.c
index 254d19ae0..843db9576 100644
--- a/tests-mx32/attach-p-cmd-p.c
+++ b/tests-mx32/attach-p-cmd-p.c
@@ -1,7 +1,7 @@
/*
* This file is part of attach-p-cmd strace test.
*
- * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,27 +33,14 @@
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
+#include <time.h>
#include <unistd.h>
+#include "attach-p-cmd.h"
static void
-handler(int signo)
+wait_for_peer_invocation(void)
{
-}
-
-int
-main(void)
-{
- const struct sigaction act = { .sa_handler = handler };
- if (sigaction(SIGALRM, &act, NULL))
- perror_msg_and_fail("sigaction");
-
- sigset_t mask = {};
- sigaddset(&mask, SIGALRM);
- if (sigprocmask(SIG_UNBLOCK, &mask, NULL))
- perror_msg_and_fail("sigprocmask");
-
- static const char lockdir[] = "attach-p-cmd.test-lock";
- /* create a lock directory */
+ /* create the lock directory */
if (mkdir(lockdir, 0700))
perror_msg_and_fail("mkdir: %s", lockdir);
@@ -63,21 +50,51 @@ main(void)
perror_msg_and_fail("mkdir: %s", lockdir);
}
- /* remove the lock directory */
+ /* cleanup the lock directory */
if (rmdir(lockdir))
perror_msg_and_fail("rmdir: %s", lockdir);
+}
+
+static void
+wait_for_peer_termination(void)
+{
+ FILE *fp = fopen(pidfile, "r");
+ if (!fp)
+ perror_msg_and_fail("fopen: %s", pidfile);
+
+ pid_t pid;
+ if (fscanf(fp, "%d", &pid) < 0)
+ perror_msg_and_fail("fscanf: %s", pidfile);
+ if (pid < 0)
+ error_msg_and_fail("pid = %d", pid);
+
+ if (fclose(fp))
+ perror_msg_and_fail("fclose: %s", pidfile);
+
+ if (unlink(pidfile))
+ perror_msg_and_fail("unlink: %s", pidfile);
+
+ while (kill(pid, 0) == 0)
+ ;
+}
+
+int
+main(void)
+{
+ wait_for_peer_invocation();
+ wait_for_peer_termination();
- alarm(1);
- pause();
+ static const struct timespec ts = { .tv_nsec = 123456789 };
+ if (nanosleep(&ts, NULL))
+ perror_msg_and_fail("nanosleep");
static const char dir[] = "attach-p-cmd.test -p";
pid_t pid = getpid();
int rc = chdir(dir);
- printf("%-5d --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---\n"
- "%-5d chdir(\"%s\") = %d %s (%m)\n"
+ printf("%-5d chdir(\"%s\") = %s\n"
"%-5d +++ exited with 0 +++\n",
- pid, pid, dir, rc, errno2name(), pid);
+ pid, dir, sprintrc(rc), pid);
return 0;
}
diff --git a/tests-mx32/attach-p-cmd.h b/tests-mx32/attach-p-cmd.h
new file mode 100644
index 000000000..e04af38f1
--- /dev/null
+++ b/tests-mx32/attach-p-cmd.h
@@ -0,0 +1,2 @@
+static const char lockdir[] = "attach-p-cmd.test-lock";
+static const char pidfile[] = "attach-p-cmd.test-pid";
diff --git a/tests-mx32/bpf.c b/tests-mx32/bpf.c
index bec30f87f..3f963fa3f 100644
--- a/tests-mx32/bpf.c
+++ b/tests-mx32/bpf.c
@@ -34,8 +34,11 @@
&& (defined HAVE_UNION_BPF_ATTR_ATTACH_FLAGS \
|| defined HAVE_UNION_BPF_ATTR_BPF_FD \
|| defined HAVE_UNION_BPF_ATTR_FLAGS \
- || defined HAVE_UNION_BPF_ATTR_INNER_MAP_FD \
- || defined HAVE_UNION_BPF_ATTR_PROG_FLAGS)
+ || defined HAVE_UNION_BPF_ATTR_INFO_INFO \
+ || defined HAVE_UNION_BPF_ATTR_NEXT_ID \
+ || defined HAVE_UNION_BPF_ATTR_NUMA_NODE \
+ || defined HAVE_UNION_BPF_ATTR_PROG_FLAGS \
+ || defined HAVE_UNION_BPF_ATTR_TEST_DURATION)
# include <stddef.h>
# include <stdio.h>
@@ -43,6 +46,7 @@
# include <string.h>
# include <unistd.h>
# include <linux/bpf.h>
+# include "print_fields.h"
static const kernel_ulong_t long_bits = (kernel_ulong_t) 0xfacefeed00000000ULL;
static const char *errstr;
@@ -183,18 +187,22 @@ sys_bpf(kernel_ulong_t cmd, kernel_ulong_t attr, kernel_ulong_t size)
init_ ## cmd_ ## _attr, print_ ## cmd_ ## _attr) \
/* End of TEST_BPF definition. */
-# ifdef HAVE_UNION_BPF_ATTR_INNER_MAP_FD
+#define DEF_BPF_INIT_FIRST(cmd_, field_, value_) \
+ static unsigned int \
+ init_ ## cmd_ ## _first(const unsigned long eop) \
+ { \
+ static const union bpf_attr attr = { .field_ = value_ };\
+ static const unsigned int offset = sizeof(attr.field_); \
+ const unsigned long addr = eop - offset; \
+ \
+ memcpy((void *) addr, &attr.field_, offset); \
+ return offset; \
+ } \
+ /* End of DEF_INIT_FIRST definition. */
-static unsigned int
-init_BPF_MAP_CREATE_first(const unsigned long eop)
-{
- static const union bpf_attr attr = { .map_type = 2 };
- static const unsigned int offset = sizeof(attr.map_type);
- const unsigned long addr = eop - offset;
+# ifdef HAVE_UNION_BPF_ATTR_NUMA_NODE
- memcpy((void *) addr, &attr.map_type, offset);
- return offset;
-}
+DEF_BPF_INIT_FIRST(BPF_MAP_CREATE, map_type, 2)
static void
print_BPF_MAP_CREATE_first(const unsigned long addr)
@@ -211,11 +219,12 @@ init_BPF_MAP_CREATE_attr(const unsigned long eop)
.key_size = 4,
.value_size = 8,
.max_entries = 256,
- .map_flags = 1,
- .inner_map_fd = -1
+ .map_flags = 7,
+ .inner_map_fd = -1,
+ .numa_node = 42
};
static const unsigned int offset =
- offsetofend(union bpf_attr, inner_map_fd);
+ offsetofend(union bpf_attr, numa_node);
const unsigned long addr = eop - offset;
memcpy((void *) addr, &attr, offset);
@@ -227,23 +236,15 @@ print_BPF_MAP_CREATE_attr(const unsigned long addr)
{
printf("map_type=BPF_MAP_TYPE_HASH, key_size=4"
", value_size=8, max_entries=256"
- ", map_flags=BPF_F_NO_PREALLOC, inner_map_fd=-1");
+ ", map_flags=BPF_F_NO_PREALLOC|BPF_F_NO_COMMON_LRU"
+ "|BPF_F_NUMA_NODE, inner_map_fd=-1, numa_node=42");
}
-# endif /* HAVE_UNION_BPF_ATTR_INNER_MAP_FD */
+# endif /* HAVE_UNION_BPF_ATTR_NUMA_NODE */
# ifdef HAVE_UNION_BPF_ATTR_FLAGS
-static unsigned int
-init_BPF_MAP_LOOKUP_ELEM_first(const unsigned long eop)
-{
- static const union bpf_attr attr = { .map_fd = -1 };
- static const unsigned int offset = sizeof(attr.map_fd);
- const unsigned long addr = eop - offset;
-
- memcpy((void *) addr, &attr.map_fd, offset);
- return offset;
-}
+DEF_BPF_INIT_FIRST(BPF_MAP_LOOKUP_ELEM, map_fd, -1)
static void
print_BPF_MAP_LOOKUP_ELEM_first(const unsigned long addr)
@@ -367,16 +368,7 @@ print_BPF_MAP_GET_NEXT_KEY_attr(const unsigned long addr)
# ifdef HAVE_UNION_BPF_ATTR_PROG_FLAGS
-static unsigned int
-init_BPF_PROG_LOAD_first(const unsigned long eop)
-{
- static const union bpf_attr attr = { .prog_type = 1 };
- static const unsigned int offset = sizeof(attr.prog_type);
- const unsigned long addr = eop - offset;
-
- memcpy((void *) addr, &attr.prog_type, offset);
- return offset;
-}
+DEF_BPF_INIT_FIRST(BPF_PROG_LOAD, prog_type, 1)
static void
print_BPF_PROG_LOAD_first(const unsigned long addr)
@@ -435,16 +427,7 @@ print_BPF_PROG_LOAD_attr(const unsigned long addr)
*/
# ifdef HAVE_UNION_BPF_ATTR_BPF_FD
-static unsigned int
-init_BPF_OBJ_PIN_first(const unsigned long eop)
-{
- static const union bpf_attr attr = {};
- static const unsigned int offset = sizeof(attr.pathname);
- const unsigned long addr = eop - offset;
-
- memcpy((void *) addr, &attr.pathname, offset);
- return offset;
-}
+DEF_BPF_INIT_FIRST(BPF_OBJ_PIN, pathname, 0)
static void
print_BPF_OBJ_PIN_first(const unsigned long addr)
@@ -484,16 +467,7 @@ print_BPF_OBJ_PIN_attr(const unsigned long addr)
/* BPF_PROG_ATTACH and BPF_PROG_DETACH commands appear in kernel 4.10. */
# ifdef HAVE_UNION_BPF_ATTR_ATTACH_FLAGS
-static unsigned int
-init_BPF_PROG_ATTACH_first(const unsigned long eop)
-{
- static const union bpf_attr attr = { .target_fd = -1 };
- static const unsigned int offset = sizeof(attr.target_fd);
- const unsigned long addr = eop - offset;
-
- memcpy((void *) addr, &attr.target_fd, offset);
- return offset;
-}
+DEF_BPF_INIT_FIRST(BPF_PROG_ATTACH, target_fd, -1)
static void
print_BPF_PROG_ATTACH_first(const unsigned long addr)
@@ -559,13 +533,171 @@ print_BPF_PROG_DETACH_attr(const unsigned long addr)
# endif /* HAVE_UNION_BPF_ATTR_ATTACH_FLAGS */
+/* BPF_PROG_TEST_RUN command appears in kernel 4.12. */
+# ifdef HAVE_UNION_BPF_ATTR_TEST_DURATION
+
+DEF_BPF_INIT_FIRST(BPF_PROG_TEST_RUN, test.prog_fd, -1)
+
+static void
+print_BPF_PROG_TEST_RUN_first(const unsigned long addr)
+{
+ printf("test={prog_fd=-1, retval=0, data_size_in=0, data_size_out=0"
+ ", data_in=0, data_out=0, repeat=0, duration=0}");
+}
+
+static const union bpf_attr sample_BPF_PROG_TEST_RUN_attr = {
+ .test = {
+ .prog_fd = -1,
+ .retval = 0xfac1fed2,
+ .data_size_in = 0xfac3fed4,
+ .data_size_out = 0xfac5fed6,
+ .data_in = (uint64_t) 0xfacef11dbadc2ded,
+ .data_out = (uint64_t) 0xfacef33dbadc4ded,
+ .repeat = 0xfac7fed8,
+ .duration = 0xfac9feda
+ }
+};
+static unsigned int
+init_BPF_PROG_TEST_RUN_attr(const unsigned long eop)
+{
+ static const unsigned int offset =
+ offsetofend(union bpf_attr, test);
+ const unsigned long addr = eop - offset;
+
+ memcpy((void *) addr, &sample_BPF_PROG_TEST_RUN_attr, offset);
+ return offset;
+}
+
+static void
+print_BPF_PROG_TEST_RUN_attr(const unsigned long addr)
+{
+ PRINT_FIELD_D("test={", sample_BPF_PROG_TEST_RUN_attr.test, prog_fd);
+ PRINT_FIELD_U(", ", sample_BPF_PROG_TEST_RUN_attr.test, retval);
+ PRINT_FIELD_U(", ", sample_BPF_PROG_TEST_RUN_attr.test, data_size_in);
+ PRINT_FIELD_U(", ", sample_BPF_PROG_TEST_RUN_attr.test, data_size_out);
+ PRINT_FIELD_X(", ", sample_BPF_PROG_TEST_RUN_attr.test, data_in);
+ PRINT_FIELD_X(", ", sample_BPF_PROG_TEST_RUN_attr.test, data_out);
+ PRINT_FIELD_U(", ", sample_BPF_PROG_TEST_RUN_attr.test, repeat);
+ PRINT_FIELD_U(", ", sample_BPF_PROG_TEST_RUN_attr.test, duration);
+ printf("}");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_TEST_DURATION */
+
+# ifdef HAVE_UNION_BPF_ATTR_NEXT_ID
+
+DEF_BPF_INIT_FIRST(BPF_PROG_GET_NEXT_ID, start_id, 0xdeadbeef)
+
+static void
+print_BPF_PROG_GET_NEXT_ID_first(const unsigned long addr)
+{
+ printf("start_id=%u, next_id=0", 0xdeadbeef);
+}
+
+static unsigned int
+init_BPF_PROG_GET_NEXT_ID_attr(const unsigned long eop)
+{
+ static const union bpf_attr attr = {
+ .start_id = 0xbadc0ded,
+ .next_id = 0xcafef00d
+ };
+ static const unsigned int offset =
+ offsetofend(union bpf_attr, next_id);
+ const unsigned long addr = eop - offset;
+
+ memcpy((void *) addr, &attr, offset);
+ return offset;
+}
+
+static void
+print_BPF_PROG_GET_NEXT_ID_attr(const unsigned long addr)
+{
+ printf("start_id=%u, next_id=%u", 0xbadc0ded, 0xcafef00d);
+}
+
+# define init_BPF_MAP_GET_NEXT_ID_first init_BPF_PROG_GET_NEXT_ID_first
+# define print_BPF_MAP_GET_NEXT_ID_first print_BPF_PROG_GET_NEXT_ID_first
+# define init_BPF_MAP_GET_NEXT_ID_attr init_BPF_PROG_GET_NEXT_ID_attr
+# define print_BPF_MAP_GET_NEXT_ID_attr print_BPF_PROG_GET_NEXT_ID_attr
+
+# define init_BPF_PROG_GET_FD_BY_ID_first init_BPF_PROG_GET_NEXT_ID_first
+# define init_BPF_PROG_GET_FD_BY_ID_attr init_BPF_PROG_GET_NEXT_ID_attr
+
+static void
+print_BPF_PROG_GET_FD_BY_ID_first(const unsigned long addr)
+{
+ printf("prog_id=%u, next_id=0", 0xdeadbeef);
+}
+
+static void
+print_BPF_PROG_GET_FD_BY_ID_attr(const unsigned long addr)
+{
+ printf("prog_id=%u, next_id=%u", 0xbadc0ded, 0xcafef00d);
+}
+
+# define init_BPF_MAP_GET_FD_BY_ID_first init_BPF_PROG_GET_NEXT_ID_first
+# define init_BPF_MAP_GET_FD_BY_ID_attr init_BPF_PROG_GET_NEXT_ID_attr
+
+static void
+print_BPF_MAP_GET_FD_BY_ID_first(const unsigned long addr)
+{
+ printf("map_id=%u, next_id=0", 0xdeadbeef);
+}
+
+static void
+print_BPF_MAP_GET_FD_BY_ID_attr(const unsigned long addr)
+{
+ printf("map_id=%u, next_id=%u", 0xbadc0ded, 0xcafef00d);
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_NEXT_ID */
+
+# ifdef HAVE_UNION_BPF_ATTR_INFO_INFO
+
+DEF_BPF_INIT_FIRST(BPF_OBJ_GET_INFO_BY_FD, info.bpf_fd, -1)
+
+static void
+print_BPF_OBJ_GET_INFO_BY_FD_first(const unsigned long addr)
+{
+ printf("info={bpf_fd=-1, info_len=0, info=0}");
+}
+
+static const union bpf_attr sample_BPF_OBJ_GET_INFO_BY_FD_attr = {
+ .info = {
+ .bpf_fd = -1,
+ .info_len = 0xdeadbeef,
+ .info = (uint64_t) 0xfacefeedbadc0ded
+ }
+};
+static unsigned int
+init_BPF_OBJ_GET_INFO_BY_FD_attr(const unsigned long eop)
+{
+ static const unsigned int offset =
+ offsetofend(union bpf_attr, info);
+ const unsigned long addr = eop - offset;
+
+ memcpy((void *) addr, &sample_BPF_OBJ_GET_INFO_BY_FD_attr, offset);
+ return offset;
+}
+
+static void
+print_BPF_OBJ_GET_INFO_BY_FD_attr(const unsigned long addr)
+{
+ PRINT_FIELD_D("info={", sample_BPF_OBJ_GET_INFO_BY_FD_attr.info, bpf_fd);
+ PRINT_FIELD_U(", ", sample_BPF_OBJ_GET_INFO_BY_FD_attr.info, info_len);
+ PRINT_FIELD_X(", ", sample_BPF_OBJ_GET_INFO_BY_FD_attr.info, info);
+ printf("}");
+}
+
+# endif /* HAVE_UNION_BPF_ATTR_INFO_INFO */
+
int
main(void)
{
page_size = get_page_size();
end_of_page = (unsigned long) tail_alloc(1) + 1;
-# ifdef HAVE_UNION_BPF_ATTR_INNER_MAP_FD
+# ifdef HAVE_UNION_BPF_ATTR_NUMA_NODE
TEST_BPF(BPF_MAP_CREATE);
# endif
@@ -590,6 +722,21 @@ main(void)
TEST_BPF(BPF_PROG_DETACH);
# endif
+# ifdef HAVE_UNION_BPF_ATTR_TEST_DURATION
+ TEST_BPF(BPF_PROG_TEST_RUN);
+# endif
+
+# ifdef HAVE_UNION_BPF_ATTR_NEXT_ID
+ TEST_BPF(BPF_PROG_GET_NEXT_ID);
+ TEST_BPF(BPF_MAP_GET_NEXT_ID);
+ TEST_BPF(BPF_PROG_GET_FD_BY_ID);
+ TEST_BPF(BPF_MAP_GET_FD_BY_ID);
+# endif
+
+# ifdef HAVE_UNION_BPF_ATTR_INFO_INFO
+ TEST_BPF(BPF_OBJ_GET_INFO_BY_FD);
+# endif
+
sys_bpf(0xfacefeed, end_of_page, 40);
printf("bpf(0xfacefeed /* BPF_??? */, %#lx, 40) = %s\n",
end_of_page, errstr);
diff --git a/tests-mx32/bpf.gen.test b/tests-mx32/bpf.gen.test
index 7ee9e7f32..1391d6b85 100755
--- a/tests-mx32/bpf.gen.test
+++ b/tests-mx32/bpf.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf -a20); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (bpf -a20 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a20
+run_strace_match_diff -a20
diff --git a/tests-mx32/btrfs.gen.test b/tests-mx32/btrfs.gen.test
index a7118efa7..3976cf5dc 100755
--- a/tests-mx32/btrfs.gen.test
+++ b/tests-mx32/btrfs.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (btrfs +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (btrfs +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/chmod.gen.test b/tests-mx32/chmod.gen.test
index 438665ad5..40330885b 100755
--- a/tests-mx32/chmod.gen.test
+++ b/tests-mx32/chmod.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (chmod -a28); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (chmod -a28 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a28
+run_strace_match_diff -a28
diff --git a/tests-mx32/chown.gen.test b/tests-mx32/chown.gen.test
index 46889a13b..87cc0f02c 100755
--- a/tests-mx32/chown.gen.test
+++ b/tests-mx32/chown.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (chown -a28); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (chown -a28 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a28
+run_strace_match_diff -a28
diff --git a/tests-mx32/chown32.gen.test b/tests-mx32/chown32.gen.test
index f0f603e30..8d9d89165 100755
--- a/tests-mx32/chown32.gen.test
+++ b/tests-mx32/chown32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (chown32 -a31); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (chown32 -a31 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a31
+run_strace_match_diff -a31
diff --git a/tests-mx32/chroot.gen.test b/tests-mx32/chroot.gen.test
index 6ea81dd23..40eb55ba7 100755
--- a/tests-mx32/chroot.gen.test
+++ b/tests-mx32/chroot.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (chroot -a24); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (chroot -a24 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a24
+run_strace_match_diff -a24
diff --git a/tests-mx32/clock_adjtime.gen.test b/tests-mx32/clock_adjtime.gen.test
index 735e3af5b..22d5dbcd7 100755
--- a/tests-mx32/clock_adjtime.gen.test
+++ b/tests-mx32/clock_adjtime.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (clock_adjtime -a37); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (clock_adjtime -a37 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a37
+run_strace_match_diff -a37
diff --git a/tests-mx32/copy_file_range.gen.test b/tests-mx32/copy_file_range.gen.test
index 4f3063ba0..e90c6c18a 100755
--- a/tests-mx32/copy_file_range.gen.test
+++ b/tests-mx32/copy_file_range.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (copy_file_range ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (copy_file_range ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/creat.gen.test b/tests-mx32/creat.gen.test
index d2e47d31f..baff9169b 100755
--- a/tests-mx32/creat.gen.test
+++ b/tests-mx32/creat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (creat -a20); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (creat -a20 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a20
+run_strace_match_diff -a20
diff --git a/tests-mx32/delete_module.gen.test b/tests-mx32/delete_module.gen.test
index 4e4c67128..028515ff0 100755
--- a/tests-mx32/delete_module.gen.test
+++ b/tests-mx32/delete_module.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (delete_module -a23); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (delete_module -a23 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a23
+run_strace_match_diff -a23
diff --git a/tests-mx32/dup.gen.test b/tests-mx32/dup.gen.test
index e5729c0fb..e559cdbce 100755
--- a/tests-mx32/dup.gen.test
+++ b/tests-mx32/dup.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (dup -a8); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (dup -a8 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a8
+run_strace_match_diff -a8
diff --git a/tests-mx32/dup2.gen.test b/tests-mx32/dup2.gen.test
index fd1f5c97b..6a6d2f589 100755
--- a/tests-mx32/dup2.gen.test
+++ b/tests-mx32/dup2.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (dup2 -a13); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (dup2 -a13 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a13
+run_strace_match_diff -a13
diff --git a/tests-mx32/dup3.gen.test b/tests-mx32/dup3.gen.test
index d6ff7d7ab..776b9a799 100755
--- a/tests-mx32/dup3.gen.test
+++ b/tests-mx32/dup3.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (dup3 -a24); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (dup3 -a24 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a24
+run_strace_match_diff -a24
diff --git a/tests-mx32/epoll_create.gen.test b/tests-mx32/epoll_create.gen.test
index 841da6d08..277a5aabc 100755
--- a/tests-mx32/epoll_create.gen.test
+++ b/tests-mx32/epoll_create.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_create -a17); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_create -a17 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a17
+run_strace_match_diff -a17
diff --git a/tests-mx32/epoll_create1.gen.test b/tests-mx32/epoll_create1.gen.test
index c5e62a068..c510c3225 100755
--- a/tests-mx32/epoll_create1.gen.test
+++ b/tests-mx32/epoll_create1.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_create1 -a28); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_create1 -a28 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a28
+run_strace_match_diff -a28
diff --git a/tests-mx32/epoll_ctl.gen.test b/tests-mx32/epoll_ctl.gen.test
index 68c96eb82..dba65f7d6 100755
--- a/tests-mx32/epoll_ctl.gen.test
+++ b/tests-mx32/epoll_ctl.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_ctl ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_ctl ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/epoll_pwait.gen.test b/tests-mx32/epoll_pwait.gen.test
index c558efc4c..f98e2b55f 100755
--- a/tests-mx32/epoll_pwait.gen.test
+++ b/tests-mx32/epoll_pwait.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_pwait ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_pwait ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/epoll_wait.gen.test b/tests-mx32/epoll_wait.gen.test
index 024cc0fda..d90fbeb93 100755
--- a/tests-mx32/epoll_wait.gen.test
+++ b/tests-mx32/epoll_wait.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_wait -a26); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (epoll_wait -a26 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a26
+run_strace_match_diff -a26
diff --git a/tests-mx32/error_msg.c b/tests-mx32/error_msg.c
index 498a88213..9cb3e80c0 100644
--- a/tests-mx32/error_msg.c
+++ b/tests-mx32/error_msg.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,6 +26,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#define perror_msg_and_fail perror_msg_and_fail
+#define error_msg_and_fail error_msg_and_fail
+
#include "tests.h"
#include <errno.h>
#include <stdarg.h>
diff --git a/tests-mx32/execveat.gen.test b/tests-mx32/execveat.gen.test
index c92e4d659..180b82999 100755
--- a/tests-mx32/execveat.gen.test
+++ b/tests-mx32/execveat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (execveat ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (execveat ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/fadvise64_64.gen.test b/tests-mx32/fadvise64_64.gen.test
index 5f95b3c2f..e46bf8109 100755
--- a/tests-mx32/fadvise64_64.gen.test
+++ b/tests-mx32/fadvise64_64.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fadvise64_64 +fadvise64.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fadvise64_64 +fadvise64.test ); do not edit.
+set --
. "${srcdir=.}/fadvise64.test"
diff --git a/tests-mx32/fallocate.gen.test b/tests-mx32/fallocate.gen.test
index c6cfdb799..3bb5bbf09 100755
--- a/tests-mx32/fallocate.gen.test
+++ b/tests-mx32/fallocate.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fallocate -a18); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fallocate -a18 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a18
+run_strace_match_diff -a18
diff --git a/tests-mx32/fanotify_init.gen.test b/tests-mx32/fanotify_init.gen.test
index ee519e665..69807a7ae 100755
--- a/tests-mx32/fanotify_init.gen.test
+++ b/tests-mx32/fanotify_init.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_init ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_init ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/fanotify_mark.gen.test b/tests-mx32/fanotify_mark.gen.test
index ce16a551a..46512608a 100755
--- a/tests-mx32/fanotify_mark.gen.test
+++ b/tests-mx32/fanotify_mark.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark -a32); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fanotify_mark -a32 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a32
+run_strace_match_diff -a32
diff --git a/tests-mx32/fchdir.gen.test b/tests-mx32/fchdir.gen.test
index c80e141f3..a352a21b2 100755
--- a/tests-mx32/fchdir.gen.test
+++ b/tests-mx32/fchdir.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchdir -a11); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchdir -a11 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a11
+run_strace_match_diff -a11
diff --git a/tests-mx32/fchmod.gen.test b/tests-mx32/fchmod.gen.test
index f327fb7a9..828c9b500 100755
--- a/tests-mx32/fchmod.gen.test
+++ b/tests-mx32/fchmod.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchmod -a15); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchmod -a15 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a15
+run_strace_match_diff -a15
diff --git a/tests-mx32/fchmodat.gen.test b/tests-mx32/fchmodat.gen.test
index 9ee1f013b..364618589 100755
--- a/tests-mx32/fchmodat.gen.test
+++ b/tests-mx32/fchmodat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchmodat ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchmodat ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/fchown.gen.test b/tests-mx32/fchown.gen.test
index 63ee5454f..ec7f7c541 100755
--- a/tests-mx32/fchown.gen.test
+++ b/tests-mx32/fchown.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchown -a16); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchown -a16 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a16
+run_strace_match_diff -a16
diff --git a/tests-mx32/fchown32.gen.test b/tests-mx32/fchown32.gen.test
index d8167dd44..167058321 100755
--- a/tests-mx32/fchown32.gen.test
+++ b/tests-mx32/fchown32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchown32 -a18); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchown32 -a18 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a18
+run_strace_match_diff -a18
diff --git a/tests-mx32/fchownat.gen.test b/tests-mx32/fchownat.gen.test
index 2ec9e32c1..54bd04302 100755
--- a/tests-mx32/fchownat.gen.test
+++ b/tests-mx32/fchownat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchownat ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fchownat ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/fcntl.gen.test b/tests-mx32/fcntl.gen.test
index 83a1af485..9de26c00c 100755
--- a/tests-mx32/fcntl.gen.test
+++ b/tests-mx32/fcntl.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fcntl -a8); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fcntl -a8 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a8
+run_strace_match_diff -a8
diff --git a/tests-mx32/fcntl64.gen.test b/tests-mx32/fcntl64.gen.test
index 9d3b98ad2..fee01b66b 100755
--- a/tests-mx32/fcntl64.gen.test
+++ b/tests-mx32/fcntl64.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fcntl64 -a8); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fcntl64 -a8 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a8
+run_strace_match_diff -a8
diff --git a/tests-mx32/fdatasync.gen.test b/tests-mx32/fdatasync.gen.test
index 0dbea8ad9..9aa5f2a67 100755
--- a/tests-mx32/fdatasync.gen.test
+++ b/tests-mx32/fdatasync.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fdatasync -a14); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fdatasync -a14 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a14
+run_strace_match_diff -a14
diff --git a/tests-mx32/file_ioctl.gen.test b/tests-mx32/file_ioctl.gen.test
index f7e58f59f..0abab81a5 100755
--- a/tests-mx32/file_ioctl.gen.test
+++ b/tests-mx32/file_ioctl.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (file_ioctl +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (file_ioctl +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/filtering_fd-syntax.test b/tests-mx32/filtering_fd-syntax.test
new file mode 100755
index 000000000..4f4e9c733
--- /dev/null
+++ b/tests-mx32/filtering_fd-syntax.test
@@ -0,0 +1,60 @@
+#!/bin/sh
+#
+# Check descriptor set parsing syntax.
+#
+# Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2016-2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/syntax.sh"
+
+check_fd_qualify()
+{
+ check_e "invalid descriptor '$1'" -e"read=$2"
+ check_e "invalid descriptor '$1'" -e "read=$2"
+ check_e "invalid descriptor '$1'" -e"write=$2"
+ check_e "invalid descriptor '$1'" -e "write=$2"
+}
+
+for arg in '' , ,, ,,, ; do
+ check_fd_qualify "$arg" "$arg"
+ check_fd_qualify "!$arg" "!$arg"
+done
+
+for arg in -1 -42 \
+ not_fd \
+ 2147483648 \
+ 4294967296 \
+ ; do
+ check_fd_qualify "$arg" "$arg"
+ check_fd_qualify "$arg" "1,$arg"
+ check_fd_qualify "$arg" "$arg,1"
+ check_fd_qualify "$arg" "!$arg"
+done
+
+for arg in ! all none; do
+ check_fd_qualify "$arg" "1,$arg"
+ check_fd_qualify "!$arg" "1,!$arg"
+done
diff --git a/tests-mx32/filtering_syscall-syntax.test b/tests-mx32/filtering_syscall-syntax.test
new file mode 100755
index 000000000..8fda8dc2a
--- /dev/null
+++ b/tests-mx32/filtering_syscall-syntax.test
@@ -0,0 +1,121 @@
+#!/bin/sh
+#
+# Check syscall set parsing syntax.
+#
+# Copyright (c) 2016-2018 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2017 Nikolay Marchuk <marchuk.nikolay.a@gmail.com>
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+. "${srcdir=.}/syntax.sh"
+
+check_syscall()
+{
+ [ -z "$2" ] || check_e "invalid system call '$1'" -e"$2"
+
+ check_e "invalid system call '$1'" -e "$2"
+ check_e "invalid system call '$1'" -etrace="$2"
+ check_e "invalid system call '$1'" -e trace="$2"
+
+ check_e "invalid system call '$1'" -eabbrev="$2"
+ check_e "invalid system call '$1'" -e abbrev="$2"
+
+ check_e "invalid system call '$1'" -everbose="$2"
+ check_e "invalid system call '$1'" -e verbose="$2"
+
+ check_e "invalid system call '$1'" -eraw="$2"
+ check_e "invalid system call '$1'" -e raw="$2"
+
+ check_e "invalid system call '$1'" -einject="$2"
+ check_e "invalid system call '$1'" -e inject="$2"
+ check_e "invalid system call '$1'" -einject="$2:"
+ check_e "invalid system call '$1'" -einject="$2::"
+ check_e "invalid system call '$1'" -einject="$2:::"
+ check_e "invalid system call '$1'" -e inject="$2:"
+ check_e "invalid system call '$1'" -e inject="$2::"
+ check_e "invalid system call '$1'" -e inject="$2:::"
+ check_e "invalid system call '$1'" -einject="$2:when=3"
+ check_e "invalid system call '$1'" -e inject="$2:when=3"
+
+ check_e "invalid system call '$1'" -efault="$2"
+ check_e "invalid system call '$1'" -e fault="$2"
+ check_e "invalid system call '$1'" -efault="$2:"
+ check_e "invalid system call '$1'" -efault="$2::"
+ check_e "invalid system call '$1'" -efault="$2:::"
+ check_e "invalid system call '$1'" -e fault="$2:"
+ check_e "invalid system call '$1'" -e fault="$2::"
+ check_e "invalid system call '$1'" -e fault="$2:::"
+ check_e "invalid system call '$1'" -efault="$2:when=4"
+ check_e "invalid system call '$1'" -e fault="$2:when=4"
+}
+
+for arg in '' , ,, ,,, ; do
+ check_syscall "$arg" "$arg"
+ check_syscall "!$arg" "!$arg"
+done
+
+for arg in -1 -2 -3 -4 -5 \
+ invalid_syscall_name \
+ 0x 0y \
+ 32767 \
+ 2147483647 \
+ 2147483648 \
+ 4294967295 \
+ 4294967296 \
+ /non_syscall \
+ % %not_a_class \
+ ; do
+ check_syscall "$arg" "$arg"
+ check_syscall "$arg" "!$arg"
+ check_syscall "$arg" "1,$arg"
+done
+
+for arg in '!chdir' none all; do
+ check_syscall "$arg" "1,$arg"
+done
+
+# invalid syscall, multiple syscalls
+for arg in %desc \
+ %file \
+ %memory \
+ %process \
+ %network \
+ chdir \
+ 1 \
+ ?32767 \
+ ?invalid \
+ ?%not_a_class \
+ ?/non_syscall \
+ ; do
+ check_syscall nonsense "$arg,nonsense"
+ check_syscall nonsense "!$arg,nonsense"
+ check_syscall nonsense "nonsense,$arg"
+ check_syscall nonsense "!nonsense,$arg"
+done
+
+check_e_using_grep 'regcomp: \+id: [[:alpha:]].+' -e trace='/+id'
+check_e_using_grep 'regcomp: \*id: [[:alpha:]].+' -e trace='/*id'
+check_e_using_grep 'regcomp: \{id: [[:alpha:]].+' -e trace='/{id'
+check_e_using_grep 'regcomp: \(id: [[:alpha:]].+' -e trace='/(id'
+check_e_using_grep 'regcomp: \[id: [[:alpha:]].+' -e trace='/[id'
diff --git a/tests-mx32/finit_module.gen.test b/tests-mx32/finit_module.gen.test
index f2e56afca..5ffafd32c 100755
--- a/tests-mx32/finit_module.gen.test
+++ b/tests-mx32/finit_module.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (finit_module -a25); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (finit_module -a25 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a25
+run_strace_match_diff -a25
diff --git a/tests-mx32/flock.gen.test b/tests-mx32/flock.gen.test
index dff2bac41..67a9d8c69 100755
--- a/tests-mx32/flock.gen.test
+++ b/tests-mx32/flock.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (flock -a19); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (flock -a19 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a19
+run_strace_match_diff -a19
diff --git a/tests-mx32/fstatfs.gen.test b/tests-mx32/fstatfs.gen.test
index 3dd04d8b4..27deaf34a 100755
--- a/tests-mx32/fstatfs.gen.test
+++ b/tests-mx32/fstatfs.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fstatfs -a18); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fstatfs -a18 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a18
+run_strace_match_diff -a18
diff --git a/tests-mx32/fstatfs64.gen.test b/tests-mx32/fstatfs64.gen.test
index b9527beb6..d69372697 100755
--- a/tests-mx32/fstatfs64.gen.test
+++ b/tests-mx32/fstatfs64.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fstatfs64 -a24); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fstatfs64 -a24 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a24
+run_strace_match_diff -a24
diff --git a/tests-mx32/fsync.gen.test b/tests-mx32/fsync.gen.test
index 921e804c7..5e72cc25e 100755
--- a/tests-mx32/fsync.gen.test
+++ b/tests-mx32/fsync.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fsync -a10); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (fsync -a10 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a10
+run_strace_match_diff -a10
diff --git a/tests-mx32/ftruncate.gen.test b/tests-mx32/ftruncate.gen.test
index 709a85114..6e5926b29 100755
--- a/tests-mx32/ftruncate.gen.test
+++ b/tests-mx32/ftruncate.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ftruncate -a24); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ftruncate -a24 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a24
+run_strace_match_diff -a24
diff --git a/tests-mx32/ftruncate64.gen.test b/tests-mx32/ftruncate64.gen.test
index 4cb1fe7ad..d910f6174 100755
--- a/tests-mx32/ftruncate64.gen.test
+++ b/tests-mx32/ftruncate64.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ftruncate64 -a36); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ftruncate64 -a36 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a36
+run_strace_match_diff -a36
diff --git a/tests-mx32/futex.c b/tests-mx32/futex.c
index e1dbcb749..0c095b8f6 100644
--- a/tests-mx32/futex.c
+++ b/tests-mx32/futex.c
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -57,10 +57,11 @@
# include "xlat/futexwakecmps.h"
void futex_error(int *uaddr, int op, unsigned long val, unsigned long timeout,
- int *uaddr2, unsigned long val3, int rc)
+ int *uaddr2, unsigned long val3, int rc, const char *func, int line)
{
- perror_msg_and_fail("futex(%p, %#x, %#x, %#lx, %p, %#x) = %d",
- uaddr, op, (unsigned) val, timeout, uaddr, (unsigned) val3, rc);
+ perror_msg_and_fail("%s:%d: futex(%p, %#x, %#x, %#lx, %p, %#x) = %d",
+ func, line, uaddr, op, (unsigned) val, timeout, uaddr,
+ (unsigned) val3, rc);
}
# define CHECK_FUTEX_GENERIC(uaddr, op, val, timeout, uaddr2, val3, check, \
@@ -77,7 +78,7 @@ void futex_error(int *uaddr, int op, unsigned long val, unsigned long timeout,
if (!(check)) \
futex_error((uaddr), (op), (val), \
(unsigned long) (timeout), (int *) (uaddr2), \
- (val3), rc); \
+ (val3), rc, __func__, __LINE__); \
} while (0)
# define CHECK_FUTEX_ENOSYS(uaddr, op, val, timeout, uaddr2, val3, check) \
@@ -151,14 +152,20 @@ void invalid_op(int *val, int op, uint32_t argmask, ...)
} while (0)
/* Value which differs from one stored in int *val */
-# define VAL ((unsigned long) 0xbadda7a0facefeedLLU)
-# define VAL_PR ((unsigned) VAL)
+# define VAL ((unsigned long) 0xbadda7a0facefeedLLU)
+# define VAL_PR ((unsigned) VAL)
-# define VAL2 ((unsigned long) 0xbadda7a0ca7b100dLLU)
-# define VAL2_PR ((unsigned) VAL2)
+# define VALP ((unsigned long) 0xbadda7a01acefeedLLU)
+# define VALP_PR ((unsigned) VALP)
-# define VAL3 ((unsigned long) 0xbadda7a09caffee1LLU)
-# define VAL3_PR ((unsigned) VAL3)
+# define VAL2 ((unsigned long) 0xbadda7a0ca7b100dLLU)
+# define VAL2_PR ((unsigned) VAL2)
+
+# define VAL2P ((unsigned long) 0xbadda7a07a7b100dLLU)
+# define VAL2P_PR ((unsigned) VAL2P)
+
+# define VAL3 ((unsigned long) 0xbadda7a09caffee1LLU)
+# define VAL3_PR ((unsigned) VAL3)
int
main(int argc, char *argv[])
@@ -418,16 +425,26 @@ main(int argc, char *argv[])
/* Trying to re-queue some processes but there's nothing to re-queue */
CHECK_FUTEX(uaddr, FUTEX_REQUEUE, VAL, VAL2, uaddr2, VAL3,
- (rc == 0));
+ (rc == 0) || ((rc == -1) && (errno == EINVAL)));
printf("futex(%p, FUTEX_REQUEUE, %u, %u, %p) = %s\n",
uaddr, VAL_PR, VAL2_PR, uaddr2, sprintrc(rc));
+ CHECK_FUTEX(uaddr, FUTEX_REQUEUE, VALP, VAL2P, uaddr2, VAL3,
+ (rc == 0));
+ printf("futex(%p, FUTEX_REQUEUE, %u, %u, %p) = %s\n",
+ uaddr, VALP_PR, VAL2P_PR, uaddr2, sprintrc(rc));
+
/* Trying to re-queue some processes but there's nothing to re-queue */
CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_REQUEUE, VAL, VAL2,
- uaddr2, VAL3, (rc == 0));
+ uaddr2, VAL3, (rc == 0) || ((rc == -1) && (errno == EINVAL)));
printf("futex(%p, FUTEX_REQUEUE_PRIVATE, %u, %u, %p) = %s\n",
uaddr, VAL_PR, VAL2_PR, uaddr2, sprintrc(rc));
+ CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_REQUEUE, VALP,
+ VAL2P, uaddr2, VAL3, (rc == 0));
+ printf("futex(%p, FUTEX_REQUEUE_PRIVATE, %u, %u, %p) = %s\n",
+ uaddr, VALP_PR, VAL2P_PR, uaddr2, sprintrc(rc));
+
CHECK_INVALID_CLOCKRT(FUTEX_REQUEUE, ARG3 | ARG4 | ARG5, "%u", "%u",
"%#lx");
@@ -444,22 +461,38 @@ main(int argc, char *argv[])
/* Comparison re-queue with wrong val value */
CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VAL, VAL2, uaddr2, VAL3,
- (rc == -1) && (errno == EAGAIN));
+ (rc == -1) && (errno == EAGAIN || errno == EINVAL));
printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n",
uaddr, VAL_PR, VAL2_PR, uaddr2, VAL3_PR, sprintrc(rc));
+ CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VALP, VAL2P, uaddr2, VAL3,
+ (rc == -1) && (errno == EAGAIN));
+ printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n",
+ uaddr, VALP_PR, VAL2P_PR, uaddr2, VAL3_PR, sprintrc(rc));
+
/* Successful comparison re-queue */
CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VAL, VAL2, uaddr2, *uaddr,
- (rc == 0));
+ (rc == 0) || ((rc == -1) && (errno == EINVAL)));
printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n",
uaddr, VAL_PR, VAL2_PR, uaddr2, *uaddr, sprintrc(rc));
+ CHECK_FUTEX(uaddr, FUTEX_CMP_REQUEUE, VALP, VAL2P, uaddr2, *uaddr,
+ (rc == 0));
+ printf("futex(%p, FUTEX_CMP_REQUEUE, %u, %u, %p, %u) = %s\n",
+ uaddr, VALP_PR, VAL2P_PR, uaddr2, *uaddr, sprintrc(rc));
+
/* Successful comparison re-queue */
CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_CMP_REQUEUE, VAL,
- VAL2, uaddr2, *uaddr, (rc == 0));
+ VAL2, uaddr2, *uaddr,
+ (rc == 0) || ((rc == -1) && (errno == EINVAL)));
printf("futex(%p, FUTEX_CMP_REQUEUE_PRIVATE, %u, %u, %p, %u) = %s\n",
uaddr, VAL_PR, VAL2_PR, uaddr2, *uaddr, sprintrc(rc));
+ CHECK_FUTEX_ENOSYS(uaddr, FUTEX_PRIVATE_FLAG | FUTEX_CMP_REQUEUE, VALP,
+ VAL2P, uaddr2, *uaddr, (rc == 0));
+ printf("futex(%p, FUTEX_CMP_REQUEUE_PRIVATE, %u, %u, %p, %u) = %s\n",
+ uaddr, VALP_PR, VAL2P_PR, uaddr2, *uaddr, sprintrc(rc));
+
CHECK_INVALID_CLOCKRT(FUTEX_CMP_REQUEUE, ARG3 | ARG4 | ARG5 | ARG6,
"%u", "%u", "%#lx", "%u");
diff --git a/tests-mx32/futimesat.gen.test b/tests-mx32/futimesat.gen.test
index c3add8c32..80d7a8bc5 100755
--- a/tests-mx32/futimesat.gen.test
+++ b/tests-mx32/futimesat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (futimesat -a28); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (futimesat -a28 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a28
+run_strace_match_diff -a28
diff --git a/tests-mx32/gen_tests.am b/tests-mx32/gen_tests.am
index 71e001357..29d8c6438 100644
--- a/tests-mx32/gen_tests.am
+++ b/tests-mx32/gen_tests.am
@@ -1,9 +1,12 @@
# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in; do not edit.
-GEN_TESTS = _newselect.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test group_req.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_loop.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kcmp-y.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_crypto.gen.test netlink_generic.gen.test netlink_kobject_uevent.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test nfnetlink_osf.gen.test nfnetlink_queue.gen.test nfnetlink_ulog.gen.test nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test nlattr_inet_diag_msg.gen.test nlattr_inet_diag_req_compat.gen.test nlattr_inet_diag_req_v2.gen.test nlattr_mdba_mdb_entry.gen.test nlattr_mdba_router_port.gen.test nlattr_ndmsg.gen.test nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test nlattr_tc_stats.gen.test nlattr_tca_stab.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test oldfstat.gen.test oldlstat.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test printpath-umovestr.gen.test printpath-umovestr-peekdata.gen.test printpath-umovestr-undumpable.gen.test printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test printstrn-umoven-undumpable.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test seccomp_get_action_avail.gen.test select.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test socketcall.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
+GEN_TESTS = _newselect.gen.test _newselect-P.gen.test accept.gen.test accept4.gen.test access.gen.test acct.gen.test add_key.gen.test adjtimex.gen.test aio.gen.test alarm.gen.test bpf.gen.test bpf-v.gen.test btrfs.gen.test chmod.gen.test chown.gen.test chown32.gen.test chroot.gen.test clock.gen.test clock_adjtime.gen.test clock_nanosleep.gen.test clock_xettime.gen.test copy_file_range.gen.test creat.gen.test delete_module.gen.test dup.gen.test dup2.gen.test dup3.gen.test epoll_create.gen.test epoll_create1.gen.test epoll_ctl.gen.test epoll_pwait.gen.test epoll_wait.gen.test erestartsys.gen.test execveat.gen.test execveat-v.gen.test faccessat.gen.test fadvise64_64.gen.test fallocate.gen.test fanotify_init.gen.test fanotify_mark.gen.test fchdir.gen.test fchmod.gen.test fchmodat.gen.test fchown.gen.test fchown32.gen.test fchownat.gen.test fcntl.gen.test fcntl64.gen.test fdatasync.gen.test file_handle.gen.test file_ioctl.gen.test finit_module.gen.test flock.gen.test fork-f.gen.test fstat.gen.test fstat64.gen.test fstatat64.gen.test fstatfs.gen.test fstatfs64.gen.test fsync.gen.test ftruncate.gen.test ftruncate64.gen.test futimesat.gen.test get_mempolicy.gen.test getcpu.gen.test getcwd.gen.test getdents.gen.test getdents64.gen.test getegid.gen.test getegid32.gen.test geteuid.gen.test geteuid32.gen.test getgid.gen.test getgid32.gen.test getgroups.gen.test getgroups32.gen.test getpeername.gen.test getpgrp.gen.test getpid.gen.test getppid.gen.test getrandom.gen.test getresgid.gen.test getresgid32.gen.test getresuid.gen.test getresuid32.gen.test getrlimit.gen.test getrusage.gen.test getsid.gen.test getsockname.gen.test gettid.gen.test getuid32.gen.test getxxid.gen.test group_req.gen.test inet-cmsg.gen.test init_module.gen.test inotify.gen.test inotify_init1.gen.test int_0x80.gen.test ioctl_block.gen.test ioctl_dm.gen.test ioctl_dm-v.gen.test ioctl_evdev.gen.test ioctl_evdev-v.gen.test ioctl_kvm_run.gen.test ioctl_loop.gen.test ioctl_loop-nv.gen.test ioctl_loop-v.gen.test ioctl_mtd.gen.test ioctl_nsfs.gen.test ioctl_rtc.gen.test ioctl_rtc-v.gen.test ioctl_scsi.gen.test ioctl_sg_io_v3.gen.test ioctl_sg_io_v4.gen.test ioctl_sock_gifconf.gen.test ioctl_uffdio.gen.test ioctl_v4l2.gen.test ioperm.gen.test iopl.gen.test ioprio.gen.test ip_mreq.gen.test ipc.gen.test ipc_msg.gen.test ipc_sem.gen.test ipc_shm.gen.test kcmp.gen.test kcmp-y.gen.test kexec_file_load.gen.test kexec_load.gen.test keyctl.gen.test kill.gen.test lchown.gen.test lchown32.gen.test link.gen.test linkat.gen.test lookup_dcookie.gen.test lstat.gen.test lstat64.gen.test madvise.gen.test mbind.gen.test membarrier.gen.test memfd_create.gen.test migrate_pages.gen.test mincore.gen.test mkdir.gen.test mkdirat.gen.test mknod.gen.test mknodat.gen.test mlock.gen.test mlock2.gen.test mlockall.gen.test mmap64.gen.test mmsg.gen.test mmsg-silent.gen.test mmsg_name.gen.test mmsg_name-v.gen.test modify_ldt.gen.test mount.gen.test move_pages.gen.test mq.gen.test mq_sendrecv.gen.test mq_sendrecv-read.gen.test mq_sendrecv-write.gen.test msg_control.gen.test msg_control-v.gen.test msg_name.gen.test munlockall.gen.test nanosleep.gen.test net-icmp_filter.gen.test net-sockaddr.gen.test netlink_audit.gen.test netlink_crypto.gen.test netlink_generic.gen.test netlink_kobject_uevent.gen.test netlink_netfilter.gen.test netlink_protocol.gen.test netlink_route.gen.test netlink_selinux.gen.test netlink_xfrm.gen.test newfstatat.gen.test nlattr.gen.test nfnetlink_acct.gen.test nfnetlink_cthelper.gen.test nfnetlink_ctnetlink.gen.test nfnetlink_ctnetlink_exp.gen.test nfnetlink_cttimeout.gen.test nfnetlink_ipset.gen.test nfnetlink_nft_compat.gen.test nfnetlink_nftables.gen.test nfnetlink_osf.gen.test nfnetlink_queue.gen.test nfnetlink_ulog.gen.test nlattr_crypto_user_alg.gen.test nlattr_br_port_msg.gen.test nlattr_dcbmsg.gen.test nlattr_fib_rule_hdr.gen.test nlattr_ifaddrlblmsg.gen.test nlattr_ifaddrmsg.gen.test nlattr_ifinfomsg.gen.test nlattr_ifla_brport.gen.test nlattr_ifla_port.gen.test nlattr_ifla_xdp.gen.test nlattr_inet_diag_msg.gen.test nlattr_inet_diag_req_compat.gen.test nlattr_inet_diag_req_v2.gen.test nlattr_mdba_mdb_entry.gen.test nlattr_mdba_router_port.gen.test nlattr_ndmsg.gen.test nlattr_ndtmsg.gen.test nlattr_netconfmsg.gen.test nlattr_netlink_diag_msg.gen.test nlattr_nlmsgerr.gen.test nlattr_packet_diag_msg.gen.test nlattr_rtgenmsg.gen.test nlattr_rtmsg.gen.test nlattr_smc_diag_msg.gen.test nlattr_tc_stats.gen.test nlattr_tca_stab.gen.test nlattr_tcamsg.gen.test nlattr_tcmsg.gen.test nlattr_unix_diag_msg.gen.test old_mmap.gen.test old_mmap-P.gen.test old_mmap-v-none.gen.test oldfstat.gen.test oldlstat.gen.test oldselect.gen.test oldselect-P.gen.test oldselect-efault.gen.test oldselect-efault-P.gen.test oldstat.gen.test open.gen.test openat.gen.test osf_utimes.gen.test pause.gen.test perf_event_open.gen.test perf_event_open_nonverbose.gen.test perf_event_open_unabbrev.gen.test pipe2.gen.test pkey_alloc.gen.test pkey_free.gen.test pkey_mprotect.gen.test ppoll.gen.test ppoll-P.gen.test ppoll-v.gen.test pread64-pwrite64.gen.test preadv.gen.test preadv-pwritev.gen.test preadv2-pwritev2.gen.test printstr.gen.test printpath-umovestr.gen.test printpath-umovestr-peekdata.gen.test printpath-umovestr-undumpable.gen.test printstrn-umoven.gen.test printstrn-umoven-peekdata.gen.test printstrn-umoven-undumpable.gen.test prlimit64.gen.test process_vm_readv.gen.test process_vm_writev.gen.test pselect6.gen.test ptrace.gen.test pwritev.gen.test quotactl.gen.test quotactl-v.gen.test quotactl-xfs.gen.test quotactl-xfs-v.gen.test read-write.gen.test readahead.gen.test readdir.gen.test readlink.gen.test readlinkat.gen.test reboot.gen.test recvfrom.gen.test recvmmsg-timeout.gen.test recvmsg.gen.test regex.gen.test remap_file_pages.gen.test rename.gen.test renameat.gen.test renameat2.gen.test request_key.gen.test riscv_flush_icache.gen.test rmdir.gen.test rt_sigpending.gen.test rt_sigprocmask.gen.test rt_sigqueueinfo.gen.test rt_sigreturn.gen.test rt_sigsuspend.gen.test rt_sigtimedwait.gen.test rt_tgsigqueueinfo.gen.test s390_guarded_storage.gen.test s390_guarded_storage-v.gen.test s390_pci_mmio_read_write.gen.test s390_runtime_instr.gen.test s390_sthyi.gen.test s390_sthyi-v.gen.test sched.gen.test sched_get_priority_mxx.gen.test sched_rr_get_interval.gen.test sched_xetaffinity.gen.test sched_xetattr.gen.test sched_xetparam.gen.test sched_xetscheduler.gen.test sched_yield.gen.test seccomp-filter.gen.test seccomp-filter-v.gen.test seccomp_get_action_avail.gen.test select.gen.test select-P.gen.test semop.gen.test sendfile.gen.test sendfile64.gen.test set_mempolicy.gen.test setdomainname.gen.test setfsgid.gen.test setfsgid32.gen.test setfsuid.gen.test setfsuid32.gen.test setgid.gen.test setgid32.gen.test setgroups.gen.test setgroups32.gen.test sethostname.gen.test setns.gen.test setregid.gen.test setregid32.gen.test setresgid.gen.test setresgid32.gen.test setresuid.gen.test setresuid32.gen.test setreuid.gen.test setreuid32.gen.test setrlimit.gen.test setuid.gen.test setuid32.gen.test shmxt.gen.test shutdown.gen.test sigaction.gen.test siginfo.gen.test signal.gen.test signal_receive.gen.test signalfd4.gen.test sigpending.gen.test sigprocmask.gen.test sigreturn.gen.test sigsuspend.gen.test so_linger.gen.test so_peercred.gen.test sock_filter-v.gen.test socketcall.gen.test sockopt-sol_netlink.gen.test splice.gen.test stat.gen.test stat64.gen.test statfs.gen.test statfs64.gen.test statx.gen.test swap.gen.test sxetmask.gen.test symlink.gen.test symlinkat.gen.test sync.gen.test sync_file_range.gen.test sync_file_range2.gen.test sysinfo.gen.test syslog.gen.test tee.gen.test time.gen.test timer_create.gen.test timer_xettime.gen.test timerfd_xettime.gen.test times.gen.test times-fail.gen.test trace_fstat.gen.test trace_fstatfs.gen.test trace_lstat.gen.test trace_question.gen.test trace_stat.gen.test trace_stat_like.gen.test trace_statfs.gen.test trace_statfs_like.gen.test truncate.gen.test truncate64.gen.test ugetrlimit.gen.test umask.gen.test umoven-illptr.gen.test umovestr-illptr.gen.test umovestr3.gen.test unlink.gen.test unlinkat.gen.test unshare.gen.test userfaultfd.gen.test ustat.gen.test utime.gen.test utimensat.gen.test utimes.gen.test vfork-f.gen.test vhangup.gen.test vmsplice.gen.test wait4.gen.test wait4-v.gen.test waitid.gen.test waitid-v.gen.test waitpid.gen.test xattr.gen.test xattr-strings.gen.test xet_robust_list.gen.test xetitimer.gen.test xetpgid.gen.test xetpriority.gen.test xettimeofday.gen.test
$(srcdir)/_newselect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/_newselect-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/accept.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -295,21 +298,36 @@ $(srcdir)/int_0x80.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(srcdir)/ioctl_block.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_dm.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/ioctl_dm-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_evdev.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
$(srcdir)/ioctl_evdev-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_kvm_run.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_loop.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_loop-nv.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_loop-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
$(srcdir)/ioctl_mtd.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_nsfs.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_rtc.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -325,6 +343,9 @@ $(srcdir)/ioctl_sg_io_v3.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_test
$(srcdir)/ioctl_sg_io_v4.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ioctl_sock_gifconf.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ioctl_uffdio.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -448,6 +469,9 @@ $(srcdir)/mmsg_name.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(srcdir)/mmsg_name-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/modify_ldt.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/mount.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -643,12 +667,30 @@ $(srcdir)/nlattr_unix_diag_msg.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/ge
$(srcdir)/old_mmap.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/old_mmap-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/old_mmap-v-none.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/oldfstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
$(srcdir)/oldlstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/oldselect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/oldselect-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/oldselect-efault.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/oldselect-efault-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/oldstat.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -688,6 +730,9 @@ $(srcdir)/pkey_mprotect.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests
$(srcdir)/ppoll.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/ppoll-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/ppoll-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -799,6 +844,9 @@ $(srcdir)/renameat2.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(srcdir)/request_key.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/riscv_flush_icache.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/rmdir.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -823,6 +871,24 @@ $(srcdir)/rt_sigtimedwait.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tes
$(srcdir)/rt_tgsigqueueinfo.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/s390_guarded_storage.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_guarded_storage-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_pci_mmio_read_write.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_runtime_instr.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_sthyi.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
+$(srcdir)/s390_sthyi-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/sched.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -859,6 +925,9 @@ $(srcdir)/seccomp_get_action_avail.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir
$(srcdir)/select.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/select-P.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/semop.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
@@ -982,6 +1051,9 @@ $(srcdir)/sock_filter-v.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests
$(srcdir)/socketcall.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
+$(srcdir)/sockopt-sol_netlink.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
+ $(AM_V_GEN) $^ $@
+
$(srcdir)/splice.gen.test: $(abs_srcdir)/gen_tests.sh $(srcdir)/gen_tests.in
$(AM_V_GEN) $^ $@
diff --git a/tests-mx32/gen_tests.in b/tests-mx32/gen_tests.in
index 091bbe594..ea33892f8 100644
--- a/tests-mx32/gen_tests.in
+++ b/tests-mx32/gen_tests.in
@@ -1,6 +1,6 @@
# Input for gen_tests.sh
#
-# Copyright (c) 2017 The strace developers.
+# Copyright (c) 2017-2018 The strace developers.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -26,6 +26,7 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
_newselect
+_newselect-P -e trace=_newselect -P /dev/full 9>>/dev/full
accept -a22
accept4 -a37
access -a30 -P access_sample
@@ -123,16 +124,22 @@ inotify -a23 -e trace=inotify_add_watch,inotify_rm_watch
inotify_init1 -a27
int_0x80 -a11 -e trace=getgid32
ioctl_block +ioctl.test
+ioctl_dm +ioctl.test -s9
+ioctl_dm-v +ioctl.test -v -s9
ioctl_evdev +ioctl.test
-ioctl_evdev-v +ioctl-v.sh
+ioctl_evdev-v +ioctl.test -v
+ioctl_kvm_run +ioctl.test -a36 -y
ioctl_loop +ioctl.test
-ioctl_loop-v +ioctl-v.sh
+ioctl_loop-nv +ioctl.test -a22 -e verbose=none
+ioctl_loop-v +ioctl.test -v
ioctl_mtd +ioctl.test
+ioctl_nsfs +ioctl.test -esignal=none
ioctl_rtc +ioctl.test
-ioctl_rtc-v +ioctl-v.sh
+ioctl_rtc-v +ioctl.test -v
ioctl_scsi +ioctl.test
ioctl_sg_io_v3 +ioctl.test
ioctl_sg_io_v4 +ioctl.test
+ioctl_sock_gifconf +ioctl.test -a28 -s1
ioctl_uffdio +ioctl.test
ioctl_v4l2 +ioctl.test
ioperm -a27
@@ -174,6 +181,7 @@ mmsg -e read=0 -e write=1 -e trace=recvmmsg,sendmmsg
mmsg-silent -a25 -e verbose=none -e trace=sendmmsg,recvmmsg
mmsg_name -a25 -e trace=sendmmsg,recvmmsg
mmsg_name-v -v -a25 -e trace=sendmmsg,recvmmsg
+modify_ldt -a23
mount
move_pages -s3
mq -a32 -e trace=mq_getsetattr,mq_open,mq_unlink
@@ -239,11 +247,17 @@ nlattr_tcamsg +netlink_sock_diag.test
nlattr_tcmsg +netlink_sock_diag.test
nlattr_unix_diag_msg +netlink_sock_diag.test
old_mmap -a11 -e trace=mmap
+old_mmap-P -e trace=mmap -P "/dev/full" 9>>/dev/full
+old_mmap-v-none -a11 -e trace=mmap -e verbose=none
oldfstat -a18 -v -P stat.sample
oldlstat -a32 -v -P stat.sample -P /dev/full
+oldselect -a13 -e trace=select
+oldselect-P -a13 -e trace=select -P /dev/full 9>>/dev/full
+oldselect-efault -a13 -e trace=select
+oldselect-efault-P -a13 -e trace=select -P /dev/full 9>>/dev/full
oldstat -a32 -v -P stat.sample -P /dev/full
open -a30 -P $NAME.sample
-openat -P $NAME.sample
+openat -a36 -P $NAME.sample
osf_utimes -a21
pause -a8 -esignal=none
perf_event_open -a1
@@ -254,6 +268,7 @@ pkey_alloc -a17
pkey_free -a13
pkey_mprotect -a37
ppoll -s2
+ppoll-P -s2 -e trace=ppoll -P /dev/full 9>>/dev/full
ppoll-v -v -s2 -e trace=ppoll
pread64-pwrite64 -a21 -eread=0 -ewrite=1 -e trace=pread64,pwrite64 -P pread64-pwrite64-tmpfile -P /dev/zero -P /dev/null
preadv -a21
@@ -281,7 +296,7 @@ readahead -a1
readdir -a16
readlink -xx
readlinkat -xx
-reboot
+reboot -s 256
recvfrom -a35
recvmmsg-timeout -a25 -e trace=recvmmsg
recvmsg -eread=0 -ewrite=1 -e trace=recvmsg,sendmsg
@@ -291,6 +306,7 @@ rename -a35
renameat
renameat2
request_key -a33 -s12
+riscv_flush_icache -a34
rmdir -a22
rt_sigpending -a20
rt_sigprocmask
@@ -299,6 +315,12 @@ rt_sigreturn -esignal='!USR1'
rt_sigsuspend -a20 -esignal=none
rt_sigtimedwait -a38
rt_tgsigqueueinfo -esignal=none
+s390_guarded_storage -a32
+s390_guarded_storage-v -e trace=s390_guarded_storage -a32 -v
+s390_pci_mmio_read_write -e trace=s390_pci_mmio_read,s390_pci_mmio_write -a30
+s390_runtime_instr -a50
+s390_sthyi -a47
+s390_sthyi-v -e trace=s390_sthyi -a47 -v
sched test_trace_expr times -e/sched
sched_get_priority_mxx -a33 -e trace=sched_get_priority_min,sched_get_priority_max
sched_rr_get_interval -a31
@@ -311,6 +333,7 @@ seccomp-filter -e trace=seccomp
seccomp-filter-v -v -e trace=seccomp
seccomp_get_action_avail -e trace=seccomp
select -a36
+select-P -a36 -e trace=select -P /dev/full 9>>/dev/full
semop -a32 -e trace=semop,semtimedop
sendfile -a27
sendfile64 -a29
@@ -352,6 +375,7 @@ so_linger -e trace=getsockopt,setsockopt
so_peercred -e trace=getsockopt
sock_filter-v -v -e trace=getsockopt,setsockopt
socketcall -a20
+sockopt-sol_netlink -e trace=getsockopt,setsockopt
splice
stat -a32 -v -P stat.sample -P /dev/full
stat64 -a32 -v -P stat.sample -P /dev/full
diff --git a/tests-mx32/gen_tests.sh b/tests-mx32/gen_tests.sh
index b06243658..b41983eed 100755
--- a/tests-mx32/gen_tests.sh
+++ b/tests-mx32/gen_tests.sh
@@ -1,6 +1,7 @@
#!/bin/sh -efu
#
# Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2017-2018 The strace developers.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -54,7 +55,7 @@ fi
names=
-while read -r name args; do {
+while read -r name arg0 args; do {
[ -n "${name###*}" ] || continue
if [ -z "$match" ]; then
names="$names $name"
@@ -65,13 +66,14 @@ while read -r name args; do {
hdr="\
#!/bin/sh -efu
-# Generated by $0 from $input ($name $args); do not edit."
+# Generated by $0 from $input ($name $arg0 $args); do not edit."
- case "$args" in
+ case "$arg0" in
+*)
cat <<-EOF
$hdr
- . "\${srcdir=.}/${args#+}"
+ set -- $args
+ . "\${srcdir=.}/${arg0#+}"
EOF
;;
@@ -79,7 +81,7 @@ while read -r name args; do {
cat <<-EOF
$hdr
. "\${srcdir=.}/init.sh"
- run_strace_match_diff $args
+ run_strace_match_diff $arg0 $args
EOF
;;
@@ -87,7 +89,7 @@ while read -r name args; do {
cat <<-EOF
$hdr
. "\${srcdir=.}/init.sh"
- $args
+ $arg0 $args
EOF
;;
esac > "$output"
diff --git a/tests-mx32/get_regs.test b/tests-mx32/get_regs.test
index c673fe950..eb69137b9 100755
--- a/tests-mx32/get_regs.test
+++ b/tests-mx32/get_regs.test
@@ -36,7 +36,7 @@ run_prog ../gettid > /dev/null
run_strace -qq -esignal=none -eraw=all -etrace=none ../gettid > /dev/null
run_strace -qq -esignal=none -eraw=all -eptrace -o '|grep -c ^ptrace > less' \
- -- ${STRACE##* } -o "$LOG" $args > /dev/null
+ -- "$STRACE_EXE" -o "$LOG" $args > /dev/null
[ "$(cat less)" -gt 0 ] ||
fail_ "$STRACE $args failed to catch any ptrace syscalls"
@@ -44,7 +44,7 @@ run_strace -qq -esignal=none -eraw=all -eptrace -o '|grep -c ^ptrace > less' \
run_strace -qq -esignal=none -eraw=all -etrace=all ../gettid > /dev/null
run_strace -qq -esignal=none -eraw=all -eptrace -o '|grep -c ^ptrace > more' \
- -- ${STRACE##* } -o "$LOG" $args > /dev/null
+ -- "$STRACE_EXE" -o "$LOG" $args > /dev/null
[ "$(cat more)" -gt 0 ] ||
fail_ "$STRACE $args failed to catch any ptrace syscalls"
diff --git a/tests-mx32/getcpu.gen.test b/tests-mx32/getcpu.gen.test
index 44d9a4b81..ae38aaa04 100755
--- a/tests-mx32/getcpu.gen.test
+++ b/tests-mx32/getcpu.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getcpu -a25); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getcpu -a25 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a25
+run_strace_match_diff -a25
diff --git a/tests-mx32/getcwd.c b/tests-mx32/getcwd.c
index 0c32f8dd4..2020df40f 100644
--- a/tests-mx32/getcwd.c
+++ b/tests-mx32/getcwd.c
@@ -4,9 +4,9 @@
#ifdef __NR_getcwd
+# include <limits.h>
# include <stdio.h>
# include <unistd.h>
-# include <sys/param.h>
int
main(void)
diff --git a/tests-mx32/getcwd.gen.test b/tests-mx32/getcwd.gen.test
index af2ff0838..f783a5b10 100755
--- a/tests-mx32/getcwd.gen.test
+++ b/tests-mx32/getcwd.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getcwd -a18); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getcwd -a18 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a18
+run_strace_match_diff -a18
diff --git a/tests-mx32/getegid.gen.test b/tests-mx32/getegid.gen.test
index d6fecc23d..ddf8fa9a0 100755
--- a/tests-mx32/getegid.gen.test
+++ b/tests-mx32/getegid.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getegid +getuid.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getegid +getuid.test ); do not edit.
+set --
. "${srcdir=.}/getuid.test"
diff --git a/tests-mx32/getegid32.gen.test b/tests-mx32/getegid32.gen.test
index 38c4a4b23..a773f56aa 100755
--- a/tests-mx32/getegid32.gen.test
+++ b/tests-mx32/getegid32.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getegid32 +getuid.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getegid32 +getuid.test ); do not edit.
+set --
. "${srcdir=.}/getuid.test"
diff --git a/tests-mx32/geteuid.gen.test b/tests-mx32/geteuid.gen.test
index 9e8c12f82..c7da2aa9e 100755
--- a/tests-mx32/geteuid.gen.test
+++ b/tests-mx32/geteuid.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (geteuid +getuid.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (geteuid +getuid.test ); do not edit.
+set --
. "${srcdir=.}/getuid.test"
diff --git a/tests-mx32/geteuid32.gen.test b/tests-mx32/geteuid32.gen.test
index 5b7833119..75c3f12e7 100755
--- a/tests-mx32/geteuid32.gen.test
+++ b/tests-mx32/geteuid32.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (geteuid32 +getuid.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (geteuid32 +getuid.test ); do not edit.
+set --
. "${srcdir=.}/getuid.test"
diff --git a/tests-mx32/getgid.gen.test b/tests-mx32/getgid.gen.test
index 5a87aeeb3..fc6ac3bc9 100755
--- a/tests-mx32/getgid.gen.test
+++ b/tests-mx32/getgid.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getgid +getuid.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getgid +getuid.test ); do not edit.
+set --
. "${srcdir=.}/getuid.test"
diff --git a/tests-mx32/getgid32.gen.test b/tests-mx32/getgid32.gen.test
index 05e2d70ca..b3a87561b 100755
--- a/tests-mx32/getgid32.gen.test
+++ b/tests-mx32/getgid32.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getgid32 +getuid.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getgid32 +getuid.test ); do not edit.
+set --
. "${srcdir=.}/getuid.test"
diff --git a/tests-mx32/getgroups.gen.test b/tests-mx32/getgroups.gen.test
index 48b09be94..ae196d051 100755
--- a/tests-mx32/getgroups.gen.test
+++ b/tests-mx32/getgroups.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getgroups -a17); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getgroups -a17 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a17
+run_strace_match_diff -a17
diff --git a/tests-mx32/getgroups32.gen.test b/tests-mx32/getgroups32.gen.test
index 74637d0e2..54b71d5f3 100755
--- a/tests-mx32/getgroups32.gen.test
+++ b/tests-mx32/getgroups32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getgroups32 -a19); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getgroups32 -a19 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a19
+run_strace_match_diff -a19
diff --git a/tests-mx32/getpeername.gen.test b/tests-mx32/getpeername.gen.test
index 66fb0a92b..020583ab0 100755
--- a/tests-mx32/getpeername.gen.test
+++ b/tests-mx32/getpeername.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getpeername -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getpeername -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/getpgrp.gen.test b/tests-mx32/getpgrp.gen.test
index 1ec48e9c2..26989cdbb 100755
--- a/tests-mx32/getpgrp.gen.test
+++ b/tests-mx32/getpgrp.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getpgrp -a10); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getpgrp -a10 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a10
+run_strace_match_diff -a10
diff --git a/tests-mx32/getpid.gen.test b/tests-mx32/getpid.gen.test
index 469177496..2a3eb1cf4 100755
--- a/tests-mx32/getpid.gen.test
+++ b/tests-mx32/getpid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getpid -a9); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getpid -a9 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a9
+run_strace_match_diff -a9
diff --git a/tests-mx32/getppid.gen.test b/tests-mx32/getppid.gen.test
index 52116a0aa..655b0b7df 100755
--- a/tests-mx32/getppid.gen.test
+++ b/tests-mx32/getppid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getppid -a10); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getppid -a10 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a10
+run_strace_match_diff -a10
diff --git a/tests-mx32/getresgid.gen.test b/tests-mx32/getresgid.gen.test
index f53bccce4..dc32c62c8 100755
--- a/tests-mx32/getresgid.gen.test
+++ b/tests-mx32/getresgid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getresgid -a25); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getresgid -a25 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a25
+run_strace_match_diff -a25
diff --git a/tests-mx32/getresgid32.gen.test b/tests-mx32/getresgid32.gen.test
index 5f00506fe..0ee282995 100755
--- a/tests-mx32/getresgid32.gen.test
+++ b/tests-mx32/getresgid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getresgid32 -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getresgid32 -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/getresuid.gen.test b/tests-mx32/getresuid.gen.test
index e947a94eb..b0f478ce3 100755
--- a/tests-mx32/getresuid.gen.test
+++ b/tests-mx32/getresuid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getresuid -a25); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getresuid -a25 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a25
+run_strace_match_diff -a25
diff --git a/tests-mx32/getresuid32.gen.test b/tests-mx32/getresuid32.gen.test
index b088a2206..1b2f232ce 100755
--- a/tests-mx32/getresuid32.gen.test
+++ b/tests-mx32/getresuid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getresuid32 -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getresuid32 -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/getrlimit.gen.test b/tests-mx32/getrlimit.gen.test
index b97c176b1..08daf2d03 100755
--- a/tests-mx32/getrlimit.gen.test
+++ b/tests-mx32/getrlimit.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getrlimit -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getrlimit -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/getrusage.gen.test b/tests-mx32/getrusage.gen.test
index c4fb182b2..161818aa2 100755
--- a/tests-mx32/getrusage.gen.test
+++ b/tests-mx32/getrusage.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getrusage -v); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getrusage -v ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -v
+run_strace_match_diff -v
diff --git a/tests-mx32/getsid.gen.test b/tests-mx32/getsid.gen.test
index 123f1775e..2b9084a4d 100755
--- a/tests-mx32/getsid.gen.test
+++ b/tests-mx32/getsid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getsid -a10); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getsid -a10 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a10
+run_strace_match_diff -a10
diff --git a/tests-mx32/getsockname.gen.test b/tests-mx32/getsockname.gen.test
index cd40d3ef1..64cdeea80 100755
--- a/tests-mx32/getsockname.gen.test
+++ b/tests-mx32/getsockname.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getsockname -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getsockname -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/gettid.gen.test b/tests-mx32/gettid.gen.test
index 1ceaa53d9..f5ad317e0 100755
--- a/tests-mx32/gettid.gen.test
+++ b/tests-mx32/gettid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (gettid -a9); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (gettid -a9 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a9
+run_strace_match_diff -a9
diff --git a/tests-mx32/getuid32.gen.test b/tests-mx32/getuid32.gen.test
index ac0d0ad65..e81eb0646 100755
--- a/tests-mx32/getuid32.gen.test
+++ b/tests-mx32/getuid32.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getuid32 +getuid.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (getuid32 +getuid.test ); do not edit.
+set --
. "${srcdir=.}/getuid.test"
diff --git a/tests-mx32/group_req.c b/tests-mx32/group_req.c
index 946fe5c0c..eb56cb7e2 100644
--- a/tests-mx32/group_req.c
+++ b/tests-mx32/group_req.c
@@ -2,6 +2,7 @@
* Check decoding of MCAST_JOIN_GROUP/MCAST_LEAVE_GROUP.
*
* Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,9 +34,9 @@
#if defined MCAST_JOIN_GROUP && defined MCAST_LEAVE_GROUP
+# include <limits.h>
# include <stdio.h>
# include <unistd.h>
-# include <sys/param.h>
# include <sys/socket.h>
# include <arpa/inet.h>
diff --git a/tests-mx32/init_module.gen.test b/tests-mx32/init_module.gen.test
index 8948e2ec6..b6961be63 100755
--- a/tests-mx32/init_module.gen.test
+++ b/tests-mx32/init_module.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (init_module -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (init_module -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/inode_of_sockfd.c b/tests-mx32/inode_of_sockfd.c
index b227f3069..6a523c798 100644
--- a/tests-mx32/inode_of_sockfd.c
+++ b/tests-mx32/inode_of_sockfd.c
@@ -2,6 +2,7 @@
* This file is part of strace test suite.
*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,11 +30,11 @@
#include "tests.h"
#include <assert.h>
+#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
unsigned long
inode_of_sockfd(const int fd)
diff --git a/tests-mx32/inotify_init1.gen.test b/tests-mx32/inotify_init1.gen.test
index d847b500a..a1060c5d9 100755
--- a/tests-mx32/inotify_init1.gen.test
+++ b/tests-mx32/inotify_init1.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (inotify_init1 -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (inotify_init1 -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/ioctl-v.sh b/tests-mx32/ioctl-v.sh
deleted file mode 100755
index be8967126..000000000
--- a/tests-mx32/ioctl-v.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-# Check non-abbreviated decoding of ioctls.
-
-. "${srcdir=.}/init.sh"
-
-check_prog grep
-run_prog > /dev/null
-run_strace -a16 -v -eioctl $args > "$EXP"
-grep -v '^ioctl([012],' < "$LOG" > "$OUT"
-match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/ioctl.c b/tests-mx32/ioctl.c
index 3c666b0d6..af5f9ba2b 100644
--- a/tests-mx32/ioctl.c
+++ b/tests-mx32/ioctl.c
@@ -86,8 +86,13 @@ main(void)
" = -1 EBADF (%m)\n", &data);
(void) ioctl(-1, _IOR('M', 13, int), &data);
+# ifdef HAVE_STRUCT_MTD_WRITE_REQ
printf("ioctl(-1, MIXER_READ(13) or OTPSELECT, [MTD_OTP_OFF])"
" = -1 EBADF (%m)\n");
+# else
+ printf("ioctl(-1, MIXER_READ(13) or OTPSELECT, %p)"
+ " = -1 EBADF (%m)\n", &data);
+# endif
(void) ioctl(-1, _IOC(_IOC_WRITE, 0xde, 0, 0), (kernel_ulong_t) -1ULL);
printf("ioctl(-1, _IOC(_IOC_WRITE, 0xde, 0, 0), %#lx)"
diff --git a/tests-mx32/ioctl.test b/tests-mx32/ioctl.test
index 1eb469ee4..cbbadc831 100755
--- a/tests-mx32/ioctl.test
+++ b/tests-mx32/ioctl.test
@@ -6,6 +6,6 @@
check_prog grep
run_prog > /dev/null
-run_strace -a16 -eioctl $args > "$EXP"
+run_strace -a16 -eioctl "$@" $args > "$EXP"
grep -v '^ioctl([012],' < "$LOG" > "$OUT"
match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/ioctl_block.gen.test b/tests-mx32/ioctl_block.gen.test
index 0ffec6f63..8b2c3df6f 100755
--- a/tests-mx32/ioctl_block.gen.test
+++ b/tests-mx32/ioctl_block.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_block +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_block +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_dm-v.gen.test b/tests-mx32/ioctl_dm-v.gen.test
new file mode 100755
index 000000000..66fa5856b
--- /dev/null
+++ b/tests-mx32/ioctl_dm-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_dm-v +ioctl.test -v -s9); do not edit.
+set -- -v -s9
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_dm-v.test b/tests-mx32/ioctl_dm-v.test
deleted file mode 100755
index eed37c273..000000000
--- a/tests-mx32/ioctl_dm-v.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-# Check unabbreviated decoding of DM* ioctls.
-
-. "${srcdir=.}/init.sh"
-
-check_prog grep
-run_prog > /dev/null
-run_strace -a16 -s9 -veioctl $args > "$EXP"
-grep -v '^ioctl([012],' < "$LOG" > "$OUT"
-match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/ioctl_dm.c b/tests-mx32/ioctl_dm.c
index 1e831dfe8..bbdc00c6f 100644
--- a/tests-mx32/ioctl_dm.c
+++ b/tests-mx32/ioctl_dm.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2016 Mikulas Patocka <mpatocka@redhat.com>
* Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -143,7 +143,7 @@ init_dm_target_spec(struct dm_target_spec *ptr, uint32_t id)
ptr->length = dts_length_base + dts_length_step * id;
ptr->status = dts_status_base + dts_status_step * id;
- strncpy(ptr->target_type, str129 +
+ memcpy(ptr->target_type, str129 +
id % (sizeof(str129) - sizeof(ptr->target_type)),
id % (sizeof(ptr->target_type) + 1));
if (id % (sizeof(ptr->target_type) + 1) < sizeof(ptr->target_type))
@@ -252,8 +252,8 @@ main(void)
/* Unterminated name/uuid */
init_s(dm_arg, min_sizeof_dm_ioctl, 0);
- strncpy(dm_arg->name, str129, sizeof(dm_arg->name));
- strncpy(dm_arg->uuid, str129, sizeof(dm_arg->uuid));
+ memcpy(dm_arg->name, str129, sizeof(dm_arg->name));
+ memcpy(dm_arg->uuid, str129, sizeof(dm_arg->uuid));
ioctl(-1, DM_VERSION, dm_arg);
printf("ioctl(-1, DM_VERSION, {version=4.1.2, data_size=%zu, "
"dev=makedev(18, 52), name=\"%.127s\"..., uuid=\"%.128s\"..., "
@@ -511,7 +511,7 @@ main(void)
target##id_next) - \
offsetof(struct dm_table_open_test, \
target##id); \
- strncpy(dm_arg_open3->param##id, str129 + id * 2, id); \
+ memcpy(dm_arg_open3->param##id, str129 + id * 2, id); \
dm_arg_open3->param##id[id] = '\0'; \
} while (0)
#define PRINT_DM_TARGET(id) \
diff --git a/tests-mx32/ioctl_dm.gen.test b/tests-mx32/ioctl_dm.gen.test
new file mode 100755
index 000000000..b60c7175a
--- /dev/null
+++ b/tests-mx32/ioctl_dm.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_dm +ioctl.test -s9); do not edit.
+set -- -s9
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_dm.test b/tests-mx32/ioctl_dm.test
deleted file mode 100755
index e9cca03bd..000000000
--- a/tests-mx32/ioctl_dm.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-# Check decoding of DM* ioctls.
-
-. "${srcdir=.}/init.sh"
-
-check_prog grep
-run_prog > /dev/null
-run_strace -a16 -s9 -eioctl $args > "$EXP"
-grep -v '^ioctl([012],' < "$LOG" > "$OUT"
-match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/ioctl_evdev-v.gen.test b/tests-mx32/ioctl_evdev-v.gen.test
index fc7e2f0bf..bf74ef4cb 100755
--- a/tests-mx32/ioctl_evdev-v.gen.test
+++ b/tests-mx32/ioctl_evdev-v.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_evdev-v +ioctl-v.sh); do not edit.
-. "${srcdir=.}/ioctl-v.sh"
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_evdev-v +ioctl.test -v); do not edit.
+set -- -v
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_evdev.gen.test b/tests-mx32/ioctl_evdev.gen.test
index 26f0a2882..68a43f7c4 100755
--- a/tests-mx32/ioctl_evdev.gen.test
+++ b/tests-mx32/ioctl_evdev.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_evdev +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_evdev +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_kvm_run.c b/tests-mx32/ioctl_kvm_run.c
new file mode 100644
index 000000000..179461430
--- /dev/null
+++ b/tests-mx32/ioctl_kvm_run.c
@@ -0,0 +1,242 @@
+/*
+ * Check decoding of KVM_* commands of ioctl syscall using /dev/kvm API.
+ * Based on kvmtest.c from https://lwn.net/Articles/658512/
+ *
+ * kvmtest.c author: Josh Triplett <josh@joshtriplett.org>
+ * Copyright (c) 2015 Intel Corporation
+ * Copyright (c) 2017-2018 The strace developers.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include "tests.h"
+
+#if defined HAVE_LINUX_KVM_H \
+ && defined HAVE_STRUCT_KVM_REGS \
+ && defined HAVE_STRUCT_KVM_SREGS \
+ && defined HAVE_STRUCT_KVM_USERSPACE_MEMORY_REGION \
+ &&(defined __x86_64__ || defined __i386__)
+
+# include <fcntl.h>
+# include <stdint.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+# include <sys/ioctl.h>
+# include <sys/mman.h>
+# include <linux/kvm.h>
+
+static int
+kvm_ioctl(int fd, unsigned long cmd, const char *cmd_str, void *arg)
+{
+ int rc = ioctl(fd, cmd, arg);
+ if (rc < 0)
+ perror_msg_and_skip("%s", cmd_str);
+ return rc;
+}
+
+#define KVM_IOCTL(fd_, cmd_, arg_) \
+ kvm_ioctl((fd_), (cmd_), #cmd_, (arg_))
+
+static const char dev[] = "/dev/kvm";
+static const char vm_dev[] = "anon_inode:kvm-vm";
+static const char vcpu_dev[] = "anon_inode:kvm-vcpu";
+static size_t page_size;
+
+extern const char code[];
+extern const unsigned short code_size;
+
+__asm__(
+ ".type code, @object \n"
+ "code: \n"
+ " mov $0xd80003f8, %edx \n"
+ " mov $'\n', %al \n"
+ " out %al, (%dx) \n"
+ " hlt \n"
+ ".size code, . - code \n"
+ ".type code_size, @object \n"
+ "code_size: \n"
+ " .short . - code \n"
+ ".size code_size, . - code_size \n"
+ );
+
+
+static void
+run_kvm(const int vcpu_fd, struct kvm_run *const run, const size_t mmap_size,
+ void *const mem)
+{
+ /* Initialize CS to point at 0, via a read-modify-write of sregs. */
+ struct kvm_sregs sregs;
+ KVM_IOCTL(vcpu_fd, KVM_GET_SREGS, &sregs);
+ printf("ioctl(%d<%s>, KVM_GET_SREGS, {cs={base=%#jx, limit=%u, selector=%u"
+ ", type=%u, present=%u, dpl=%u, db=%u, s=%u, l=%u, g=%u, avl=%u}"
+ ", ...}) = 0\n", vcpu_fd, vcpu_dev, (uintmax_t) sregs.cs.base,
+ sregs.cs.limit, sregs.cs.selector, sregs.cs.type,
+ sregs.cs.present, sregs.cs.dpl, sregs.cs.db, sregs.cs.s,
+ sregs.cs.l, sregs.cs.g, sregs.cs.avl);
+
+ sregs.cs.base = 0;
+ sregs.cs.selector = 0;
+ KVM_IOCTL(vcpu_fd, KVM_SET_SREGS, &sregs);
+ printf("ioctl(%d<%s>, KVM_SET_SREGS, {cs={base=%#jx, limit=%u"
+ ", selector=%u, type=%u, present=%u, dpl=%u, db=%u, s=%u"
+ ", l=%u, g=%u, avl=%u}, ...}) = 0\n",
+ vcpu_fd, vcpu_dev, (uintmax_t) sregs.cs.base,
+ sregs.cs.limit, sregs.cs.selector, sregs.cs.type,
+ sregs.cs.present, sregs.cs.dpl, sregs.cs.db, sregs.cs.s,
+ sregs.cs.l, sregs.cs.g, sregs.cs.avl);
+
+ /*
+ * Initialize registers: instruction pointer for our code, addends,
+ * and initial flags required by x86 architecture.
+ */
+ struct kvm_regs regs = {
+ .rip = page_size,
+ .rax = 2,
+ .rbx = 2,
+ .rflags = 0x2,
+ };
+ KVM_IOCTL(vcpu_fd, KVM_SET_REGS, &regs);
+ printf("ioctl(%d<%s>, KVM_SET_REGS, {rax=%#jx, ..."
+ ", rsp=%#jx, rbp=%#jx, ..., rip=%#jx, rflags=%#jx}) = 0\n",
+ vcpu_fd, vcpu_dev, (uintmax_t) regs.rax,
+ (uintmax_t) regs.rsp, (uintmax_t) regs.rbp,
+ (uintmax_t) regs.rip, (uintmax_t) regs.rflags);
+
+ /* Copy the code */
+ memcpy(mem, code, code_size);
+
+ const char *p = "\n";
+
+ /* Repeatedly run code and handle VM exits. */
+ for (;;) {
+ KVM_IOCTL(vcpu_fd, KVM_RUN, NULL);
+ printf("ioctl(%d<%s>, KVM_RUN, 0) = 0\n", vcpu_fd, vcpu_dev);
+
+ switch (run->exit_reason) {
+ case KVM_EXIT_HLT:
+ if (p)
+ error_msg_and_fail("premature KVM_EXIT_HLT");
+ return;
+ case KVM_EXIT_IO:
+ if (run->io.direction == KVM_EXIT_IO_OUT
+ && run->io.size == 1
+ && run->io.port == 0x03f8
+ && run->io.count == 1
+ && run->io.data_offset < mmap_size
+ && p && *p == ((char *) run)[run->io.data_offset])
+ p = NULL;
+ else
+ error_msg_and_fail("unhandled KVM_EXIT_IO");
+ break;
+ case KVM_EXIT_MMIO:
+ error_msg_and_fail("Got an unexpected MMIO exit:"
+ " phys_addr %#llx,"
+ " data %02x %02x %02x %02x"
+ " %02x %02x %02x %02x,"
+ " len %u, is_write %hhu",
+ (unsigned long long) run->mmio.phys_addr,
+ run->mmio.data[0], run->mmio.data[1],
+ run->mmio.data[2], run->mmio.data[3],
+ run->mmio.data[4], run->mmio.data[5],
+ run->mmio.data[6], run->mmio.data[7],
+ run->mmio.len, run->mmio.is_write);
+
+ default:
+ error_msg_and_fail("exit_reason = %#x",
+ run->exit_reason);
+ }
+ }
+}
+
+int
+main(void)
+{
+ skip_if_unavailable("/proc/self/fd/");
+
+ int kvm = open(dev, O_RDWR);
+ if (kvm < 0)
+ perror_msg_and_skip("open: %s", dev);
+
+ /* Make sure we have the stable version of the API */
+ int ret = KVM_IOCTL(kvm, KVM_GET_API_VERSION, 0);
+ if (ret != KVM_API_VERSION)
+ error_msg_and_skip("KVM_GET_API_VERSION returned %d"
+ ", KVM_API_VERSION is %d",
+ kvm, KVM_API_VERSION);
+ printf("ioctl(%d<%s>, KVM_GET_API_VERSION, 0) = %d\n",
+ kvm, dev, ret);
+
+ int vm_fd = KVM_IOCTL(kvm, KVM_CREATE_VM, 0);
+ printf("ioctl(%d<%s>, KVM_CREATE_VM, 0) = %d<%s>\n",
+ kvm, dev, vm_fd, vm_dev);
+
+ /* Allocate one aligned page of guest memory to hold the code. */
+ page_size = get_page_size();
+ void *const mem = mmap(NULL, page_size, PROT_READ | PROT_WRITE,
+ MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+ if (mem == MAP_FAILED)
+ perror_msg_and_fail("mmap page");
+
+ /* Map it to the second page frame (to avoid the real-mode IDT at 0). */
+ struct kvm_userspace_memory_region region = {
+ .slot = 0,
+ .guest_phys_addr = page_size,
+ .memory_size = page_size,
+ .userspace_addr = (uintptr_t) mem,
+ };
+ KVM_IOCTL(vm_fd, KVM_SET_USER_MEMORY_REGION, &region);
+ printf("ioctl(%d<%s>, KVM_SET_USER_MEMORY_REGION"
+ ", {slot=0, flags=0, guest_phys_addr=%#lx, memory_size=%lu"
+ ", userspace_addr=%p}) = 0\n", vm_fd, vm_dev,
+ (unsigned long) page_size, (unsigned long) page_size, mem);
+
+ int vcpu_fd = KVM_IOCTL(vm_fd, KVM_CREATE_VCPU, NULL);
+ printf("ioctl(%d<%s>, KVM_CREATE_VCPU, 0) = %d<%s>\n",
+ vm_fd, vm_dev, vcpu_fd, vcpu_dev);
+
+ /* Map the shared kvm_run structure and following data. */
+ ret = KVM_IOCTL(kvm, KVM_GET_VCPU_MMAP_SIZE, NULL);
+ struct kvm_run *run;
+ if (ret < (int) sizeof(*run))
+ error_msg_and_fail("KVM_GET_VCPU_MMAP_SIZE returned %d < %d",
+ ret, (int) sizeof(*run));
+ printf("ioctl(%d<%s>, KVM_GET_VCPU_MMAP_SIZE, 0) = %d\n",
+ kvm, dev, ret);
+
+ const size_t mmap_size = (ret + page_size - 1) & -page_size;
+ run = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE,
+ MAP_SHARED, vcpu_fd, 0);
+ if (run == MAP_FAILED)
+ perror_msg_and_fail("mmap vcpu");
+
+ run_kvm(vcpu_fd, run, mmap_size, mem);
+
+ puts("+++ exited with 0 +++");
+ return 0;
+}
+
+#else /* !HAVE_LINUX_KVM_H */
+
+SKIP_MAIN_UNDEFINED("HAVE_LINUX_KVM_H && HAVE_STRUCT_KVM_REGS && "
+ "HAVE_STRUCT_KVM_SREGS && "
+ "HAVE_STRUCT_KVM_USERSPACE_MEMORY_REGION && "
+ "(__x86_64__ || __i386__)")
+
+#endif
diff --git a/tests-mx32/ioctl_kvm_run.gen.test b/tests-mx32/ioctl_kvm_run.gen.test
new file mode 100755
index 000000000..7ab473ba5
--- /dev/null
+++ b/tests-mx32/ioctl_kvm_run.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_kvm_run +ioctl.test -a36 -y); do not edit.
+set -- -a36 -y
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_loop-nv.gen.test b/tests-mx32/ioctl_loop-nv.gen.test
new file mode 100755
index 000000000..d9da86a2f
--- /dev/null
+++ b/tests-mx32/ioctl_loop-nv.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_loop-nv +ioctl.test -a22 -e verbose=none); do not edit.
+set -- -a22 -e verbose=none
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_loop-nv.test b/tests-mx32/ioctl_loop-nv.test
deleted file mode 100755
index 7d59cc2b7..000000000
--- a/tests-mx32/ioctl_loop-nv.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-# Check non-verbose decoding of LOOP_* ioctls.
-
-. "${srcdir=.}/init.sh"
-
-check_prog grep
-run_prog > /dev/null
-run_strace -a22 -eioctl -e verbose=none $args > "$EXP"
-grep -v '^ioctl([012],' < "$LOG" > "$OUT"
-match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/ioctl_loop-v.gen.test b/tests-mx32/ioctl_loop-v.gen.test
index 7fd9f6615..b03bf7841 100755
--- a/tests-mx32/ioctl_loop-v.gen.test
+++ b/tests-mx32/ioctl_loop-v.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_loop-v +ioctl-v.sh); do not edit.
-. "${srcdir=.}/ioctl-v.sh"
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_loop-v +ioctl.test -v); do not edit.
+set -- -v
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_loop.gen.test b/tests-mx32/ioctl_loop.gen.test
index f7aee8e57..d4ec35acc 100755
--- a/tests-mx32/ioctl_loop.gen.test
+++ b/tests-mx32/ioctl_loop.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_loop +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_loop +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_mtd.c b/tests-mx32/ioctl_mtd.c
index 6a7d94a7c..1b5be7557 100644
--- a/tests-mx32/ioctl_mtd.c
+++ b/tests-mx32/ioctl_mtd.c
@@ -30,22 +30,20 @@
#include "tests.h"
-#include <errno.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <linux/ioctl.h>
-#include <linux/version.h>
-#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0)
-# include "mtd-abi.h"
-#else
+#ifdef HAVE_STRUCT_MTD_WRITE_REQ
+
+# include <errno.h>
+# include <inttypes.h>
+# include <stdio.h>
+# include <string.h>
+# include <sys/ioctl.h>
+# include <linux/ioctl.h>
+# include <linux/version.h>
# include <mtd/mtd-abi.h>
-#endif
static const unsigned long lmagic = (unsigned long) 0xdeadbeefbadc0dedULL;
-#define TEST_NULL_ARG(cmd) \
+# define TEST_NULL_ARG(cmd) \
do { \
ioctl(-1, cmd, 0); \
if (_IOC_DIR(cmd) == _IOC_WRITE) \
@@ -60,7 +58,7 @@ static const unsigned long lmagic = (unsigned long) 0xdeadbeefbadc0dedULL;
printf("ioctl(-1, %s, NULL) = -1 EBADF (%m)\n", #cmd); \
} while (0)
-#define TEST_erase_info_user(cmd, eiu) \
+# define TEST_erase_info_user(cmd, eiu) \
do { \
ioctl(-1, cmd, eiu); \
printf("ioctl(-1, MIXER_%s(%u) or %s, {start=%#x, length=%#x})" \
@@ -122,9 +120,9 @@ main(void)
ioctl(-1, MEMGETREGIONINFO, riu);
printf("ioctl(-1, %s, {regionindex=%#x}) = -1 EBADF (%m)\n",
"MEMGETREGIONINFO"
-#ifdef __i386__
+# ifdef __i386__
" or MTRRIOC_GET_PAGE_ENTRY"
-#endif
+# endif
, riu->regionindex);
TAIL_ALLOC_OBJECT_CONST_PTR(struct erase_info_user, eiu);
@@ -198,3 +196,9 @@ main(void)
puts("+++ exited with 0 +++");
return 0;
}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_STRUCT_MTD_WRITE_REQ")
+
+#endif
diff --git a/tests-mx32/ioctl_mtd.gen.test b/tests-mx32/ioctl_mtd.gen.test
index cbc31047c..65b000374 100755
--- a/tests-mx32/ioctl_mtd.gen.test
+++ b/tests-mx32/ioctl_mtd.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_mtd +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_mtd +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_nsfs.gen.test b/tests-mx32/ioctl_nsfs.gen.test
new file mode 100755
index 000000000..f9adc5f01
--- /dev/null
+++ b/tests-mx32/ioctl_nsfs.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_nsfs +ioctl.test -esignal=none); do not edit.
+set -- -esignal=none
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_nsfs.test b/tests-mx32/ioctl_nsfs.test
deleted file mode 100755
index acdfb6187..000000000
--- a/tests-mx32/ioctl_nsfs.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-# Check decoding of NS_* ioctls.
-
-. "${srcdir=.}/init.sh"
-
-check_prog grep
-run_prog > /dev/null
-run_strace -a16 -eioctl -esignal=none $args > "$EXP"
-grep -v '^ioctl([012],' < "$LOG" > "$OUT"
-match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/ioctl_rtc-v.gen.test b/tests-mx32/ioctl_rtc-v.gen.test
index b534a025c..820181b0c 100755
--- a/tests-mx32/ioctl_rtc-v.gen.test
+++ b/tests-mx32/ioctl_rtc-v.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_rtc-v +ioctl-v.sh); do not edit.
-. "${srcdir=.}/ioctl-v.sh"
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_rtc-v +ioctl.test -v); do not edit.
+set -- -v
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_rtc.gen.test b/tests-mx32/ioctl_rtc.gen.test
index e430a82cf..310b55889 100755
--- a/tests-mx32/ioctl_rtc.gen.test
+++ b/tests-mx32/ioctl_rtc.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_rtc +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_rtc +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_scsi.gen.test b/tests-mx32/ioctl_scsi.gen.test
index 23ac307b5..499bfc497 100755
--- a/tests-mx32/ioctl_scsi.gen.test
+++ b/tests-mx32/ioctl_scsi.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_scsi +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_scsi +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_sg_io_v3.gen.test b/tests-mx32/ioctl_sg_io_v3.gen.test
index e7e5ea503..ef8fd14da 100755
--- a/tests-mx32/ioctl_sg_io_v3.gen.test
+++ b/tests-mx32/ioctl_sg_io_v3.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_sg_io_v3 +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_sg_io_v3 +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_sg_io_v4.gen.test b/tests-mx32/ioctl_sg_io_v4.gen.test
index 575ad96a1..4aa4e4e9b 100755
--- a/tests-mx32/ioctl_sg_io_v4.gen.test
+++ b/tests-mx32/ioctl_sg_io_v4.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_sg_io_v4 +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_sg_io_v4 +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_sock_gifconf.gen.test b/tests-mx32/ioctl_sock_gifconf.gen.test
new file mode 100755
index 000000000..5d6fe2f48
--- /dev/null
+++ b/tests-mx32/ioctl_sock_gifconf.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_sock_gifconf +ioctl.test -a28 -s1); do not edit.
+set -- -a28 -s1
+. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_sock_gifconf.test b/tests-mx32/ioctl_sock_gifconf.test
deleted file mode 100755
index 22d7ea460..000000000
--- a/tests-mx32/ioctl_sock_gifconf.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-# Check decoding of SIOCGIFCONF ioctl.
-
-. "${srcdir=.}/init.sh"
-
-check_prog grep
-run_prog > /dev/null
-run_strace -a28 -s1 -eioctl $args > "$EXP"
-grep -v '^ioctl([012],' < "$LOG" > "$OUT"
-match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/ioctl_uffdio.gen.test b/tests-mx32/ioctl_uffdio.gen.test
index 80fd2a64e..ed73c5f01 100755
--- a/tests-mx32/ioctl_uffdio.gen.test
+++ b/tests-mx32/ioctl_uffdio.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_uffdio +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_uffdio +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioctl_v4l2.gen.test b/tests-mx32/ioctl_v4l2.gen.test
index cbd36ba61..4c571447f 100755
--- a/tests-mx32/ioctl_v4l2.gen.test
+++ b/tests-mx32/ioctl_v4l2.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_v4l2 +ioctl.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioctl_v4l2 +ioctl.test ); do not edit.
+set --
. "${srcdir=.}/ioctl.test"
diff --git a/tests-mx32/ioperm.gen.test b/tests-mx32/ioperm.gen.test
index 154d60ae4..bc69f69e4 100755
--- a/tests-mx32/ioperm.gen.test
+++ b/tests-mx32/ioperm.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioperm -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ioperm -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/iopl.gen.test b/tests-mx32/iopl.gen.test
index 3d9704cb6..f7769d231 100755
--- a/tests-mx32/iopl.gen.test
+++ b/tests-mx32/iopl.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (iopl -a8); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (iopl -a8 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a8
+run_strace_match_diff -a8
diff --git a/tests-mx32/ip_mreq.c b/tests-mx32/ip_mreq.c
index 3f4648ca6..12cc26118 100644
--- a/tests-mx32/ip_mreq.c
+++ b/tests-mx32/ip_mreq.c
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2015-2017 The strace developers.
+ * Copyright (c) 2015-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,9 +32,9 @@
#if defined IP_ADD_MEMBERSHIP && defined IPV6_ADD_MEMBERSHIP \
&& defined IPV6_JOIN_ANYCAST
+# include <limits.h>
# include <stdio.h>
# include <unistd.h>
-# include <sys/param.h>
# include <sys/socket.h>
# include <arpa/inet.h>
# include <net/if.h>
diff --git a/tests-mx32/ipc.gen.test b/tests-mx32/ipc.gen.test
index 5ed1f0d28..0aa757899 100755
--- a/tests-mx32/ipc.gen.test
+++ b/tests-mx32/ipc.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc -a19); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc -a19 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a19
+run_strace_match_diff -a19
diff --git a/tests-mx32/ipc_msg.gen.test b/tests-mx32/ipc_msg.gen.test
index f4fec80bd..b1f1f7e86 100755
--- a/tests-mx32/ipc_msg.gen.test
+++ b/tests-mx32/ipc_msg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg +ipc.sh); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_msg +ipc.sh ); do not edit.
+set --
. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_msgbuf.c b/tests-mx32/ipc_msgbuf.c
index d1083899b..c4af1bef3 100644
--- a/tests-mx32/ipc_msgbuf.c
+++ b/tests-mx32/ipc_msgbuf.c
@@ -38,11 +38,16 @@
static int msqid = -1;
-static void
+static int
cleanup(void)
{
- msgctl(msqid, IPC_RMID, 0);
- msqid = -1;
+ if (msqid != -1) {
+ int rc = msgctl(msqid, IPC_RMID, 0);
+ msqid = -1;
+ if (rc == -1)
+ return 77;
+ }
+ return 0;
}
int
@@ -59,10 +64,11 @@ main(void)
msqid = msgget(IPC_PRIVATE, IPC_CREAT | S_IRWXU);
if (msqid == -1)
perror_msg_and_skip("msgget");
- atexit(cleanup);
+ typedef void (*atexit_func)(void);
+ atexit((atexit_func) cleanup);
if (msgsnd(msqid, &msg, msgsz, 0) == -1)
perror_msg_and_skip("msgsnd");
if (msgrcv(msqid, &msg, msgsz, mtype, 0) != msgsz)
perror_msg_and_skip("msgrcv");
- return 0;
+ return cleanup();
}
diff --git a/tests-mx32/ipc_sem.gen.test b/tests-mx32/ipc_sem.gen.test
index 54159a647..a1c03d2bb 100755
--- a/tests-mx32/ipc_sem.gen.test
+++ b/tests-mx32/ipc_sem.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem +ipc.sh); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_sem +ipc.sh ); do not edit.
+set --
. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/ipc_shm.c b/tests-mx32/ipc_shm.c
index 66960ff9f..c7931388a 100644
--- a/tests-mx32/ipc_shm.c
+++ b/tests-mx32/ipc_shm.c
@@ -1,6 +1,7 @@
/*
* Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
* Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2017 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,6 +33,14 @@
#include <stdlib.h>
#include <sys/shm.h>
+#ifndef SHM_HUGE_SHIFT
+# define SHM_HUGE_SHIFT 26
+#endif
+
+#ifndef SHM_HUGE_MASK
+# define SHM_HUGE_MASK 0x3f
+#endif
+
#include "xlat.h"
#include "xlat/shm_resource_flags.h"
@@ -64,18 +73,54 @@ main(void)
#else
(size_t) 0x1e55c0de5dec0dedULL;
#endif
- static const int bogus_flags = 0xface1e55;
-
+ static const unsigned int bogus_ipc_shm_flags =
+ IPC_CREAT | IPC_EXCL | SHM_HUGETLB | SHM_NORESERVE;
+ static const unsigned int huge_mask = SHM_HUGE_MASK << SHM_HUGE_SHIFT;
+ static const unsigned int huge_flags = 21 << SHM_HUGE_SHIFT;
+ int bogus_flags;
int rc;
struct shmid_ds ds;
+ rc = shmget(bogus_key, bogus_size, 0);
+ printf("shmget\\(%#llx, %zu, 000\\) += %s\n",
+ zero_extend_signed_to_ull(bogus_key), bogus_size,
+ sprintrc_grep(rc));
+
+ rc = shmget(bogus_key, bogus_size, huge_flags);
+ printf("shmget\\(%#llx, %zu, %s\\|%#03o\\) += %s\n",
+ zero_extend_signed_to_ull(bogus_key), bogus_size,
+ "21<<SHM_HUGE_SHIFT", 0, sprintrc_grep(rc));
+
+ bogus_flags = 0xface1e55 & ~(bogus_ipc_shm_flags | huge_mask);
+ rc = shmget(bogus_key, bogus_size, bogus_flags);
+ printf("shmget\\(%#llx, %zu, %#x\\|%#03o\\) += %s\n",
+ zero_extend_signed_to_ull(bogus_key), bogus_size,
+ bogus_flags & ~0777,
+ bogus_flags & 0777, sprintrc_grep(rc));
+
+ bogus_flags |= bogus_ipc_shm_flags;
+ rc = shmget(bogus_key, bogus_size, bogus_flags);
+ printf("shmget\\(%#llx, %zu, %s\\|%#x\\|%#03o\\) += %s\n",
+ zero_extend_signed_to_ull(bogus_key), bogus_size,
+ "IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE",
+ bogus_flags & ~(0777 | bogus_ipc_shm_flags),
+ bogus_flags & 0777, sprintrc_grep(rc));
+
+ bogus_flags |= huge_flags;
+ rc = shmget(bogus_key, bogus_size, bogus_flags);
+ printf("shmget\\(%#llx, %zu, %s\\|%#x\\|%s\\|%#03o\\) += %s\n",
+ zero_extend_signed_to_ull(bogus_key), bogus_size,
+ "IPC_CREAT\\|IPC_EXCL\\|SHM_HUGETLB\\|SHM_NORESERVE",
+ bogus_flags & ~(0777 | bogus_ipc_shm_flags | huge_mask),
+ "21<<SHM_HUGE_SHIFT",
+ bogus_flags & 0777, sprintrc_grep(rc));
+
+ bogus_flags &= ~bogus_ipc_shm_flags;
rc = shmget(bogus_key, bogus_size, bogus_flags);
- printf("shmget\\(%#llx, %zu, %s%s%s%#x\\|%#04o\\) += %s\n",
+ printf("shmget\\(%#llx, %zu, %#x\\|%s\\|%#03o\\) += %s\n",
zero_extend_signed_to_ull(bogus_key), bogus_size,
- IPC_CREAT & bogus_flags ? "IPC_CREAT\\|" : "",
- IPC_EXCL & bogus_flags ? "IPC_EXCL\\|" : "",
- SHM_HUGETLB & bogus_flags ? "SHM_HUGETLB\\|" : "",
- bogus_flags & ~(0777 | IPC_CREAT | IPC_EXCL | SHM_HUGETLB),
+ bogus_flags & ~(0777 | huge_mask),
+ "21<<SHM_HUGE_SHIFT",
bogus_flags & 0777, sprintrc_grep(rc));
id = shmget(private_key, 1, 0600);
diff --git a/tests-mx32/ipc_shm.gen.test b/tests-mx32/ipc_shm.gen.test
index 505eabaf5..8c6df9b37 100755
--- a/tests-mx32/ipc_shm.gen.test
+++ b/tests-mx32/ipc_shm.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm +ipc.sh); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ipc_shm +ipc.sh ); do not edit.
+set --
. "${srcdir=.}/ipc.sh"
diff --git a/tests-mx32/kcmp.gen.test b/tests-mx32/kcmp.gen.test
index c073a39e9..139e909bd 100755
--- a/tests-mx32/kcmp.gen.test
+++ b/tests-mx32/kcmp.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kcmp -a22); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kcmp -a22 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a22
+run_strace_match_diff -a22
diff --git a/tests-mx32/kexec_file_load.gen.test b/tests-mx32/kexec_file_load.gen.test
index aefaab38b..11013497b 100755
--- a/tests-mx32/kexec_file_load.gen.test
+++ b/tests-mx32/kexec_file_load.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kexec_file_load -s9); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kexec_file_load -s9 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -s9
+run_strace_match_diff -s9
diff --git a/tests-mx32/kexec_load.gen.test b/tests-mx32/kexec_load.gen.test
index 0af95271b..6ce183179 100755
--- a/tests-mx32/kexec_load.gen.test
+++ b/tests-mx32/kexec_load.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kexec_load -s9); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (kexec_load -s9 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -s9
+run_strace_match_diff -s9
diff --git a/tests-mx32/lchown.gen.test b/tests-mx32/lchown.gen.test
index b31e29d1d..d346c76da 100755
--- a/tests-mx32/lchown.gen.test
+++ b/tests-mx32/lchown.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (lchown -a30); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (lchown -a30 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a30
+run_strace_match_diff -a30
diff --git a/tests-mx32/lchown32.gen.test b/tests-mx32/lchown32.gen.test
index 83be4bca0..5da2349cd 100755
--- a/tests-mx32/lchown32.gen.test
+++ b/tests-mx32/lchown32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (lchown32 -a32); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (lchown32 -a32 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a32
+run_strace_match_diff -a32
diff --git a/tests-mx32/link.gen.test b/tests-mx32/link.gen.test
index b6db34d07..2ec3f5b85 100755
--- a/tests-mx32/link.gen.test
+++ b/tests-mx32/link.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (link ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (link ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/linkat.gen.test b/tests-mx32/linkat.gen.test
index 54b12b945..8bdf78b4c 100755
--- a/tests-mx32/linkat.gen.test
+++ b/tests-mx32/linkat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (linkat ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (linkat ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/llseek.test b/tests-mx32/llseek.test
index 8dcd65d6c..9db68e3aa 100755
--- a/tests-mx32/llseek.test
+++ b/tests-mx32/llseek.test
@@ -7,5 +7,5 @@
check_prog grep
run_prog > /dev/null
run_strace -e_llseek $args > "$EXP"
-grep -v '^lseek([0-9]' < "$LOG" > "$OUT"
+grep -v '^_llseek([0-9]' < "$LOG" > "$OUT"
match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/lookup_dcookie.gen.test b/tests-mx32/lookup_dcookie.gen.test
index 6357e19de..616c70570 100755
--- a/tests-mx32/lookup_dcookie.gen.test
+++ b/tests-mx32/lookup_dcookie.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (lookup_dcookie -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (lookup_dcookie -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/madvise.gen.test b/tests-mx32/madvise.gen.test
index bd36dadae..a549cf94b 100755
--- a/tests-mx32/madvise.gen.test
+++ b/tests-mx32/madvise.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (madvise -a33); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (madvise -a33 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a33
+run_strace_match_diff -a33
diff --git a/tests-mx32/mbind.gen.test b/tests-mx32/mbind.gen.test
index a0d144dff..c47e0fc1e 100755
--- a/tests-mx32/mbind.gen.test
+++ b/tests-mx32/mbind.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mbind ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mbind ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/membarrier.c b/tests-mx32/membarrier.c
index 73dd3b024..43f99f88b 100644
--- a/tests-mx32/membarrier.c
+++ b/tests-mx32/membarrier.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -44,28 +45,49 @@ main(void)
printf("membarrier(0x3 /* MEMBARRIER_CMD_??? */, 255) = %s\n",
sprintrc(-1));
if (saved_errno != ENOSYS) {
+ const char *text_global;
const char *text;
int rc = syscall(__NR_membarrier, 0, 0);
- switch (rc) {
- case 1:
- text = "MEMBARRIER_CMD_SHARED";
+ assert(rc >= 0);
+
+ text_global = rc & 1 ? "MEMBARRIER_CMD_GLOBAL" : "";
+
+ switch (rc & ~1) {
+ case 0:
+ text = "";
break;
- case 1|8:
- text = "MEMBARRIER_CMD_SHARED|"
- "MEMBARRIER_CMD_PRIVATE_EXPEDITED";
+ case 8:
+ text = "MEMBARRIER_CMD_PRIVATE_EXPEDITED";
break;
- case 1|8|16:
- text = "MEMBARRIER_CMD_SHARED|"
+ case 8|16:
+ text = "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
+ "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED";
+ break;
+
+ case 2|4|8|16:
+ text = "MEMBARRIER_CMD_GLOBAL_EXPEDITED|"
+ "MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED|"
"MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
"MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED";
break;
+
+ case 2|4|8|16|32|64:
+ text = "MEMBARRIER_CMD_GLOBAL_EXPEDITED|"
+ "MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED|"
+ "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
+ "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED|"
+ "MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE|"
+ "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE";
+ break;
+
default:
error_msg_and_fail("membarrier returned %#x, does"
" the test have to be updated?", rc);
}
- printf("membarrier(MEMBARRIER_CMD_QUERY, 0) = %#x (%s)\n",
- rc, text);
+ printf("membarrier(MEMBARRIER_CMD_QUERY, 0) = %#x (%s%s%s)\n",
+ rc, text_global, text[0] && text_global[0] ? "|" : "",
+ text);
}
puts("+++ exited with 0 +++");
return 0;
diff --git a/tests-mx32/membarrier.gen.test b/tests-mx32/membarrier.gen.test
index 7a6ea10d8..6ae6e915a 100755
--- a/tests-mx32/membarrier.gen.test
+++ b/tests-mx32/membarrier.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (membarrier -a36); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (membarrier -a36 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a36
+run_strace_match_diff -a36
diff --git a/tests-mx32/memfd_create.c b/tests-mx32/memfd_create.c
index 4559b426d..8334af84b 100644
--- a/tests-mx32/memfd_create.c
+++ b/tests-mx32/memfd_create.c
@@ -1,3 +1,32 @@
+/*
+ * Check decoding of memfd_create syscall.
+ *
+ * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
#include "tests.h"
#include <asm/unistd.h>
#include "scno.h"
@@ -5,17 +34,62 @@
#ifdef __NR_memfd_create
# include <stdio.h>
+# include <stdint.h>
# include <unistd.h>
+# ifdef HAVE_LINUX_MEMFD_H
+# include <linux/memfd.h>
+# endif
+
+# ifndef MFD_HUGE_SHIFT
+# define MFD_HUGE_SHIFT 26
+# endif
+
+# ifndef MFD_HUGE_MASK
+# define MFD_HUGE_MASK 0x3f
+# endif
+
+static const char *errstr;
+
+static long
+k_memfd_create(const kernel_ulong_t name, const kernel_ulong_t flags)
+{
+ const long rc = syscall(__NR_memfd_create, name, flags);
+ errstr = sprintrc(rc);
+ return rc;
+}
+
int
main(void)
{
- static const char text[] = "strace";
- int rc = syscall(__NR_memfd_create, text, 0xf);
+ const size_t size = 255 - (sizeof("memfd:") - 1) + 1;
+ char *pattern = tail_alloc(size);
+ fill_memory_ex(pattern, size, '0', 10);
+
+ k_memfd_create((uintptr_t) pattern, 0);
+ printf("memfd_create(\"%.*s\"..., 0) = %s\n",
+ (int) size - 1, pattern, errstr);
+
+ kernel_ulong_t flags = (kernel_ulong_t) 0xfacefeed00000007ULL;
+ k_memfd_create((uintptr_t) pattern, flags);
+ printf("memfd_create(\"%.*s\"..., %s) = %s\n",
+ (int) size - 1, pattern,
+ "MFD_CLOEXEC|MFD_ALLOW_SEALING|MFD_HUGETLB",
+ errstr);
+
+ pattern[size - 1] = '\0';
+ flags = 30 << MFD_HUGE_SHIFT;
+ k_memfd_create((uintptr_t) pattern, flags);
+ printf("memfd_create(\"%s\", 30<<MFD_HUGE_SHIFT) = %s\n",
+ pattern, errstr);
- printf("memfd_create(\"%s\", %s) = %s\n",
- text, "MFD_CLOEXEC|MFD_ALLOW_SEALING|MFD_HUGETLB|0x8",
- sprintrc(rc));
+ pattern += size - 1;
+ flags = (kernel_ulong_t) -1ULL;
+ k_memfd_create(0, flags);
+ flags = -1U & ~(7 | (MFD_HUGE_MASK << MFD_HUGE_SHIFT));
+ printf("memfd_create(NULL, MFD_CLOEXEC|MFD_ALLOW_SEALING|MFD_HUGETLB"
+ "|%#x|%u<<MFD_HUGE_SHIFT) = %s\n",
+ (unsigned int) flags, MFD_HUGE_MASK, errstr);
puts("+++ exited with 0 +++");
return 0;
diff --git a/tests-mx32/memfd_create.gen.test b/tests-mx32/memfd_create.gen.test
index 11762bead..ccb5b52ee 100755
--- a/tests-mx32/memfd_create.gen.test
+++ b/tests-mx32/memfd_create.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (memfd_create ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (memfd_create ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/migrate_pages.gen.test b/tests-mx32/migrate_pages.gen.test
index 20b7cad92..0ea017d09 100755
--- a/tests-mx32/migrate_pages.gen.test
+++ b/tests-mx32/migrate_pages.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (migrate_pages -a33); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (migrate_pages -a33 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a33
+run_strace_match_diff -a33
diff --git a/tests-mx32/mincore.gen.test b/tests-mx32/mincore.gen.test
index dc4072614..45e43e258 100755
--- a/tests-mx32/mincore.gen.test
+++ b/tests-mx32/mincore.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mincore -a22); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mincore -a22 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a22
+run_strace_match_diff -a22
diff --git a/tests-mx32/mkdir.gen.test b/tests-mx32/mkdir.gen.test
index 80b499572..8d34c8b28 100755
--- a/tests-mx32/mkdir.gen.test
+++ b/tests-mx32/mkdir.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mkdir -a20); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mkdir -a20 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a20
+run_strace_match_diff -a20
diff --git a/tests-mx32/mkdirat.gen.test b/tests-mx32/mkdirat.gen.test
index 0f3fdae25..eef8e5265 100755
--- a/tests-mx32/mkdirat.gen.test
+++ b/tests-mx32/mkdirat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mkdirat -a28); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mkdirat -a28 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a28
+run_strace_match_diff -a28
diff --git a/tests-mx32/mknod.gen.test b/tests-mx32/mknod.gen.test
index 870c88b44..ce08e99fb 100755
--- a/tests-mx32/mknod.gen.test
+++ b/tests-mx32/mknod.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mknod -a18); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mknod -a18 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a18
+run_strace_match_diff -a18
diff --git a/tests-mx32/mknodat.gen.test b/tests-mx32/mknodat.gen.test
index 747fcbeec..dce7d449b 100755
--- a/tests-mx32/mknodat.gen.test
+++ b/tests-mx32/mknodat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mknodat -a35); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mknodat -a35 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a35
+run_strace_match_diff -a35
diff --git a/tests-mx32/mlock2.gen.test b/tests-mx32/mlock2.gen.test
index aa1818e1a..ff94eb894 100755
--- a/tests-mx32/mlock2.gen.test
+++ b/tests-mx32/mlock2.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mlock2 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mlock2 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/mlockall.gen.test b/tests-mx32/mlockall.gen.test
index 06d8ca44b..59ef67f81 100755
--- a/tests-mx32/mlockall.gen.test
+++ b/tests-mx32/mlockall.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mlockall -a12); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mlockall -a12 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a12
+run_strace_match_diff -a12
diff --git a/tests-mx32/mmap64.gen.test b/tests-mx32/mmap64.gen.test
index 5e747b024..0ecd5294b 100755
--- a/tests-mx32/mmap64.gen.test
+++ b/tests-mx32/mmap64.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64 +mmap.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mmap64 +mmap.test ); do not edit.
+set --
. "${srcdir=.}/mmap.test"
diff --git a/tests-mx32/modify_ldt.c b/tests-mx32/modify_ldt.c
new file mode 100644
index 000000000..1e26bda44
--- /dev/null
+++ b/tests-mx32/modify_ldt.c
@@ -0,0 +1,137 @@
+/*
+ * Check decoding of modify_ldt syscall.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <asm/unistd.h>
+
+#if defined __NR_modify_ldt && defined HAVE_STRUCT_USER_DESC
+
+# include <errno.h>
+# include <stdio.h>
+# include <unistd.h>
+
+# include "print_user_desc.c"
+
+void
+printrc(long rc)
+{
+#ifdef __x86_64__
+ int err = -rc;
+
+ /* Thanks, long return type of syscall(2) */
+ printf("%lld", zero_extend_signed_to_ull(rc));
+
+ if (err > 0 && err < 0x1000) {
+ errno = err;
+ printf(" %s (%m)", errno2name());
+ }
+#else
+ printf("%s", sprintrc(rc));
+#endif
+
+ puts("");
+}
+
+int
+main(void)
+{
+ static const kernel_ulong_t bogus_func =
+ (kernel_ulong_t) 0xbadc0dedda7a1057ULL;
+ static const kernel_ulong_t bogus_bytecount =
+ (kernel_ulong_t) 0xdeadfacefa57beefULL;
+
+ struct user_desc *us = tail_alloc(sizeof(*us));
+ unsigned int *bogus_int = tail_alloc(sizeof(*bogus_int));
+ long rc;
+
+ fill_memory(us, sizeof(*us));
+
+ rc = syscall(__NR_modify_ldt, 0, 0, 0);
+ printf("modify_ldt(0, NULL, 0) = ");
+ printrc(rc);
+
+ rc = syscall(__NR_modify_ldt, bogus_func, (kernel_long_t) -1,
+ bogus_bytecount);
+ printf("modify_ldt(%d, %#llx, %llu) = ",
+ (int) bogus_func,
+ zero_extend_signed_to_ull((kernel_long_t) -1),
+ (unsigned long long) bogus_bytecount);
+ printrc(rc);
+
+ rc = syscall(__NR_modify_ldt, bogus_func, us + 1, 0);
+ printf("modify_ldt(%d, %p, 0) = ", (int) bogus_func, us + 1);
+ printrc(rc);
+
+ rc = syscall(__NR_modify_ldt, bogus_func, us, 42);
+ printf("modify_ldt(%d, %p, 42) = ", (int) bogus_func, us);
+ printrc(rc);
+
+ rc = syscall(__NR_modify_ldt, bogus_func, us + 1, sizeof(*us));
+ printf("modify_ldt(%d, %p, %zu) = ",
+ (int) bogus_func, us + 1, sizeof(*us));
+ printrc(rc);
+
+ /*
+ * print_user_desc handles entry_number field in a special way for
+ * get_thread_area syscall, so let's also check here that we don't
+ * retrieve it accidentally.
+ */
+ rc = syscall(__NR_modify_ldt, bogus_func, bogus_int, sizeof(*us));
+ printf("modify_ldt(%d, %p, %zu) = ",
+ (int) bogus_func, bogus_int, sizeof(*us));
+ printrc(rc);
+
+ rc = syscall(__NR_modify_ldt, bogus_func, us, sizeof(*us));
+ printf("modify_ldt(%d, ", (int) bogus_func);
+ print_user_desc(us, NULL);
+ printf(", %zu) = ", sizeof(*us));
+ printrc(rc);
+
+ fill_memory_ex(us, sizeof(*us), 0x55, 80);
+ us->entry_number = -1;
+ us->base_addr = 0;
+ us->limit = 0;
+
+ rc = syscall(__NR_modify_ldt, bogus_func, us, sizeof(*us));
+ printf("modify_ldt(%d, ", (int) bogus_func);
+ print_user_desc(us, "-1");
+ printf(", %zu) = ", sizeof(*us));
+ printrc(rc);
+
+ puts("+++ exited with 0 +++");
+
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_modify_ldt && HAVE_STRUCT_USER_DESC");
+
+#endif
diff --git a/tests-mx32/modify_ldt.gen.test b/tests-mx32/modify_ldt.gen.test
new file mode 100755
index 000000000..1a85b067e
--- /dev/null
+++ b/tests-mx32/modify_ldt.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (modify_ldt -a23 ); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a23
diff --git a/tests-mx32/mount.gen.test b/tests-mx32/mount.gen.test
index 0b124bc22..69bc99be9 100755
--- a/tests-mx32/mount.gen.test
+++ b/tests-mx32/mount.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (mount ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/move_pages.gen.test b/tests-mx32/move_pages.gen.test
index 2f060fa81..9d472ef97 100755
--- a/tests-mx32/move_pages.gen.test
+++ b/tests-mx32/move_pages.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (move_pages -s3); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (move_pages -s3 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -s3
+run_strace_match_diff -s3
diff --git a/tests-mx32/munlockall.gen.test b/tests-mx32/munlockall.gen.test
index 18343cba6..2e4e0c4fa 100755
--- a/tests-mx32/munlockall.gen.test
+++ b/tests-mx32/munlockall.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (munlockall -a13); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (munlockall -a13 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a13
+run_strace_match_diff -a13
diff --git a/tests-mx32/nanosleep.gen.test b/tests-mx32/nanosleep.gen.test
index ea5b19aea..41928ded8 100755
--- a/tests-mx32/nanosleep.gen.test
+++ b/tests-mx32/nanosleep.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nanosleep -a20); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nanosleep -a20 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a20
+run_strace_match_diff -a20
diff --git a/tests-mx32/net-accept-connect.c b/tests-mx32/net-accept-connect.c
index 4045e056f..0756c9be4 100644
--- a/tests-mx32/net-accept-connect.c
+++ b/tests-mx32/net-accept-connect.c
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2013-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2013-2017 The strace developers.
+ * Copyright (c) 2013-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -49,15 +49,16 @@ main(int ac, const char **av)
struct sockaddr_un addr = {
.sun_family = AF_UNIX,
};
- socklen_t len;
assert(ac == 2);
- assert(strlen(av[1]) > 0);
+ socklen_t len = strlen(av[1]);
+ assert(len > 0 && len <= sizeof(addr.sun_path));
- strncpy(addr.sun_path, av[1], sizeof(addr.sun_path));
- len = offsetof(struct sockaddr_un, sun_path) + strlen(av[1]) + 1;
- if (len > sizeof(addr))
- len = sizeof(addr);
+ if (++len > sizeof(addr.sun_path))
+ len = sizeof(addr.sun_path);
+
+ memcpy(addr.sun_path, av[1], len);
+ len += offsetof(struct sockaddr_un, sun_path);
unlink(av[1]);
close(0);
diff --git a/tests-mx32/net-y-unix.c b/tests-mx32/net-y-unix.c
index fbdf59006..847c73549 100644
--- a/tests-mx32/net-y-unix.c
+++ b/tests-mx32/net-y-unix.c
@@ -2,6 +2,7 @@
* This file is part of net-y-unix strace test.
*
* Copyright (c) 2013-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,10 +35,11 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
#include <sys/socket.h>
#include <sys/un.h>
+#include "accept_compat.h"
+
#define TEST_SOCKET "net-y-unix.socket"
int
@@ -106,7 +108,7 @@ main(void)
struct sockaddr * const accept_sa = tail_alloc(sizeof(addr));
memset(accept_sa, 0, sizeof(addr));
*len = sizeof(addr);
- int accept_fd = accept(listen_fd, accept_sa, len);
+ int accept_fd = do_accept(listen_fd, accept_sa, len);
if (accept_fd < 0)
perror_msg_and_fail("accept");
unsigned long accept_inode = inode_of_sockfd(accept_fd);
@@ -177,7 +179,7 @@ main(void)
memset(accept_sa, 0, sizeof(addr));
*len = sizeof(addr);
- accept_fd = accept(listen_fd, accept_sa, len);
+ accept_fd = do_accept(listen_fd, accept_sa, len);
if (accept_fd < 0)
perror_msg_and_fail("accept");
accept_inode = inode_of_sockfd(accept_fd);
diff --git a/tests-mx32/net-yy-inet.c b/tests-mx32/net-yy-inet.c
index c043920d1..c69bb1735 100644
--- a/tests-mx32/net-yy-inet.c
+++ b/tests-mx32/net-yy-inet.c
@@ -2,7 +2,7 @@
* This file is part of net-yy-inet strace test.
*
* Copyright (c) 2014-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -39,6 +39,8 @@
#include <netinet/tcp.h>
#include <arpa/inet.h>
+#include "accept_compat.h"
+
int
main(void)
{
@@ -105,7 +107,7 @@ main(void)
struct sockaddr * const accept_sa = tail_alloc(sizeof(addr));
memset(accept_sa, 0, sizeof(addr));
*len = sizeof(addr);
- const int accept_fd = accept(listen_fd, accept_sa, len);
+ const int accept_fd = do_accept(listen_fd, accept_sa, len);
if (accept_fd < 0)
perror_msg_and_fail("accept");
const unsigned int connect_port =
diff --git a/tests-mx32/net-yy-unix.c b/tests-mx32/net-yy-unix.c
index 21822db9f..40ac3a637 100644
--- a/tests-mx32/net-yy-unix.c
+++ b/tests-mx32/net-yy-unix.c
@@ -2,6 +2,7 @@
* This file is part of net-yy-unix strace test.
*
* Copyright (c) 2013-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -34,10 +35,11 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
#include <sys/socket.h>
#include <sys/un.h>
+#include "accept_compat.h"
+
#define TEST_SOCKET "net-yy-unix.socket"
int
@@ -107,7 +109,7 @@ main(void)
struct sockaddr * const accept_sa = tail_alloc(sizeof(addr));
memset(accept_sa, 0, sizeof(addr));
*len = sizeof(addr);
- int accept_fd = accept(listen_fd, accept_sa, len);
+ int accept_fd = do_accept(listen_fd, accept_sa, len);
if (accept_fd < 0)
perror_msg_and_fail("accept");
unsigned long accept_inode = inode_of_sockfd(accept_fd);
@@ -180,7 +182,7 @@ main(void)
memset(accept_sa, 0, sizeof(addr));
*len = sizeof(addr);
- accept_fd = accept(listen_fd, accept_sa, len);
+ accept_fd = do_accept(listen_fd, accept_sa, len);
if (accept_fd < 0)
perror_msg_and_fail("accept");
accept_inode = inode_of_sockfd(accept_fd);
diff --git a/tests-mx32/net.expected b/tests-mx32/net.expected
index 80dd07016..e33e29662 100644
--- a/tests-mx32/net.expected
+++ b/tests-mx32/net.expected
@@ -3,5 +3,5 @@
[1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +bind\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="net-local-stream"\}, 19\) += 0
[1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +listen\(0, 5\) += 0
[1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +getsockname\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="net-local-stream"\}, \[19\]\) += 0
-[1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +accept\(0, \{sa_family=AF_(LOCAL|UNIX|FILE)\}, \[19->2\]\) += 1
+[1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +accept4?\(0, \{sa_family=AF_(LOCAL|UNIX|FILE)\}, \[19->2\](, 0)?\) += 1
[1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +connect\(1, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="net-local-stream"\}, 19\) += 0
diff --git a/tests-mx32/netlink_audit.gen.test b/tests-mx32/netlink_audit.gen.test
index 65110672e..5c17038e0 100755
--- a/tests-mx32/netlink_audit.gen.test
+++ b/tests-mx32/netlink_audit.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_audit +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_audit +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/netlink_crypto.gen.test b/tests-mx32/netlink_crypto.gen.test
index b13809913..fcb4c3d98 100755
--- a/tests-mx32/netlink_crypto.gen.test
+++ b/tests-mx32/netlink_crypto.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_crypto +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_crypto +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/netlink_generic.gen.test b/tests-mx32/netlink_generic.gen.test
index e51f15ce2..6f304d3a8 100755
--- a/tests-mx32/netlink_generic.gen.test
+++ b/tests-mx32/netlink_generic.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_generic +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_generic +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/netlink_kobject_uevent.gen.test b/tests-mx32/netlink_kobject_uevent.gen.test
index 310a70b85..46bdebd1d 100755
--- a/tests-mx32/netlink_kobject_uevent.gen.test
+++ b/tests-mx32/netlink_kobject_uevent.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_kobject_uevent +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_kobject_uevent +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/netlink_netfilter.gen.test b/tests-mx32/netlink_netfilter.gen.test
index fffb72b4b..94b3f3696 100755
--- a/tests-mx32/netlink_netfilter.gen.test
+++ b/tests-mx32/netlink_netfilter.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_netfilter +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_netfilter +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/netlink_route.gen.test b/tests-mx32/netlink_route.gen.test
index 298dbf1ab..bd9c0d95e 100755
--- a/tests-mx32/netlink_route.gen.test
+++ b/tests-mx32/netlink_route.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_route +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_route +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/netlink_selinux.gen.test b/tests-mx32/netlink_selinux.gen.test
index a8871d6d2..484ffae70 100755
--- a/tests-mx32/netlink_selinux.gen.test
+++ b/tests-mx32/netlink_selinux.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_selinux +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_selinux +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/netlink_xfrm.gen.test b/tests-mx32/netlink_xfrm.gen.test
index 17f7444b7..369189821 100755
--- a/tests-mx32/netlink_xfrm.gen.test
+++ b/tests-mx32/netlink_xfrm.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_xfrm +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (netlink_xfrm +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_acct.gen.test b/tests-mx32/nfnetlink_acct.gen.test
index 7db227695..e3aa8892f 100755
--- a/tests-mx32/nfnetlink_acct.gen.test
+++ b/tests-mx32/nfnetlink_acct.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_acct +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_acct +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_cthelper.gen.test b/tests-mx32/nfnetlink_cthelper.gen.test
index 661c949c5..fa26e14a8 100755
--- a/tests-mx32/nfnetlink_cthelper.gen.test
+++ b/tests-mx32/nfnetlink_cthelper.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_cthelper +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_cthelper +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_ctnetlink.gen.test b/tests-mx32/nfnetlink_ctnetlink.gen.test
index d4c4daaf0..9e9ad1532 100755
--- a/tests-mx32/nfnetlink_ctnetlink.gen.test
+++ b/tests-mx32/nfnetlink_ctnetlink.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ctnetlink +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ctnetlink +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_ctnetlink_exp.gen.test b/tests-mx32/nfnetlink_ctnetlink_exp.gen.test
index a5d83f9b4..4ed3707e7 100755
--- a/tests-mx32/nfnetlink_ctnetlink_exp.gen.test
+++ b/tests-mx32/nfnetlink_ctnetlink_exp.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ctnetlink_exp +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ctnetlink_exp +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_cttimeout.gen.test b/tests-mx32/nfnetlink_cttimeout.gen.test
index e197f0000..ab42fc780 100755
--- a/tests-mx32/nfnetlink_cttimeout.gen.test
+++ b/tests-mx32/nfnetlink_cttimeout.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_cttimeout +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_cttimeout +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_ipset.gen.test b/tests-mx32/nfnetlink_ipset.gen.test
index 418437a7c..ea129fbcc 100755
--- a/tests-mx32/nfnetlink_ipset.gen.test
+++ b/tests-mx32/nfnetlink_ipset.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ipset +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ipset +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_nft_compat.gen.test b/tests-mx32/nfnetlink_nft_compat.gen.test
index c3dc89075..aff04c5fb 100755
--- a/tests-mx32/nfnetlink_nft_compat.gen.test
+++ b/tests-mx32/nfnetlink_nft_compat.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_nft_compat +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_nft_compat +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_nftables.gen.test b/tests-mx32/nfnetlink_nftables.gen.test
index 25e90e857..c23ad3305 100755
--- a/tests-mx32/nfnetlink_nftables.gen.test
+++ b/tests-mx32/nfnetlink_nftables.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_nftables +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_nftables +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_osf.gen.test b/tests-mx32/nfnetlink_osf.gen.test
index 2689574a1..aa5409075 100755
--- a/tests-mx32/nfnetlink_osf.gen.test
+++ b/tests-mx32/nfnetlink_osf.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_osf +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_osf +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_queue.gen.test b/tests-mx32/nfnetlink_queue.gen.test
index 739fb17d1..965e0d24a 100755
--- a/tests-mx32/nfnetlink_queue.gen.test
+++ b/tests-mx32/nfnetlink_queue.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_queue +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_queue +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nfnetlink_ulog.gen.test b/tests-mx32/nfnetlink_ulog.gen.test
index 850ebafcf..825ad9f60 100755
--- a/tests-mx32/nfnetlink_ulog.gen.test
+++ b/tests-mx32/nfnetlink_ulog.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ulog +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nfnetlink_ulog +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr.gen.test b/tests-mx32/nlattr.gen.test
index 105801b9f..0ea2f185b 100755
--- a/tests-mx32/nlattr.gen.test
+++ b/tests-mx32/nlattr.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_br_port_msg.gen.test b/tests-mx32/nlattr_br_port_msg.gen.test
index f843797a3..c9572759f 100755
--- a/tests-mx32/nlattr_br_port_msg.gen.test
+++ b/tests-mx32/nlattr_br_port_msg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_br_port_msg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_br_port_msg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_crypto_user_alg.gen.test b/tests-mx32/nlattr_crypto_user_alg.gen.test
index 81d866e09..e52b6be77 100755
--- a/tests-mx32/nlattr_crypto_user_alg.gen.test
+++ b/tests-mx32/nlattr_crypto_user_alg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_crypto_user_alg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_crypto_user_alg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_dcbmsg.gen.test b/tests-mx32/nlattr_dcbmsg.gen.test
index d78bfcf63..f9ef39f71 100755
--- a/tests-mx32/nlattr_dcbmsg.gen.test
+++ b/tests-mx32/nlattr_dcbmsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_dcbmsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_dcbmsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_fib_rule_hdr.gen.test b/tests-mx32/nlattr_fib_rule_hdr.gen.test
index cbdad4d5e..fb61343d5 100755
--- a/tests-mx32/nlattr_fib_rule_hdr.gen.test
+++ b/tests-mx32/nlattr_fib_rule_hdr.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_fib_rule_hdr +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_fib_rule_hdr +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifaddrlblmsg.gen.test b/tests-mx32/nlattr_ifaddrlblmsg.gen.test
index 0c41dbe5c..0f51430f0 100755
--- a/tests-mx32/nlattr_ifaddrlblmsg.gen.test
+++ b/tests-mx32/nlattr_ifaddrlblmsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrlblmsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrlblmsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifaddrmsg.gen.test b/tests-mx32/nlattr_ifaddrmsg.gen.test
index d659e0011..3fb81bdbb 100755
--- a/tests-mx32/nlattr_ifaddrmsg.gen.test
+++ b/tests-mx32/nlattr_ifaddrmsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrmsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifaddrmsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifinfomsg.gen.test b/tests-mx32/nlattr_ifinfomsg.gen.test
index 618df1432..b9a6456ab 100755
--- a/tests-mx32/nlattr_ifinfomsg.gen.test
+++ b/tests-mx32/nlattr_ifinfomsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifinfomsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifinfomsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifla_brport.gen.test b/tests-mx32/nlattr_ifla_brport.gen.test
index 48bfed4b8..6758d8d1c 100755
--- a/tests-mx32/nlattr_ifla_brport.gen.test
+++ b/tests-mx32/nlattr_ifla_brport.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_brport +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_brport +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifla_port.gen.test b/tests-mx32/nlattr_ifla_port.gen.test
index 605bf045f..ecea89a46 100755
--- a/tests-mx32/nlattr_ifla_port.gen.test
+++ b/tests-mx32/nlattr_ifla_port.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_port +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_port +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ifla_xdp.gen.test b/tests-mx32/nlattr_ifla_xdp.gen.test
index a30e84361..c6e0fab34 100755
--- a/tests-mx32/nlattr_ifla_xdp.gen.test
+++ b/tests-mx32/nlattr_ifla_xdp.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_xdp +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ifla_xdp +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_inet_diag_msg.gen.test b/tests-mx32/nlattr_inet_diag_msg.gen.test
index 953a76756..953a23df0 100755
--- a/tests-mx32/nlattr_inet_diag_msg.gen.test
+++ b/tests-mx32/nlattr_inet_diag_msg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_msg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_msg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_inet_diag_req_compat.gen.test b/tests-mx32/nlattr_inet_diag_req_compat.gen.test
index bf8b65c8d..7b577dc99 100755
--- a/tests-mx32/nlattr_inet_diag_req_compat.gen.test
+++ b/tests-mx32/nlattr_inet_diag_req_compat.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_compat +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_compat +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_inet_diag_req_v2.gen.test b/tests-mx32/nlattr_inet_diag_req_v2.gen.test
index 0260bc4a9..01c73a13b 100755
--- a/tests-mx32/nlattr_inet_diag_req_v2.gen.test
+++ b/tests-mx32/nlattr_inet_diag_req_v2.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_v2 +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_inet_diag_req_v2 +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_mdba_mdb_entry.gen.test b/tests-mx32/nlattr_mdba_mdb_entry.gen.test
index 67253e8e4..8d09a0338 100755
--- a/tests-mx32/nlattr_mdba_mdb_entry.gen.test
+++ b/tests-mx32/nlattr_mdba_mdb_entry.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_mdba_mdb_entry +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_mdba_mdb_entry +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_mdba_router_port.gen.test b/tests-mx32/nlattr_mdba_router_port.gen.test
index ce9ea148a..97230e846 100755
--- a/tests-mx32/nlattr_mdba_router_port.gen.test
+++ b/tests-mx32/nlattr_mdba_router_port.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_mdba_router_port +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_mdba_router_port +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ndmsg.gen.test b/tests-mx32/nlattr_ndmsg.gen.test
index 06b8f1a41..1d2763b02 100755
--- a/tests-mx32/nlattr_ndmsg.gen.test
+++ b/tests-mx32/nlattr_ndmsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndmsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndmsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_ndtmsg.gen.test b/tests-mx32/nlattr_ndtmsg.gen.test
index d75ad57b3..bf7d122ab 100755
--- a/tests-mx32/nlattr_ndtmsg.gen.test
+++ b/tests-mx32/nlattr_ndtmsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndtmsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_ndtmsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_netconfmsg.gen.test b/tests-mx32/nlattr_netconfmsg.gen.test
index 9a061cb47..27f3a66b6 100755
--- a/tests-mx32/nlattr_netconfmsg.gen.test
+++ b/tests-mx32/nlattr_netconfmsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_netconfmsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_netconfmsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_netlink_diag_msg.gen.test b/tests-mx32/nlattr_netlink_diag_msg.gen.test
index aa6aabf42..eacc6df46 100755
--- a/tests-mx32/nlattr_netlink_diag_msg.gen.test
+++ b/tests-mx32/nlattr_netlink_diag_msg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_netlink_diag_msg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_netlink_diag_msg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_nlmsgerr.gen.test b/tests-mx32/nlattr_nlmsgerr.gen.test
index 23df50014..f06ea429b 100755
--- a/tests-mx32/nlattr_nlmsgerr.gen.test
+++ b/tests-mx32/nlattr_nlmsgerr.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_nlmsgerr +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_nlmsgerr +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_packet_diag_msg.gen.test b/tests-mx32/nlattr_packet_diag_msg.gen.test
index 6af8749a4..7177ea2a3 100755
--- a/tests-mx32/nlattr_packet_diag_msg.gen.test
+++ b/tests-mx32/nlattr_packet_diag_msg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_packet_diag_msg +netlink_sock_diag-v.sh); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_packet_diag_msg +netlink_sock_diag-v.sh ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag-v.sh"
diff --git a/tests-mx32/nlattr_rtgenmsg.gen.test b/tests-mx32/nlattr_rtgenmsg.gen.test
index 0ff6d1307..37ec8425d 100755
--- a/tests-mx32/nlattr_rtgenmsg.gen.test
+++ b/tests-mx32/nlattr_rtgenmsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtgenmsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtgenmsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_rtmsg.gen.test b/tests-mx32/nlattr_rtmsg.gen.test
index 55251431e..f075529a0 100755
--- a/tests-mx32/nlattr_rtmsg.gen.test
+++ b/tests-mx32/nlattr_rtmsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtmsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_rtmsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_smc_diag_msg.gen.test b/tests-mx32/nlattr_smc_diag_msg.gen.test
index 3e6407e54..e64d21e20 100755
--- a/tests-mx32/nlattr_smc_diag_msg.gen.test
+++ b/tests-mx32/nlattr_smc_diag_msg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_smc_diag_msg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_smc_diag_msg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_tc_stats.gen.test b/tests-mx32/nlattr_tc_stats.gen.test
index 72780d4af..11cadd2db 100755
--- a/tests-mx32/nlattr_tc_stats.gen.test
+++ b/tests-mx32/nlattr_tc_stats.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tc_stats +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tc_stats +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_tca_stab.gen.test b/tests-mx32/nlattr_tca_stab.gen.test
index 14cd1a545..81d36c70d 100755
--- a/tests-mx32/nlattr_tca_stab.gen.test
+++ b/tests-mx32/nlattr_tca_stab.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tca_stab +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tca_stab +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_tcamsg.gen.test b/tests-mx32/nlattr_tcamsg.gen.test
index 7c3020738..1a6408d9c 100755
--- a/tests-mx32/nlattr_tcamsg.gen.test
+++ b/tests-mx32/nlattr_tcamsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcamsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcamsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_tcmsg.gen.test b/tests-mx32/nlattr_tcmsg.gen.test
index f5bf7a92c..7e70ca26f 100755
--- a/tests-mx32/nlattr_tcmsg.gen.test
+++ b/tests-mx32/nlattr_tcmsg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcmsg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_tcmsg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nlattr_unix_diag_msg.gen.test b/tests-mx32/nlattr_unix_diag_msg.gen.test
index d913afc16..fd5b8286b 100755
--- a/tests-mx32/nlattr_unix_diag_msg.gen.test
+++ b/tests-mx32/nlattr_unix_diag_msg.gen.test
@@ -1,3 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_unix_diag_msg +netlink_sock_diag.test); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (nlattr_unix_diag_msg +netlink_sock_diag.test ); do not edit.
+set --
. "${srcdir=.}/netlink_sock_diag.test"
diff --git a/tests-mx32/nsyscalls-d.c b/tests-mx32/nsyscalls-d.c
new file mode 100644
index 000000000..1525dea0b
--- /dev/null
+++ b/tests-mx32/nsyscalls-d.c
@@ -0,0 +1,2 @@
+#define DEBUG_PRINT 1
+#include "nsyscalls.c"
diff --git a/tests-mx32/nsyscalls-d.test b/tests-mx32/nsyscalls-d.test
new file mode 100755
index 000000000..2cca32f10
--- /dev/null
+++ b/tests-mx32/nsyscalls-d.test
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# Check decoding of out-of-range syscalls along with debug ouput
+
+. "${srcdir=.}/init.sh"
+
+: ${debug_flag=-d}
+NAME=nsyscalls-d
+
+if [ "$MIPS_ABI" = "o32" ]; then
+ syscall=syscall
+ [ -z "$debug_flag" ] ||
+ skip_ "mips $MIPS_ABI is not supported by this test yet"
+else
+ syscall=none
+fi
+
+run_strace $debug_flag -e trace=$syscall ../$NAME "$STRACE_EXE" 9 \
+ 2> "$LOG-err-all" > "$EXP" 9> "$EXP-err"
+
+[ -n "$debug_flag" ] || > "$EXP-err"
+
+grep "invalid syscall" "$LOG-err-all" > "$LOG-err"
+
+match_diff "$LOG" "$EXP"
+match_diff "$LOG-err" "$EXP-err"
diff --git a/tests-mx32/nsyscalls-nd.test b/tests-mx32/nsyscalls-nd.test
new file mode 100755
index 000000000..7d2f1e1f3
--- /dev/null
+++ b/tests-mx32/nsyscalls-nd.test
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+debug_flag=
+. "${srcdir=.}"/nsyscalls-d.test
diff --git a/tests-mx32/nsyscalls.c b/tests-mx32/nsyscalls.c
index 29f444a20..9f7486738 100644
--- a/tests-mx32/nsyscalls.c
+++ b/tests-mx32/nsyscalls.c
@@ -2,7 +2,7 @@
* Check decoding of out-of-range syscalls.
*
* Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,6 +32,7 @@
#include "sysent.h"
#include <errno.h>
#include <stdio.h>
+#include <stdlib.h>
#include <unistd.h>
#include <asm/unistd.h>
@@ -43,6 +44,10 @@ static const struct_sysent syscallent[] = {
#include "sysent_shorthand_undefs.h"
+#ifndef DEBUG_PRINT
+# define DEBUG_PRINT 0
+#endif
+
#if defined __X32_SYSCALL_BIT && defined __NR_read \
&& (__X32_SYSCALL_BIT & __NR_read) != 0
# define SYSCALL_BIT __X32_SYSCALL_BIT
@@ -50,6 +55,11 @@ static const struct_sysent syscallent[] = {
# define SYSCALL_BIT 0
#endif
+#if DEBUG_PRINT
+static const char *strace_name;
+static FILE *debug_out;
+#endif
+
static void
test_syscall(const unsigned long nr)
{
@@ -64,13 +74,19 @@ test_syscall(const unsigned long nr)
long rc = syscall(nr | SYSCALL_BIT,
a[0], a[1], a[2], a[3], a[4], a[5]);
+
+#if DEBUG_PRINT
+ fprintf(debug_out, "%s: pid %d invalid syscall %#lx\n",
+ strace_name, getpid(), nr | SYSCALL_BIT);
+#endif
+
#ifdef LINUX_MIPSO32
printf("syscall(%#lx, %#lx, %#lx, %#lx, %#lx, %#lx, %#lx)"
" = %ld ENOSYS (%m)\n", nr | SYSCALL_BIT,
a[0], a[1], a[2], a[3], a[4], a[5], rc);
#else
- printf("syscall_%lu(%#llx, %#llx, %#llx, %#llx, %#llx, %#llx)"
- " = %ld (errno %d)\n", nr,
+ printf("syscall_%#lx(%#llx, %#llx, %#llx, %#llx, %#llx, %#llx)"
+ " = %ld (errno %d)\n", nr | SYSCALL_BIT,
(unsigned long long) a[0],
(unsigned long long) a[1],
(unsigned long long) a[2],
@@ -82,8 +98,26 @@ test_syscall(const unsigned long nr)
}
int
-main(void)
+main(int argc, char *argv[])
{
+#if DEBUG_PRINT
+ if (argc < 3)
+ error_msg_and_fail("Not enough arguments. "
+ "Usage: %s STRACE_NAME DEBUG_OUT_FD",
+ argv[0]);
+
+ strace_name = argv[1];
+
+ errno = 0;
+ int debug_out_fd = strtol(argv[2], NULL, 0);
+ if (errno)
+ error_msg_and_fail("Not a number: %s", argv[2]);
+
+ debug_out = fdopen(debug_out_fd, "a");
+ if (!debug_out)
+ perror_msg_and_fail("fdopen: %d", debug_out_fd);
+#endif
+
test_syscall(ARRAY_SIZE(syscallent));
#ifdef SYS_socket_subcall
diff --git a/tests-mx32/old_mmap-P.c b/tests-mx32/old_mmap-P.c
new file mode 100644
index 000000000..bb28e889c
--- /dev/null
+++ b/tests-mx32/old_mmap-P.c
@@ -0,0 +1,3 @@
+#define TEST_FD 9
+#define PATH_TRACING
+#include "old_mmap.c"
diff --git a/tests-mx32/old_mmap-P.gen.test b/tests-mx32/old_mmap-P.gen.test
new file mode 100755
index 000000000..b1de9345e
--- /dev/null
+++ b/tests-mx32/old_mmap-P.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-P -e trace=mmap -P "/dev/full" 9>>/dev/full); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=mmap -P "/dev/full" 9>>/dev/full
diff --git a/tests-mx32/old_mmap-v-none.c b/tests-mx32/old_mmap-v-none.c
new file mode 100644
index 000000000..033503cc8
--- /dev/null
+++ b/tests-mx32/old_mmap-v-none.c
@@ -0,0 +1 @@
+#include "old_mmap.c"
diff --git a/tests-mx32/old_mmap-v-none.gen.test b/tests-mx32/old_mmap-v-none.gen.test
new file mode 100755
index 000000000..a568d989d
--- /dev/null
+++ b/tests-mx32/old_mmap-v-none.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (old_mmap-v-none -a11 -e trace=mmap -e verbose=none); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a11 -e trace=mmap -e verbose=none
diff --git a/tests-mx32/old_mmap.c b/tests-mx32/old_mmap.c
index 2725fb754..35ec42889 100644
--- a/tests-mx32/old_mmap.c
+++ b/tests-mx32/old_mmap.c
@@ -2,6 +2,7 @@
* Check decoding of "old mmap" edition of mmap syscall.
*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,57 +37,64 @@
* it would require additional efforts to filter out mmap calls made by glibc.
*/
-#if defined __NR_mmap && \
-( defined __arm__ \
- || defined __i386__ \
- || (defined __s390__ && !defined __s390x__) \
-)
+#if defined __NR_mmap \
+ && (defined __arm__ || defined __i386__ || defined __m68k__ \
+ || defined __s390__ || defined __s390x__) \
+ && (defined PATH_TRACING || !(defined __s390x__ || defined __m68k__))
# include <stdio.h>
# include <string.h>
# include <sys/mman.h>
# include <unistd.h>
+# ifndef TEST_FD
+# define TEST_FD -2LU
+# endif
+
int
main(void)
{
long rc = syscall(__NR_mmap, 0);
+# ifndef PATH_TRACING
printf("mmap(NULL) = %ld %s (%m)\n", rc, errno2name());
+# endif
- const unsigned int args1_c[6] = {
- 0xdeadbeef, /* addr */
- 0xfacefeed, /* len */
+ const unsigned long args1_c[6] = {
+ (unsigned long) 0xbadc0deddeadbeefULL, /* addr */
+ (unsigned long) 0xdeefacedfacefeedULL, /* len */
PROT_READ|PROT_EXEC, /* prot */
MAP_FILE|MAP_FIXED, /* flags */
- -2U, /* fd */
- 0xbadc0ded /* offset */
+ TEST_FD, /* fd */
+ (unsigned long) 0xdecaffedbadc0dedULL /* offset */
};
- const unsigned int page_size = get_page_size();
- const unsigned int args2_c[6] = {
+ const unsigned long page_size = get_page_size();
+ const unsigned long args2_c[6] = {
0,
page_size,
PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS,
- -1U,
- 0xfaced000 & -page_size
+ -1LU,
+ (unsigned long) 0xda7a1057faced000ULL & -page_size
};
void *args = tail_memdup(args1_c, sizeof(args1_c));
rc = syscall(__NR_mmap, args);
- printf("mmap(%#x, %u, PROT_READ|PROT_EXEC, MAP_FILE|MAP_FIXED"
- ", %d, %#x) = %ld %s (%m)\n",
- args1_c[0], args1_c[1], args1_c[4], args1_c[5],
+ printf("mmap(%#lx, %lu, PROT_READ|PROT_EXEC, MAP_FILE|MAP_FIXED"
+ ", %d, %#lx) = %ld %s (%m)\n",
+ args1_c[0], args1_c[1], (int) args1_c[4], args1_c[5],
rc, errno2name());
memcpy(args, args2_c, sizeof(args2_c));
rc = syscall(__NR_mmap, args);
- printf("mmap(NULL, %u, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS"
- ", %d, %#x) = %#lx\n",
- args2_c[1], args2_c[4], args2_c[5], rc);
+# ifndef PATH_TRACING
+ printf("mmap(NULL, %lu, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS"
+ ", %d, %#lx) = %#lx\n",
+ args2_c[1], (int) args2_c[4], args2_c[5], rc);
+# endif
void *addr = (void *) rc;
if (mprotect(addr, page_size, PROT_NONE))
- perror_msg_and_fail("mprotect(%p, %u, PROT_NONE)",
+ perror_msg_and_fail("mprotect(%p, %lu, PROT_NONE)",
addr, page_size);
puts("+++ exited with 0 +++");
@@ -95,7 +103,9 @@ main(void)
#else
-SKIP_MAIN_UNDEFINED("__NR_mmap && (__arm__ || __i386__"
- " || (__s390__ && !__s390x__))")
+SKIP_MAIN_UNDEFINED("defined __NR_mmap "
+ "&& (defined __arm__ || defined __i386__ || defined __m68k__ "
+ "|| defined __s390__ || defined __s390x__) "
+ "&& (defined PATH_TRACING || !(defined __s390x__ || defined __m68k__))")
#endif
diff --git a/tests-mx32/oldselect-P.c b/tests-mx32/oldselect-P.c
new file mode 100644
index 000000000..67e21343b
--- /dev/null
+++ b/tests-mx32/oldselect-P.c
@@ -0,0 +1,2 @@
+#define PATH_TRACING_FD 9
+#include "oldselect.c"
diff --git a/tests-mx32/oldselect-P.gen.test b/tests-mx32/oldselect-P.gen.test
new file mode 100755
index 000000000..3486ffd6e
--- /dev/null
+++ b/tests-mx32/oldselect-P.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (oldselect-P -a13 -e trace=select -P /dev/full 9>>/dev/full); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a13 -e trace=select -P /dev/full 9>>/dev/full
diff --git a/tests-mx32/oldselect-efault-P.c b/tests-mx32/oldselect-efault-P.c
new file mode 100644
index 000000000..9ebf73d2d
--- /dev/null
+++ b/tests-mx32/oldselect-efault-P.c
@@ -0,0 +1,2 @@
+#define PATH_TRACING_FD 9
+#include "oldselect-efault.c"
diff --git a/tests-mx32/oldselect-efault-P.gen.test b/tests-mx32/oldselect-efault-P.gen.test
new file mode 100755
index 000000000..a3d717684
--- /dev/null
+++ b/tests-mx32/oldselect-efault-P.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (oldselect-efault-P -a13 -e trace=select -P /dev/full 9>>/dev/full); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a13 -e trace=select -P /dev/full 9>>/dev/full
diff --git a/tests-mx32/oldselect-efault.c b/tests-mx32/oldselect-efault.c
new file mode 100644
index 000000000..3c443341e
--- /dev/null
+++ b/tests-mx32/oldselect-efault.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2015-2018 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <asm/unistd.h>
+
+#if defined __NR_select && defined __NR__newselect \
+ && __NR_select != __NR__newselect \
+ && !defined __sparc__
+
+# include <stdint.h>
+# include <stdio.h>
+# include <string.h>
+# include <unistd.h>
+# include <sys/select.h>
+
+static const char *errstr;
+
+static long
+xselect(const kernel_ulong_t args)
+{
+ static const kernel_ulong_t dummy = F8ILL_KULONG_MASK | 0xfacefeed;
+ long rc = syscall(__NR_select, args, dummy, dummy, dummy, dummy, dummy);
+ errstr = sprintrc(rc);
+ return rc;
+}
+
+int
+main(void)
+{
+ unsigned long *const args = tail_alloc(sizeof(*args) * 4);
+ memset(args, 0, sizeof(*args) * 4);
+
+ xselect(0);
+#ifndef PATH_TRACING_FD
+ printf("select(NULL) = %s\n", errstr);
+#endif
+
+ xselect((uintptr_t) args);
+#ifndef PATH_TRACING_FD
+ printf("select(%p) = %s\n", args, errstr);
+#endif
+
+ puts("+++ exited with 0 +++");
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_select && __NR__newselect"
+ " && __NR_select != __NR__newselect"
+ " && !defined __sparc__")
+
+#endif
diff --git a/tests-mx32/oldselect-efault.gen.test b/tests-mx32/oldselect-efault.gen.test
new file mode 100755
index 000000000..bfeb55718
--- /dev/null
+++ b/tests-mx32/oldselect-efault.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (oldselect-efault -a13 -e trace=select); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a13 -e trace=select
diff --git a/tests-mx32/oldselect.c b/tests-mx32/oldselect.c
index 7413fc336..7f548f812 100644
--- a/tests-mx32/oldselect.c
+++ b/tests-mx32/oldselect.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 Dmitry V. Levin <ldv@altlinux.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,37 +30,38 @@
#if defined __NR_select && defined __NR__newselect \
&& __NR_select != __NR__newselect \
- && !defined SPARC
+ && !defined __sparc__
-# include <unistd.h>
-# include <sys/select.h>
+# define TEST_SYSCALL_NR __NR_select
+# define TEST_SYSCALL_STR "select"
+# define xselect xselect
+# include "xselect.c"
-int
-main(void)
-{
- int fds[2];
- fd_set r = {}, w = {};
- struct timeval timeout = { .tv_sec = 0, .tv_usec = 42 };
- long args[] = {
- 2, (long) &r, (long) &w, 0, (long) &timeout,
- 0xdeadbeef, 0xbadc0ded, 0xdeadbeef, 0xbadc0ded, 0xdeadbeef
- };
-
- (void) close(0);
- (void) close(1);
- if (pipe(fds))
- perror_msg_and_fail("pipe");
+static uint32_t *args;
- FD_SET(0, &w);
- FD_SET(1, &r);
- if (syscall(__NR_select, args))
- perror_msg_and_skip("select");
-
- return 0;
+static long
+xselect(const kernel_ulong_t nfds,
+ const kernel_ulong_t rs,
+ const kernel_ulong_t ws,
+ const kernel_ulong_t es,
+ const kernel_ulong_t tv)
+{
+ if (!args)
+ args = tail_alloc(sizeof(*args) * 5);
+ args[0] = nfds;
+ args[1] = rs;
+ args[2] = ws;
+ args[3] = es;
+ args[4] = tv;
+ long rc = syscall(TEST_SYSCALL_NR, args);
+ errstr = sprintrc(rc);
+ return rc;
}
#else
-SKIP_MAIN_UNDEFINED("__NR_select && __NR__newselect")
+SKIP_MAIN_UNDEFINED("__NR_select && __NR__newselect"
+ " && __NR_select != __NR__newselect"
+ " && !defined __sparc__")
#endif
diff --git a/tests-mx32/oldselect.expected b/tests-mx32/oldselect.expected
deleted file mode 100644
index d6e7f3c4b..000000000
--- a/tests-mx32/oldselect.expected
+++ /dev/null
@@ -1,2 +0,0 @@
-select(2, [1], [0], NULL, {tv_sec=0, tv_usec=42}) = 0 (Timeout)
-+++ exited with 0 +++
diff --git a/tests-mx32/oldselect.gen.test b/tests-mx32/oldselect.gen.test
new file mode 100755
index 000000000..1f10cbe34
--- /dev/null
+++ b/tests-mx32/oldselect.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (oldselect -a13 -e trace=select); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a13 -e trace=select
diff --git a/tests-mx32/oldselect.test b/tests-mx32/oldselect.test
deleted file mode 100755
index 35661ad43..000000000
--- a/tests-mx32/oldselect.test
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-# Check old select syscall decoding.
-
-. "${srcdir=.}/init.sh"
-
-run_prog
-run_strace -a34 -eselect $args
-match_diff
-
-exit 0
diff --git a/tests-mx32/open.c b/tests-mx32/open.c
index 01e89b0f2..fe486c587 100644
--- a/tests-mx32/open.c
+++ b/tests-mx32/open.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,7 +31,7 @@
#ifdef __NR_open
-# include <fcntl.h>
+# include <asm/fcntl.h>
# include <stdio.h>
# include <unistd.h>
@@ -56,16 +57,11 @@ main(void)
sample, sprintrc(fd));
}
-#ifdef O_TMPFILE
-# if O_TMPFILE == (O_TMPFILE & ~O_DIRECTORY)
-# define STR_O_TMPFILE "O_TMPFILE"
-# else
-# define STR_O_TMPFILE "O_DIRECTORY|O_TMPFILE"
-# endif
+# ifdef O_TMPFILE
fd = syscall(__NR_open, sample, O_WRONLY|O_TMPFILE, 0600);
- printf("open(\"%s\", O_WRONLY|%s, 0600) = %s\n",
- sample, STR_O_TMPFILE, sprintrc(fd));
-#endif /* O_TMPFILE */
+ printf("open(\"%s\", O_WRONLY|O_TMPFILE, 0600) = %s\n",
+ sample, sprintrc(fd));
+# endif /* O_TMPFILE */
puts("+++ exited with 0 +++");
return 0;
diff --git a/tests-mx32/openat.c b/tests-mx32/openat.c
index 1d6765cf6..8c97441a5 100644
--- a/tests-mx32/openat.c
+++ b/tests-mx32/openat.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2016 Katerina Koukiou <k.koukiou@gmail.com>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -28,17 +29,36 @@
#include "tests.h"
#include <asm/unistd.h>
-#if defined __NR_openat
+#ifdef __NR_openat
-# include <fcntl.h>
+# include <asm/fcntl.h>
# include <stdio.h>
# include <unistd.h>
+#ifdef O_TMPFILE
+/* The kernel & C libraries often inline O_DIRECTORY. */
+# define STRACE_O_TMPFILE (O_TMPFILE & ~O_DIRECTORY)
+#else
+# define STRACE_O_TMPFILE 0
+#endif
+
+static const char sample[] = "openat.sample";
+
+static void
+test_mode_flag(unsigned int mode_val, const char *mode_str,
+ unsigned int flag_val, const char *flag_str)
+{
+ long rc = syscall(__NR_openat, -1, sample, mode_val | flag_val, 0);
+ printf("openat(-1, \"%s\", %s%s%s%s) = %s\n",
+ sample, mode_str,
+ flag_val ? "|" : "", flag_str,
+ flag_val & (O_CREAT | STRACE_O_TMPFILE) ? ", 000" : "",
+ sprintrc(rc));
+}
+
int
main(void)
{
- static const char sample[] = "openat.sample";
-
long fd = syscall(__NR_openat, -100, sample, O_RDONLY|O_CREAT, 0400);
printf("openat(AT_FDCWD, \"%s\", O_RDONLY|O_CREAT, 0400) = %s\n",
sample, sprintrc(fd));
@@ -53,6 +73,54 @@ main(void)
sample, sprintrc(fd));
}
+ struct {
+ unsigned int val;
+ const char *str;
+ } modes[] = {
+ { ARG_STR(O_RDONLY) },
+ { ARG_STR(O_WRONLY) },
+ { ARG_STR(O_RDWR) },
+ { ARG_STR(O_ACCMODE) }
+ }, flags[] = {
+ { ARG_STR(O_APPEND) },
+ { ARG_STR(O_DIRECT) },
+ { ARG_STR(O_DIRECTORY) },
+ { ARG_STR(O_EXCL) },
+ { ARG_STR(O_LARGEFILE) },
+ { ARG_STR(O_NOATIME) },
+ { ARG_STR(O_NOCTTY) },
+ { ARG_STR(O_NOFOLLOW) },
+ { ARG_STR(O_NONBLOCK) },
+ { ARG_STR(O_SYNC) },
+ { ARG_STR(O_TRUNC) },
+ { ARG_STR(O_CREAT) },
+# ifdef O_CLOEXEC
+ { ARG_STR(O_CLOEXEC) },
+# endif
+# ifdef O_DSYNC
+ { ARG_STR(O_DSYNC) },
+# endif
+# ifdef __O_SYNC
+ { ARG_STR(__O_SYNC) },
+# endif
+# ifdef O_PATH
+ { ARG_STR(O_PATH) },
+# endif
+# ifdef O_TMPFILE
+ { ARG_STR(O_TMPFILE) },
+# endif
+# ifdef __O_TMPFILE
+ { ARG_STR(__O_TMPFILE) },
+# endif
+ { ARG_STR(0x80000000) },
+ { 0, "" }
+ };
+
+ for (unsigned int m = 0; m < ARRAY_SIZE(modes); ++m)
+ for (unsigned int f = 0; f < ARRAY_SIZE(flags); ++f)
+ test_mode_flag(modes[m].val, modes[m].str,
+ flags[f].val, flags[f].str);
+
puts("+++ exited with 0 +++");
return 0;
}
diff --git a/tests-mx32/openat.gen.test b/tests-mx32/openat.gen.test
index fe29e1ca3..29dd34917 100755
--- a/tests-mx32/openat.gen.test
+++ b/tests-mx32/openat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (openat -P $NAME.sample); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (openat -a36 -P $NAME.sample); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -P $NAME.sample
+run_strace_match_diff -a36 -P $NAME.sample
diff --git a/tests-mx32/options-syntax.test b/tests-mx32/options-syntax.test
index 2e459c964..f81dd992d 100755
--- a/tests-mx32/options-syntax.test
+++ b/tests-mx32/options-syntax.test
@@ -3,7 +3,7 @@
# Check strace options syntax.
#
# Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
-# Copyright (c) 2016-2017 The strace developers.
+# Copyright (c) 2016-2018 The strace developers.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -37,33 +37,10 @@ check_e "Invalid process id: 'a'" -p 1,a
check_e "Syscall 'chdir' for -b isn't supported" -b chdir
check_e "Syscall 'chdir' for -b isn't supported" -b execve -b chdir
-check_e "invalid system call '-1'" -e-1
-check_e "invalid system call '-2'" -e -2
-check_e "invalid system call '-3'" -etrace=-3
-check_e "invalid system call '-4'" -e trace=-4
-check_e "invalid system call '-5'" -e trace=1,-5
-check_e "invalid system call '/non_syscall'" -e trace=/non_syscall
-check_e "invalid system call '2147483647'" -e 2147483647
-check_e "invalid system call '2147483648'" -e 2147483648
-check_e "invalid system call '4294967295'" -e 4294967295
-check_e "invalid system call '4294967296'" -e 4294967296
+check_e_using_grep 'exec: File *name too long' "$(printf '%4096s' ' ')"
-check_e "invalid descriptor '-1'" -eread=-1
-check_e "invalid descriptor '-42'" -ewrite=-42
-check_e "invalid descriptor '2147483648'" -eread=2147483648
-check_e "invalid descriptor '4294967296'" -ewrite=4294967296
-check_e "invalid descriptor 'foo'" -eread=foo
-check_e "invalid descriptor ''" -ewrite=
-check_e "invalid descriptor ','" -eread=,
-check_e "invalid descriptor '!'" -ewrite='!'
-check_e "invalid descriptor '!'" -eread='0,!'
-check_e "invalid descriptor '!,'" -ewrite='!,'
-
-check_e_using_grep 'regcomp: \+id: [[:alpha:]].+' -e trace='/+id'
-check_e_using_grep 'regcomp: \*id: [[:alpha:]].+' -e trace='/*id'
-check_e_using_grep 'regcomp: \{id: [[:alpha:]].+' -e trace='/{id'
-check_e_using_grep 'regcomp: \(id: [[:alpha:]].+' -e trace='/(id'
-check_e_using_grep 'regcomp: \[id: [[:alpha:]].+' -e trace='/[id'
+ff_name="$(printf '%4084s' ' ')"
+check_e_using_grep "$ff_name: File *name too long" -ff -o "$ff_name" true
check_h 'must have PROG [ARGS] or -p PID'
check_h 'PROG [ARGS] must be specified with -D' -D -p $$
@@ -80,12 +57,12 @@ check_h "invalid -s argument: '-42'" -s -42
check_h "invalid -s argument: '1073741824'" -s 1073741824
check_h "invalid -I argument: '5'" -I 5
-../zeroargc "$strace_exp" /bin/true 2> "$LOG" &&
+../zeroargc "$STRACE_EXE" /bin/true 2> "$LOG" &&
dump_log_and_fail_with \
'zeroargc strace failed to handle the error properly'
cat > "$EXP" << __EOF__
-$strace_exp: must have PROG [ARGS] or -p PID
-Try '$strace_exp -h' for more information.
+$STRACE_EXE: must have PROG [ARGS] or -p PID
+Try '$STRACE_EXE -h' for more information.
__EOF__
diff -u -- "$EXP" "$LOG" > /dev/null || {
cat > "$EXP" <<- '__EOF__'
@@ -107,17 +84,17 @@ if [ -n "${UID-}" ]; then
for c in i r t T y; do
check_e "-$c has no effect with -c
-$strace_exp: $umsg" -u :nosuchuser: -c -$c true
+$STRACE_EXE: $umsg" -u :nosuchuser: -c -$c true
done
check_e "-i has no effect with -c
-$strace_exp: -r has no effect with -c
-$strace_exp: -t has no effect with -c
-$strace_exp: -T has no effect with -c
-$strace_exp: -y has no effect with -c
-$strace_exp: $umsg" -u :nosuchuser: -cirtTy true
+$STRACE_EXE: -r has no effect with -c
+$STRACE_EXE: -t has no effect with -c
+$STRACE_EXE: -T has no effect with -c
+$STRACE_EXE: -y has no effect with -c
+$STRACE_EXE: $umsg" -u :nosuchuser: -cirtTy true
check_e "-tt has no effect with -r
-$strace_exp: $umsg" -u :nosuchuser: -r -tt true
+$STRACE_EXE: $umsg" -u :nosuchuser: -r -tt true
fi
args='-p 2147483647'
@@ -127,7 +104,7 @@ $STRACE $args 2> "$LOG" &&
for cmd in PTRACE_SEIZE PTRACE_ATTACH; do
cat > "$EXP" << __EOF__
-$strace_exp: attach: ptrace($cmd, 2147483647): No such process
+$STRACE_EXE: attach: ptrace($cmd, 2147483647): No such process
__EOF__
diff -- "$EXP" "$LOG" ||
continue
diff --git a/tests-mx32/osf_utimes.gen.test b/tests-mx32/osf_utimes.gen.test
index b6be305de..9e683b475 100755
--- a/tests-mx32/osf_utimes.gen.test
+++ b/tests-mx32/osf_utimes.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (osf_utimes -a21); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (osf_utimes -a21 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a21
+run_strace_match_diff -a21
diff --git a/tests-mx32/perf_event_open.c b/tests-mx32/perf_event_open.c
index 74ff9527e..667c31f4b 100644
--- a/tests-mx32/perf_event_open.c
+++ b/tests-mx32/perf_event_open.c
@@ -2,7 +2,7 @@
* Check verbose decoding of perf_event_open syscall.
*
* Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -102,7 +102,8 @@ struct pea_flags {
use_clockid :1,
context_switch :1,
write_backward :1,
- __reserved_1 :36;
+ namespaces :1,
+ __reserved_1 :35;
};
static const char *
@@ -351,9 +352,17 @@ print_event_attr(struct perf_event_attr *attr_ptr, size_t size,
# endif
printf(", write_backward=%" PRIu64, val);
+ val =
+# ifdef HAVE_STRUCT_PERF_EVENT_ATTR_NAMESPACES
+ attr->namespaces;
+# else
+ flags_data.flags.namespaces;
+# endif
+ printf(", namespaces=%" PRIu64, val);
+
val = flags_data.flags.__reserved_1;
if (val)
- printf(", __reserved_1=%#" PRIx64 " /* Bits 63..28 */", val);
+ printf(", __reserved_1=%#" PRIx64 " /* Bits 63..29 */", val);
printf(", %s=%u",
attr->watermark ? "wakeup_watermark" : "wakeup_events",
@@ -523,7 +532,8 @@ end:
"PERF_SAMPLE_BRANCH_IND_JUMP|" \
"PERF_SAMPLE_BRANCH_CALL|" \
"PERF_SAMPLE_BRANCH_NO_FLAGS|" \
- "PERF_SAMPLE_BRANCH_NO_CYCLES"
+ "PERF_SAMPLE_BRANCH_NO_CYCLES|" \
+ "PERF_SAMPLE_BRANCH_TYPE_SAVE"
int
main(void)
@@ -608,7 +618,7 @@ main(void)
static const struct u64_val_str sample_types[] = {
{ ARG_STR(0) },
{ 0x800, "PERF_SAMPLE_BRANCH_STACK" },
- { ARG_ULL_STR(0xdeadc0deda780000) " /* PERF_SAMPLE_??? */" },
+ { ARG_ULL_STR(0xdeadc0deda700000) " /* PERF_SAMPLE_??? */" },
{ 0xffffffffffffffffULL,
"PERF_SAMPLE_IP|PERF_SAMPLE_TID|PERF_SAMPLE_TIME|"
"PERF_SAMPLE_ADDR|PERF_SAMPLE_READ|"
@@ -618,7 +628,8 @@ main(void)
"PERF_SAMPLE_REGS_USER|PERF_SAMPLE_STACK_USER|"
"PERF_SAMPLE_WEIGHT|PERF_SAMPLE_DATA_SRC|"
"PERF_SAMPLE_IDENTIFIER|PERF_SAMPLE_TRANSACTION|"
- "PERF_SAMPLE_REGS_INTR|0xfffffffffff80000" },
+ "PERF_SAMPLE_REGS_INTR|PERF_SAMPLE_PHYS_ADDR|"
+ "0xfffffffffff00000" },
};
static const struct u64_val_str read_formats[] = {
{ ARG_STR(0) },
@@ -650,11 +661,11 @@ main(void)
static const struct u64_val_str branch_sample_types[] = {
{ ARG_STR(0) },
{ 0x80, "PERF_SAMPLE_BRANCH_ABORT_TX" },
- { 0xffff, BRANCH_TYPE_ALL },
- { ARG_ULL_STR(0xdeadcaffeeed0000)
+ { 0x1ffff, BRANCH_TYPE_ALL },
+ { ARG_ULL_STR(0xdeadcaffeeec0000)
" /* PERF_SAMPLE_BRANCH_??? */" },
{ 0xffffffffffffffffULL,
- BRANCH_TYPE_ALL "|0xffffffffffff0000" }
+ BRANCH_TYPE_ALL "|0xfffffffffffe0000" }
};
static const struct s32_val_str clockids[] = {
{ 11, "CLOCK_TAI" },
diff --git a/tests-mx32/perf_event_open.gen.test b/tests-mx32/perf_event_open.gen.test
index 85336c3e3..02d468ab6 100755
--- a/tests-mx32/perf_event_open.gen.test
+++ b/tests-mx32/perf_event_open.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (perf_event_open -a1); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (perf_event_open -a1 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a1
+run_strace_match_diff -a1
diff --git a/tests-mx32/pipe2.gen.test b/tests-mx32/pipe2.gen.test
index 5a06c0307..50b8fd643 100755
--- a/tests-mx32/pipe2.gen.test
+++ b/tests-mx32/pipe2.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pipe2 -a15); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pipe2 -a15 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a15
+run_strace_match_diff -a15
diff --git a/tests-mx32/pkey_alloc.c b/tests-mx32/pkey_alloc.c
index 457727873..4a0aa720a 100644
--- a/tests-mx32/pkey_alloc.c
+++ b/tests-mx32/pkey_alloc.c
@@ -2,6 +2,7 @@
* Check decoding of pkey_alloc syscall.
*
* Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -53,10 +54,12 @@ main(void)
sizeof(kernel_ulong_t) > sizeof(int) ?
"PKEY_DISABLE_WRITE|0xbadc0ded00000000" :
"PKEY_DISABLE_WRITE" },
- { 0xdec0ded, "PKEY_DISABLE_ACCESS|0xdec0dec" },
- { 0x3, "PKEY_DISABLE_ACCESS|PKEY_DISABLE_WRITE" },
+ { 0xdec0ded, "PKEY_DISABLE_ACCESS|PKEY_DISABLE_EXECUTE|"
+ "0xdec0de8" },
+ { 0x7, "PKEY_DISABLE_ACCESS|PKEY_DISABLE_WRITE|"
+ "PKEY_DISABLE_EXECUTE" },
{ ARG_STR(0) },
- { 0xbadc0dec, "0xbadc0dec /* PKEY_??? */" },
+ { 0xbadc0de8, "0xbadc0de8 /* PKEY_??? */" },
};
long rc;
diff --git a/tests-mx32/pkey_alloc.gen.test b/tests-mx32/pkey_alloc.gen.test
index b3e586923..fb554efcc 100755
--- a/tests-mx32/pkey_alloc.gen.test
+++ b/tests-mx32/pkey_alloc.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pkey_alloc -a17); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pkey_alloc -a17 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a17
+run_strace_match_diff -a17
diff --git a/tests-mx32/pkey_free.gen.test b/tests-mx32/pkey_free.gen.test
index 588d1aa63..0374cc73f 100755
--- a/tests-mx32/pkey_free.gen.test
+++ b/tests-mx32/pkey_free.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pkey_free -a13); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pkey_free -a13 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a13
+run_strace_match_diff -a13
diff --git a/tests-mx32/pkey_mprotect.gen.test b/tests-mx32/pkey_mprotect.gen.test
index 14be2311f..11a902a56 100755
--- a/tests-mx32/pkey_mprotect.gen.test
+++ b/tests-mx32/pkey_mprotect.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pkey_mprotect -a37); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pkey_mprotect -a37 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a37
+run_strace_match_diff -a37
diff --git a/tests-mx32/poll-P.c b/tests-mx32/poll-P.c
new file mode 100644
index 000000000..7bbeb795d
--- /dev/null
+++ b/tests-mx32/poll-P.c
@@ -0,0 +1,2 @@
+#define PATH_TRACING_FD 9
+#include "poll.c"
diff --git a/tests-mx32/poll-P.test b/tests-mx32/poll-P.test
new file mode 100755
index 000000000..a19057230
--- /dev/null
+++ b/tests-mx32/poll-P.test
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Check path tracing of poll syscall.
+
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null
+run_strace -a16 -vepoll -P /dev/full 9>>/dev/full \
+ $args > "$EXP"
+match_diff "$LOG" "$EXP"
+
+for abbrev in 0 1 2 3 4 5; do
+ run_prog "../$NAME" $abbrev > /dev/null
+ run_strace -a16 -epoll -s$abbrev -P /dev/full 9>>/dev/full \
+ $args > "$EXP"
+ match_diff "$LOG" "$EXP"
+done
diff --git a/tests-mx32/poll.c b/tests-mx32/poll.c
index 2bf8c1a1a..c5930a3ea 100644
--- a/tests-mx32/poll.c
+++ b/tests-mx32/poll.c
@@ -1,8 +1,7 @@
/*
- * This file is part of poll strace test.
+ * Check decoding of poll syscall.
*
- * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 Dmitry V. Levin <ldv@altlinux.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -38,6 +37,7 @@
# include <poll.h>
# include <stdio.h>
# include <stdlib.h>
+# include <string.h>
# include <unistd.h>
#define PRINT_EVENT(flag, member) \
@@ -163,12 +163,19 @@ print_pollfd_array_exiting(const struct pollfd *const pfd,
int
main(int ac, char **av)
{
+# ifdef PATH_TRACING_FD
+ skip_if_unavailable("/proc/self/fd/");
+# endif
+
tprintf("%s", "");
assert(syscall(__NR_poll, NULL, 42, 0) == -1);
if (ENOSYS == errno)
perror_msg_and_skip("poll");
+
+# ifndef PATH_TRACING_FD
tprintf("poll(NULL, 42, 0) = -1 EFAULT (%m)\n");
+# endif
int fds[2];
if (pipe(fds) || pipe(fds))
@@ -187,11 +194,14 @@ main(int ac, char **av)
int rc = syscall(__NR_poll, tail_fds0, 0, timeout);
assert(rc == 0);
+# ifndef PATH_TRACING_FD
tprintf("poll([], 0, %d) = %d (Timeout)\n", timeout, rc);
+# endif
rc = syscall(__NR_poll, tail_fds0, ARRAY_SIZE(pfds0), timeout);
assert(rc == 3);
+# ifndef PATH_TRACING_FD
tprintf("poll(");
print_pollfd_array_entering(tail_fds0, ARRAY_SIZE(pfds0),
ARRAY_SIZE(pfds0), abbrev);
@@ -199,6 +209,7 @@ main(int ac, char **av)
(unsigned int) ARRAY_SIZE(pfds0), timeout, rc);
print_pollfd_array_exiting(tail_fds0, ARRAY_SIZE(pfds0), abbrev);
tprintf(")\n");
+# endif /* !PATH_TRACING_FD */
tail_fds0[0].fd = -1;
tail_fds0[2].fd = -3;
@@ -206,6 +217,7 @@ main(int ac, char **av)
rc = syscall(__NR_poll, tail_fds0, ARRAY_SIZE(pfds0), timeout);
assert(rc == 2);
+# ifndef PATH_TRACING_FD
tprintf("poll(");
print_pollfd_array_entering(tail_fds0, ARRAY_SIZE(pfds0),
ARRAY_SIZE(pfds0), abbrev);
@@ -213,12 +225,14 @@ main(int ac, char **av)
(unsigned int) ARRAY_SIZE(pfds0), timeout, rc);
print_pollfd_array_exiting(tail_fds0, ARRAY_SIZE(pfds0), abbrev);
tprintf(")\n");
+# endif /* !PATH_TRACING_FD */
tail_fds0[1].fd = -2;
tail_fds0[4].fd = -5;
rc = syscall(__NR_poll, tail_fds0, ARRAY_SIZE(pfds0), timeout);
assert(rc == 1);
+# ifndef PATH_TRACING_FD
tprintf("poll(");
print_pollfd_array_entering(tail_fds0, ARRAY_SIZE(pfds0),
ARRAY_SIZE(pfds0), abbrev);
@@ -226,6 +240,7 @@ main(int ac, char **av)
(unsigned int) ARRAY_SIZE(pfds0), timeout, rc);
print_pollfd_array_exiting(tail_fds0, ARRAY_SIZE(pfds0), abbrev);
tprintf(")\n");
+# endif /* !PATH_TRACING_FD */
struct pollfd pfds1[] = {
{ .fd = 1, .events = POLLIN | POLLPRI | POLLRDNORM | POLLRDBAND },
@@ -235,25 +250,58 @@ main(int ac, char **av)
rc = syscall(__NR_poll, tail_fds1, ARRAY_SIZE(pfds1), timeout);
assert(rc == 0);
+# ifndef PATH_TRACING_FD
tprintf("poll(");
print_pollfd_array_entering(tail_fds1, ARRAY_SIZE(pfds1),
ARRAY_SIZE(pfds1), abbrev);
tprintf(", %u, %d) = %d (Timeout)\n",
(unsigned int) ARRAY_SIZE(pfds1), timeout, rc);
+# endif /* !PATH_TRACING_FD */
const void *const efault = tail_fds0 + ARRAY_SIZE(pfds0);
rc = syscall(__NR_poll, efault, 1, 0);
assert(rc == -1);
+
+# ifndef PATH_TRACING_FD
tprintf("poll(%p, 1, 0) = -1 EFAULT (%m)\n", efault);
+# endif
const unsigned int valid = 1;
const void *const epfds = tail_fds0 + ARRAY_SIZE(pfds0) - valid;
rc = syscall(__NR_poll, epfds, valid + 1, 0);
assert(rc == -1);
+
+# ifndef PATH_TRACING_FD
+ tprintf("poll(");
+ print_pollfd_array_entering(epfds, valid + 1, valid, abbrev);
+ errno = EFAULT;
+ tprintf(", %u, 0) = -1 EFAULT (%m)\n", valid + 1);
+# endif /* !PATH_TRACING_FD */
+
+# ifdef PATH_TRACING_FD
+ memcpy(tail_fds0, pfds0, sizeof(pfds0));
+ tail_fds0[4].fd = PATH_TRACING_FD;
+
+ rc = syscall(__NR_poll, tail_fds0, ARRAY_SIZE(pfds0), timeout);
+ assert(rc == 3);
+
+ tprintf("poll(");
+ print_pollfd_array_entering(tail_fds0, ARRAY_SIZE(pfds0),
+ ARRAY_SIZE(pfds0), abbrev);
+ tprintf(", %u, %d) = %d (",
+ (unsigned int) ARRAY_SIZE(pfds0), timeout, rc);
+ print_pollfd_array_exiting(tail_fds0, ARRAY_SIZE(pfds0), abbrev);
+ tprintf(")\n");
+
+ rc = syscall(__NR_poll, epfds, valid + 1, 0);
+ assert(rc == -1);
+
+ /* the 1st pollfd element is readable and contains PATH_TRACING_FD */
tprintf("poll(");
print_pollfd_array_entering(epfds, valid + 1, valid, abbrev);
errno = EFAULT;
tprintf(", %u, 0) = -1 EFAULT (%m)\n", valid + 1);
+# endif /* PATH_TRACING_FD */
tprintf("+++ exited with 0 +++\n");
return 0;
diff --git a/tests-mx32/ppoll-P.c b/tests-mx32/ppoll-P.c
new file mode 100644
index 000000000..c2c572e28
--- /dev/null
+++ b/tests-mx32/ppoll-P.c
@@ -0,0 +1,2 @@
+#define PATH_TRACING_FD 9
+#include "ppoll.c"
diff --git a/tests-mx32/ppoll-P.gen.test b/tests-mx32/ppoll-P.gen.test
new file mode 100755
index 000000000..25a970484
--- /dev/null
+++ b/tests-mx32/ppoll-P.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ppoll-P -s2 -e trace=ppoll -P /dev/full 9>>/dev/full); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -s2 -e trace=ppoll -P /dev/full 9>>/dev/full
diff --git a/tests-mx32/ppoll.c b/tests-mx32/ppoll.c
index 622418392..b33f9593e 100644
--- a/tests-mx32/ppoll.c
+++ b/tests-mx32/ppoll.c
@@ -1,7 +1,7 @@
/*
* Check decoding of ppoll syscall.
*
- * Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2015-2018 Dmitry V. Levin <ldv@altlinux.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -56,6 +56,10 @@ sys_ppoll(const kernel_ulong_t ufds,
int
main(void)
{
+# ifdef PATH_TRACING_FD
+ skip_if_unavailable("/proc/self/fd/");
+# endif
+
static const kernel_ulong_t bogus_nfds =
(kernel_ulong_t) 0xdeadbeeffacefeedULL;
static const kernel_ulong_t bogus_sigsetsize =
@@ -76,28 +80,36 @@ main(void)
sys_ppoll(0, bogus_nfds, 0, 0, bogus_sigsetsize);
if (ENOSYS == errno)
perror_msg_and_skip("ppoll");
+# ifndef PATH_TRACING_FD
printf("ppoll(NULL, %u, NULL, NULL, %llu) = %s\n",
(unsigned) bogus_nfds, (unsigned long long) bogus_sigsetsize,
errstr);
+# endif
sys_ppoll((unsigned long) efault, 42, (unsigned long) efault + 8,
(unsigned long) efault + 16, sigset_size);
+# ifndef PATH_TRACING_FD
printf("ppoll(%p, %u, %p, %p, %u) = %s\n",
efault, 42, efault + 8, efault + 16, sigset_size, errstr);
+# endif
ts->tv_sec = 0xdeadbeefU;
ts->tv_nsec = 0xfacefeedU;
sys_ppoll(0, 0, (unsigned long) ts, 0, sigset_size);
+# ifndef PATH_TRACING_FD
printf("ppoll(NULL, 0, {tv_sec=%lld, tv_nsec=%llu}, NULL, %u) = %s\n",
(long long) ts->tv_sec, zero_extend_signed_to_ull(ts->tv_nsec),
sigset_size, errstr);
+# endif
ts->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
ts->tv_nsec = (long) 0xbadc0dedfacefeedL;
sys_ppoll(0, 0, (unsigned long) ts, 0, sigset_size);
+# ifndef PATH_TRACING_FD
printf("ppoll(NULL, 0, {tv_sec=%lld, tv_nsec=%llu}, NULL, %u) = %s\n",
(long long) ts->tv_sec, zero_extend_signed_to_ull(ts->tv_nsec),
sigset_size, errstr);
+# endif
if (pipe(pipe_fd) || pipe(pipe_fd + 2))
perror_msg_and_fail("pipe");
@@ -124,24 +136,56 @@ main(void)
(unsigned long) sigmask, sigset_size);
if (rc != 2)
perror_msg_and_fail("ppoll 1");
+# ifndef PATH_TRACING_FD
printf("ppoll([{fd=%d, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}"
", {fd=%d, events=POLLOUT%s|POLLWRBAND}"
-#if VERBOSE
+# if VERBOSE
", {fd=%d, events=POLLIN|POLLPRI}, {fd=%d, events=POLLOUT}]"
-#else
+# else
", ...]"
-#endif
+# endif
", %u, {tv_sec=42, tv_nsec=999999999}, [%s], %u) = %ld"
" ([{fd=%d, revents=POLLOUT%s}, {fd=%d, revents=POLLOUT}]"
", left {tv_sec=%u, tv_nsec=%u})\n",
pipe_fd[0], pipe_fd[1], POLLWRNORM_str,
-#if VERBOSE
+# if VERBOSE
pipe_fd[2], pipe_fd[3],
-#endif
+# endif
(unsigned int) ARRAY_SIZE(fds1), USR2_CHLD_str,
(unsigned int) sigset_size, rc, pipe_fd[1], POLLWRNORM_str,
pipe_fd[3], (unsigned int) ts->tv_sec,
(unsigned int) ts->tv_nsec);
+# endif /* !PATH_TRACING_FD */
+
+# ifdef PATH_TRACING_FD
+ ts->tv_sec = 123;
+ ts->tv_nsec = 987654321;
+ fds[3].fd = PATH_TRACING_FD;
+
+ rc = sys_ppoll((unsigned long) fds,
+ F8ILL_KULONG_MASK | ARRAY_SIZE(fds1), (unsigned long) ts,
+ (unsigned long) sigmask, sigset_size);
+ if (rc != 2)
+ perror_msg_and_fail("ppoll -P");
+ printf("ppoll([{fd=%d, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}"
+ ", {fd=%d, events=POLLOUT%s|POLLWRBAND}"
+# if VERBOSE
+ ", {fd=%d, events=POLLIN|POLLPRI}, {fd=%d, events=POLLOUT}]"
+# else
+ ", ...]"
+# endif
+ ", %u, {tv_sec=123, tv_nsec=987654321}, [%s], %u) = %ld"
+ " ([{fd=%d, revents=POLLOUT%s}, {fd=%d, revents=POLLOUT}]"
+ ", left {tv_sec=%u, tv_nsec=%u})\n",
+ pipe_fd[0], pipe_fd[1], POLLWRNORM_str,
+# if VERBOSE
+ pipe_fd[2], PATH_TRACING_FD,
+# endif
+ (unsigned int) ARRAY_SIZE(fds1), USR2_CHLD_str,
+ (unsigned int) sigset_size, rc, pipe_fd[1], POLLWRNORM_str,
+ PATH_TRACING_FD, (unsigned int) ts->tv_sec,
+ (unsigned int) ts->tv_nsec);
+# endif /* PATH_TRACING_FD */
ts->tv_sec = 0;
ts->tv_nsec = 999;
@@ -163,23 +207,27 @@ main(void)
(unsigned long) sigmask, sigset_size);
if (rc != 0)
perror_msg_and_fail("ppoll 2");
+# ifndef PATH_TRACING_FD
printf("ppoll([{fd=%d, events=POLLIN|POLLPRI|POLLRDNORM|POLLRDBAND}"
", {fd=%d, events=POLLOUT%s|POLLWRBAND}], %u"
", {tv_sec=0, tv_nsec=999}, ~[HUP KILL STOP], %u)"
" = %ld (Timeout)\n",
pipe_fd[1], pipe_fd[0], POLLWRNORM_str,
(unsigned) ARRAY_SIZE(fds2), sigset_size, rc);
+# endif /* !PATH_TRACING_FD */
if (F8ILL_KULONG_SUPPORTED) {
sys_ppoll(f8ill_ptr_to_kulong(fds), ARRAY_SIZE(fds2),
f8ill_ptr_to_kulong(ts), f8ill_ptr_to_kulong(sigmask),
sigset_size);
+# ifndef PATH_TRACING_FD
printf("ppoll(%#llx, %u, %#llx, %#llx, %u) = %s\n",
(unsigned long long) f8ill_ptr_to_kulong(fds),
(unsigned) ARRAY_SIZE(fds2),
(unsigned long long) f8ill_ptr_to_kulong(ts),
(unsigned long long) f8ill_ptr_to_kulong(sigmask),
(unsigned) sigset_size, errstr);
+# endif /* !PATH_TRACING_FD */
}
puts("+++ exited with 0 +++");
diff --git a/tests-mx32/ppoll.gen.test b/tests-mx32/ppoll.gen.test
index 4c0759893..120e95366 100755
--- a/tests-mx32/ppoll.gen.test
+++ b/tests-mx32/ppoll.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ppoll -s2); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ppoll -s2 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -s2
+run_strace_match_diff -s2
diff --git a/tests-mx32/prctl-dumpable.c b/tests-mx32/prctl-dumpable.c
index 1049bcee8..52c166800 100644
--- a/tests-mx32/prctl-dumpable.c
+++ b/tests-mx32/prctl-dumpable.c
@@ -3,6 +3,7 @@
*
* Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com>
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,7 +33,8 @@
#include <asm/unistd.h>
#include <linux/prctl.h>
-#if defined __NR_prctl && defined PR_GET_DUMPABLE && defined PR_SET_DUMPABLE
+#if defined __NR_prctl && defined PR_GET_DUMPABLE && defined PR_SET_DUMPABLE \
+ && !defined __ia64__
# include <stdio.h>
# include <unistd.h>
@@ -101,6 +103,7 @@ main(void)
#else
-SKIP_MAIN_UNDEFINED("__NR_prctl && PR_GET_DUMPABLE && PR_SET_DUMPABLE")
+SKIP_MAIN_UNDEFINED("__NR_prctl && PR_GET_DUMPABLE && PR_SET_DUMPABLE"
+ " && !__ia64__")
#endif
diff --git a/tests-mx32/preadv.gen.test b/tests-mx32/preadv.gen.test
index 8fb7b5405..c3fabe6f7 100755
--- a/tests-mx32/preadv.gen.test
+++ b/tests-mx32/preadv.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (preadv -a21); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (preadv -a21 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a21
+run_strace_match_diff -a21
diff --git a/tests-mx32/print_user_desc.c b/tests-mx32/print_user_desc.c
new file mode 100644
index 000000000..2dac38795
--- /dev/null
+++ b/tests-mx32/print_user_desc.c
@@ -0,0 +1,78 @@
+/*
+ * Auxiliary printing function for the struct user_desc type.
+ * Used by modify_ldt and xet_thread_area tests.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#ifdef HAVE_STRUCT_USER_DESC
+
+# include <asm/ldt.h>
+
+/**
+ * Print user_desc structure.
+ *
+ * @param us Pointer to struct user_desc to print.
+ * @param entry_str If not NULL, the string is printed as a value of
+ * entry_number field.
+ */
+static void
+print_user_desc(struct user_desc *us, const char *entry_str)
+{
+ if (entry_str)
+ printf("{entry_number=%s", entry_str);
+ else
+ printf("{entry_number=%u", us->entry_number);
+
+ printf(", base_addr=%#08x"
+ ", limit=%#08x"
+ ", seg_32bit=%u"
+ ", contents=%u"
+ ", read_exec_only=%u"
+ ", limit_in_pages=%u"
+ ", seg_not_present=%u"
+ ", useable=%u"
+# ifdef __x86_64__
+ ", lm=%u"
+# endif
+ "}",
+ us->base_addr,
+ us->limit,
+ us->seg_32bit,
+ us->contents,
+ us->read_exec_only,
+ us->limit_in_pages,
+ us->seg_not_present,
+ us->useable
+# ifdef __x86_64__
+ , us->lm
+# endif
+ );
+}
+
+#endif /* HAVE_STRUCT_USER_DESC */
diff --git a/tests-mx32/printpath-umovestr.c b/tests-mx32/printpath-umovestr.c
index a7251e5ed..0d5955ff1 100644
--- a/tests-mx32/printpath-umovestr.c
+++ b/tests-mx32/printpath-umovestr.c
@@ -2,6 +2,7 @@
* Test regular printpath/umovestr.
*
* Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,8 +30,8 @@
#include "tests.h"
#include "test_ucopy.h"
+#include <limits.h>
#include <stdio.h>
-#include <sys/param.h>
int
main(void)
diff --git a/tests-mx32/prlimit64.gen.test b/tests-mx32/prlimit64.gen.test
index 11964a5e1..2c94fc9d2 100755
--- a/tests-mx32/prlimit64.gen.test
+++ b/tests-mx32/prlimit64.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (prlimit64 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (prlimit64 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/pselect6.gen.test b/tests-mx32/pselect6.gen.test
index c89e70543..29d389632 100755
--- a/tests-mx32/pselect6.gen.test
+++ b/tests-mx32/pselect6.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pselect6 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (pselect6 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/ptrace.c b/tests-mx32/ptrace.c
index d776dcdd2..c70d56895 100644
--- a/tests-mx32/ptrace.c
+++ b/tests-mx32/ptrace.c
@@ -2,7 +2,7 @@
* Check decoding of ptrace syscall.
*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,12 +32,12 @@
#include <asm/unistd.h>
#include <errno.h>
+#include "ptrace.h"
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/wait.h>
#include <unistd.h>
-#include "ptrace.h"
#include <linux/audit.h>
static const char *errstr;
diff --git a/tests-mx32/pure_executables.am b/tests-mx32/pure_executables.am
index 2cae9ae55..128028fe9 100644
--- a/tests-mx32/pure_executables.am
+++ b/tests-mx32/pure_executables.am
@@ -104,6 +104,7 @@ PURE_EXECUTABLES = \
ioctl_block \
ioctl_dm \
ioctl_evdev \
+ ioctl_kvm_run \
ioctl_loop \
ioctl_mtd \
ioctl_rtc \
@@ -154,6 +155,7 @@ PURE_EXECUTABLES = \
mmap64 \
mmsg \
mmsg_name \
+ modify_ldt \
mount \
move_pages \
mq \
@@ -223,9 +225,12 @@ PURE_EXECUTABLES = \
nlattr_tcmsg \
nlattr_unix_diag_msg \
old_mmap \
+ old_mmap-P \
+ old_mmap-v-none \
oldfstat \
oldlstat \
oldselect \
+ oldselect-efault \
oldstat \
open \
openat \
@@ -239,7 +244,9 @@ PURE_EXECUTABLES = \
pkey_free \
pkey_mprotect \
poll \
+ poll-P \
ppoll \
+ ppoll-P \
prctl-arg2-intptr \
prctl-dumpable \
prctl-name \
@@ -282,6 +289,7 @@ PURE_EXECUTABLES = \
renameat \
renameat2 \
request_key \
+ riscv_flush_icache \
rmdir \
rt_sigaction \
rt_sigpending \
@@ -291,6 +299,12 @@ PURE_EXECUTABLES = \
rt_sigsuspend \
rt_sigtimedwait \
rt_tgsigqueueinfo \
+ s390_guarded_storage \
+ s390_guarded_storage-v \
+ s390_pci_mmio_read_write \
+ s390_runtime_instr \
+ s390_sthyi \
+ s390_sthyi-v \
sched_get_priority_mxx \
sched_rr_get_interval \
sched_xetaffinity \
@@ -342,6 +356,7 @@ PURE_EXECUTABLES = \
so_peercred \
sock_filter-v \
socketcall \
+ sockopt-sol_netlink \
splice \
stat \
stat64 \
@@ -393,6 +408,7 @@ PURE_EXECUTABLES = \
xattr \
xattr-strings \
xet_robust_list \
+ xet_thread_area_x86 \
xetitimer \
xetpgid \
xetpriority \
diff --git a/tests-mx32/pure_executables.list b/tests-mx32/pure_executables.list
index d98b17db1..2f602a934 100755
--- a/tests-mx32/pure_executables.list
+++ b/tests-mx32/pure_executables.list
@@ -103,6 +103,7 @@ ioctl
ioctl_block
ioctl_dm
ioctl_evdev
+ioctl_kvm_run
ioctl_loop
ioctl_mtd
ioctl_rtc
@@ -153,6 +154,7 @@ mmap
mmap64
mmsg
mmsg_name
+modify_ldt
mount
move_pages
mq
@@ -222,9 +224,12 @@ nlattr_tcamsg
nlattr_tcmsg
nlattr_unix_diag_msg
old_mmap
+old_mmap-P
+old_mmap-v-none
oldfstat
oldlstat
oldselect
+oldselect-efault
oldstat
open
openat
@@ -238,7 +243,9 @@ pkey_alloc
pkey_free
pkey_mprotect
poll
+poll-P
ppoll
+ppoll-P
prctl-arg2-intptr
prctl-dumpable
prctl-name
@@ -281,6 +288,7 @@ rename
renameat
renameat2
request_key
+riscv_flush_icache
rmdir
rt_sigaction
rt_sigpending
@@ -290,6 +298,12 @@ rt_sigreturn
rt_sigsuspend
rt_sigtimedwait
rt_tgsigqueueinfo
+s390_guarded_storage
+s390_guarded_storage-v
+s390_pci_mmio_read_write
+s390_runtime_instr
+s390_sthyi
+s390_sthyi-v
sched_get_priority_mxx
sched_rr_get_interval
sched_xetaffinity
@@ -341,6 +355,7 @@ so_linger
so_peercred
sock_filter-v
socketcall
+sockopt-sol_netlink
splice
stat
stat64
@@ -392,6 +407,7 @@ waitpid
xattr
xattr-strings
xet_robust_list
+xet_thread_area_x86
xetitimer
xetpgid
xetpriority
diff --git a/tests-mx32/qual_fault-syntax.test b/tests-mx32/qual_fault-syntax.test
index 0cce539a9..43ade7699 100755
--- a/tests-mx32/qual_fault-syntax.test
+++ b/tests-mx32/qual_fault-syntax.test
@@ -2,7 +2,7 @@
#
# Check -e fault= syntax.
#
-# Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2016-2018 Dmitry V. Levin <ldv@altlinux.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -40,16 +40,7 @@ fail_with()
"strace -e fault=$* failed to handle an argument error properly"
}
-for arg in '' , ,, ,,, : :: ::: \! \!, \!: \
- invalid_syscall_name \
- invalid_syscall_name:when=3 \
- -1 \!-1 \
- -1:when=4 \
- -2 \
- -2:when=5 \
- 32767 \!32767 \
- 32767:when=6 \
- chdir:42 \!chdir:42 \
+for arg in chdir:42 \!chdir:42 \
chdir:42:when=7 \
chdir:invalid \
chdir:invalid:when=8 \
@@ -92,12 +83,6 @@ for arg in '' , ,, ,,, : :: ::: \! \!, \!: \
chdir:when=65536:error=30 \
chdir:when=1+65536 \
chdir:when=1+65536:error=31 \
- file,nonsense \
- \!desc,nonsense \
- chdir,nonsense \
- \!chdir,nonsense \
- 1,nonsense \
- \!1,nonsense \
chdir:retval=0 \
chdir:signal=1 \
chdir:error=1:error=2 \
diff --git a/tests-mx32/qual_fault.c b/tests-mx32/qual_fault.c
index 05401dec3..670d9fe72 100644
--- a/tests-mx32/qual_fault.c
+++ b/tests-mx32/qual_fault.c
@@ -2,7 +2,7 @@
* Check that fault injection works properly.
*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,11 +33,11 @@
#include <assert.h>
#include <errno.h>
#include <fcntl.h>
+#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
#include <sys/stat.h>
#include <sys/uio.h>
#include <sys/wait.h>
diff --git a/tests-mx32/qual_inject-syntax.test b/tests-mx32/qual_inject-syntax.test
index 7aa618099..46cead289 100755
--- a/tests-mx32/qual_inject-syntax.test
+++ b/tests-mx32/qual_inject-syntax.test
@@ -2,7 +2,7 @@
#
# Check -e inject= syntax.
#
-# Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
+# Copyright (c) 2016-2018 Dmitry V. Levin <ldv@altlinux.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -40,17 +40,7 @@ fail_with()
"strace -e inject=$* failed to handle an argument error properly"
}
-for arg in '' , ,, ,,, : :: ::: \! \!, \!: \
- invalid_syscall_name \
- invalid_syscall_name:when=3 \
- -1 \!-1 \
- -1:when=4 \
- -2 \
- -2:when=5 \
- 32767 \!32767 \
- 32767:when=6 \
- 42 \
- chdir \
+for arg in 42 chdir \
chdir:42 \!chdir:42 \
chdir:42:when=7 \
chdir:invalid \
@@ -94,12 +84,6 @@ for arg in '' , ,, ,,, : :: ::: \! \!, \!: \
chdir:when=65536:error=30 \
chdir:when=1+65536 \
chdir:when=1+65536:error=31 \
- file,nonsense \
- \!desc,nonsense \
- chdir,nonsense \
- \!chdir,nonsense \
- 1,nonsense \
- \!1,nonsense \
chdir:retval=-1 \
chdir:signal=0 \
chdir:signal=129 \
diff --git a/tests-mx32/quotactl.gen.test b/tests-mx32/quotactl.gen.test
index c6ad6e1ef..6d2dc7543 100755
--- a/tests-mx32/quotactl.gen.test
+++ b/tests-mx32/quotactl.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (quotactl ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (quotactl ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/readahead.gen.test b/tests-mx32/readahead.gen.test
index 4e88efa6f..c27ab0d0a 100755
--- a/tests-mx32/readahead.gen.test
+++ b/tests-mx32/readahead.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readahead -a1); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readahead -a1 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a1
+run_strace_match_diff -a1
diff --git a/tests-mx32/readdir.gen.test b/tests-mx32/readdir.gen.test
index 10da83b27..09aad4f6e 100755
--- a/tests-mx32/readdir.gen.test
+++ b/tests-mx32/readdir.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readdir -a16); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readdir -a16 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a16
+run_strace_match_diff -a16
diff --git a/tests-mx32/readlink.gen.test b/tests-mx32/readlink.gen.test
index 755fc8b3a..42632341e 100755
--- a/tests-mx32/readlink.gen.test
+++ b/tests-mx32/readlink.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlink -xx); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlink -xx ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -xx
+run_strace_match_diff -xx
diff --git a/tests-mx32/readlinkat.gen.test b/tests-mx32/readlinkat.gen.test
index 2a502999f..d7de9932b 100755
--- a/tests-mx32/readlinkat.gen.test
+++ b/tests-mx32/readlinkat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlinkat -xx); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (readlinkat -xx ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -xx
+run_strace_match_diff -xx
diff --git a/tests-mx32/reboot.c b/tests-mx32/reboot.c
index ce651dc7a..3f819ce89 100644
--- a/tests-mx32/reboot.c
+++ b/tests-mx32/reboot.c
@@ -10,21 +10,83 @@
# define INVALID_MAGIC 319887762
# define INVALID_CMD 0x01234568
+# define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
+# define STR128 STR32 STR32 STR32 STR32
+
int
main(void)
{
+ static const kernel_ulong_t bogus_magic1 =
+ (kernel_ulong_t) 0xFFFFFFFFFFFFFFFFULL;
+ static const kernel_ulong_t bogus_magic2 =
+ (kernel_ulong_t) 0xdeadfacefa57beefULL;
+ static const kernel_ulong_t bogus_cmd =
+ (kernel_ulong_t) 0xbadda7a09caffee1ULL;
static const char buf[] = "reboot";
- long rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1,
+ static const char str256_buf[] = STR128 STR128;
+
+ long rc;
+ char *str256 = tail_memdup(str256_buf, sizeof(str256_buf) - 1);
+
+ rc = syscall(__NR_reboot, 0, 0, 0, 0);
+ printf("reboot(0 /* LINUX_REBOOT_MAGIC_??? */, "
+ "0 /* LINUX_REBOOT_MAGIC_??? */, "
+ "LINUX_REBOOT_CMD_CAD_OFF) = %s\n",
+ sprintrc(rc));
+
+ rc = syscall(__NR_reboot, bogus_magic1, bogus_magic2, bogus_cmd, -1);
+ printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
+ "%#x /* LINUX_REBOOT_MAGIC_??? */, "
+ "%#x /* LINUX_REBOOT_CMD_??? */) = %s\n",
+ (unsigned int) bogus_magic1, (unsigned int) bogus_magic2,
+ (unsigned int) bogus_cmd, sprintrc(rc));
+
+ rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1,
INVALID_MAGIC, LINUX_REBOOT_CMD_RESTART2, buf);
printf("reboot(LINUX_REBOOT_MAGIC1, %#x /* LINUX_REBOOT_MAGIC_??? */,"
- " LINUX_REBOOT_CMD_RESTART2, \"%s\") = %ld %s (%m)\n",
- INVALID_MAGIC, buf, rc, errno2name());
+ " LINUX_REBOOT_CMD_RESTART2, \"%s\") = %s\n",
+ INVALID_MAGIC, buf, sprintrc(rc));
rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1,
LINUX_REBOOT_MAGIC2, INVALID_CMD);
printf("reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,"
- " %#x /* LINUX_REBOOT_CMD_??? */) = %ld %s (%m)\n",
- INVALID_CMD, rc, errno2name());
+ " %#x /* LINUX_REBOOT_CMD_??? */) = %s\n",
+ INVALID_CMD, sprintrc(rc));
+
+ rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2A,
+ LINUX_REBOOT_CMD_RESTART2, str256);
+ printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2A, "
+ "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
+ INVALID_MAGIC, str256, sprintrc(rc));
+
+ rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2B,
+ LINUX_REBOOT_CMD_RESTART2, str256 + 1);
+ printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2B, "
+ "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
+ INVALID_MAGIC, str256 + 1, sprintrc(rc));
+
+ rc = syscall(__NR_reboot, INVALID_MAGIC, LINUX_REBOOT_MAGIC2C,
+ LINUX_REBOOT_CMD_RESTART2, str256 + 2);
+ printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, LINUX_REBOOT_MAGIC2C, "
+ "LINUX_REBOOT_CMD_RESTART2, %p) = %s\n",
+ INVALID_MAGIC, str256 + 2, sprintrc(rc));
+
+ str256[255] = '\0';
+ rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1,
+ LINUX_REBOOT_CMD_RESTART2, str256);
+ printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
+ "%#x /* LINUX_REBOOT_MAGIC_??? */, "
+ "LINUX_REBOOT_CMD_RESTART2, \"%.255s\"...) = %s\n",
+ INVALID_MAGIC, (unsigned int) bogus_magic1, str256,
+ sprintrc(rc));
+
+ rc = syscall(__NR_reboot, INVALID_MAGIC, bogus_magic1,
+ LINUX_REBOOT_CMD_RESTART2, str256 + 1);
+ printf("reboot(%#x /* LINUX_REBOOT_MAGIC_??? */, "
+ "%#x /* LINUX_REBOOT_MAGIC_??? */, "
+ "LINUX_REBOOT_CMD_RESTART2, \"%.254s\") = %s\n",
+ INVALID_MAGIC, (unsigned int) bogus_magic1, str256 + 1,
+ sprintrc(rc));
puts("+++ exited with 0 +++");
return 0;
diff --git a/tests-mx32/reboot.gen.test b/tests-mx32/reboot.gen.test
index 0a48dea7a..06d2f0cb7 100755
--- a/tests-mx32/reboot.gen.test
+++ b/tests-mx32/reboot.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (reboot ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (reboot -s 256); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff -s 256
diff --git a/tests-mx32/recvfrom.gen.test b/tests-mx32/recvfrom.gen.test
index c23780c97..2741d2106 100755
--- a/tests-mx32/recvfrom.gen.test
+++ b/tests-mx32/recvfrom.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (recvfrom -a35); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (recvfrom -a35 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a35
+run_strace_match_diff -a35
diff --git a/tests-mx32/remap_file_pages.c b/tests-mx32/remap_file_pages.c
index 452d2de75..4e4096302 100644
--- a/tests-mx32/remap_file_pages.c
+++ b/tests-mx32/remap_file_pages.c
@@ -1,7 +1,7 @@
/*
* Check decoding of remap_file_pages syscall.
*
- * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -33,22 +33,62 @@
#ifdef __NR_remap_file_pages
# include <stdio.h>
-# include <sys/mman.h>
+# include <stdint.h>
# include <unistd.h>
+# include <linux/mman.h>
+
+static const char *errstr;
+
+static long
+k_remap_file_pages(const kernel_ulong_t addr,
+ const kernel_ulong_t size,
+ const kernel_ulong_t prot,
+ const kernel_ulong_t pgoff,
+ const kernel_ulong_t flags)
+{
+ const long rc = syscall(__NR_remap_file_pages,
+ addr, size, prot, pgoff, flags);
+ errstr = sprintrc(rc);
+ return rc;
+}
int
main(void)
{
- const unsigned long addr = (unsigned long) 0xfacefeeddeadbeefULL;
- const unsigned long size = (unsigned long) 0xdefaced1bad2f00dULL;
- const unsigned long prot = PROT_READ|PROT_WRITE|PROT_EXEC;
- const unsigned long pgoff = (unsigned long) 0xcaf3babebad4deedULL;
- const unsigned long flags = MAP_PRIVATE|MAP_ANONYMOUS;
-
- long rc = syscall(__NR_remap_file_pages, addr, size, prot, pgoff, flags);
- printf("remap_file_pages(%#lx, %lu, %s, %lu, %s) = %ld %s (%m)\n",
- addr, size, "PROT_READ|PROT_WRITE|PROT_EXEC", pgoff,
- "MAP_PRIVATE|MAP_ANONYMOUS", rc, errno2name());
+ kernel_ulong_t addr = (kernel_ulong_t) 0xfacefeeddeadbeefULL;
+ kernel_ulong_t size = (kernel_ulong_t) 0xdefaced1bad2f00dULL;
+ kernel_ulong_t prot = PROT_READ|PROT_WRITE|PROT_EXEC;
+ kernel_ulong_t pgoff = (kernel_ulong_t) 0xcaf3babebad4deedULL;
+ kernel_ulong_t flags = MAP_PRIVATE|MAP_ANONYMOUS;
+
+ k_remap_file_pages(addr, size, prot, pgoff, flags);
+ printf("remap_file_pages(%#jx, %ju, %s, %ju, %s) = %s\n",
+ (uintmax_t) addr, (uintmax_t) size,
+ "PROT_READ|PROT_WRITE|PROT_EXEC",
+ (uintmax_t) pgoff, "MAP_PRIVATE|MAP_ANONYMOUS", errstr);
+
+#ifdef MAP_HUGETLB
+# ifndef MAP_HUGE_2MB
+# ifndef MAP_HUGE_SHIFT
+# define MAP_HUGE_SHIFT 26
+# endif
+# define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT)
+# endif /* !MAP_HUGE_2MB */
+ addr = (kernel_ulong_t) 0xfacefeeddeadf00dULL;
+ size = (kernel_ulong_t) 0xdefaced1bad2beefULL;
+ prot = (kernel_ulong_t) 0xdefaced00000000ULL | PROT_NONE;
+ flags = MAP_TYPE | MAP_FIXED | MAP_NORESERVE | MAP_HUGETLB | MAP_HUGE_2MB;
+
+ k_remap_file_pages(addr, size, prot, pgoff, flags);
+ printf("remap_file_pages(%#jx, %ju, %s, %ju"
+ ", %#x /* MAP_??? */"
+ "|MAP_FIXED|MAP_NORESERVE|MAP_HUGETLB|21<<MAP_HUGE_SHIFT)"
+ " = %s\n",
+ (uintmax_t) addr, (uintmax_t) size,
+ prot == PROT_NONE ? "PROT_NONE" :
+ "0xdefaced00000000 /* PROT_??? */",
+ (uintmax_t) pgoff, MAP_TYPE, errstr);
+#endif /* MAP_HUGETLB */
puts("+++ exited with 0 +++");
return 0;
diff --git a/tests-mx32/remap_file_pages.gen.test b/tests-mx32/remap_file_pages.gen.test
index e48947368..b35898863 100755
--- a/tests-mx32/remap_file_pages.gen.test
+++ b/tests-mx32/remap_file_pages.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (remap_file_pages ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (remap_file_pages ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/rename.gen.test b/tests-mx32/rename.gen.test
index 07f01801e..81fb03983 100755
--- a/tests-mx32/rename.gen.test
+++ b/tests-mx32/rename.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rename -a35); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rename -a35 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a35
+run_strace_match_diff -a35
diff --git a/tests-mx32/renameat.gen.test b/tests-mx32/renameat.gen.test
index f2879cdcc..dbc6e05bb 100755
--- a/tests-mx32/renameat.gen.test
+++ b/tests-mx32/renameat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (renameat ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (renameat ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/renameat2.gen.test b/tests-mx32/renameat2.gen.test
index cd7c34ca2..78251cb26 100755
--- a/tests-mx32/renameat2.gen.test
+++ b/tests-mx32/renameat2.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (renameat2 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (renameat2 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/riscv_flush_icache.c b/tests-mx32/riscv_flush_icache.c
new file mode 100644
index 000000000..8aaeda512
--- /dev/null
+++ b/tests-mx32/riscv_flush_icache.c
@@ -0,0 +1,93 @@
+/*
+ * Check decoding of riscv_flush_icache syscall.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <asm/unistd.h>
+
+#include "scno.h"
+
+#ifdef __NR_riscv_flush_icache
+
+# include <stdint.h>
+# include <stdio.h>
+# include <unistd.h>
+
+int main(void)
+{
+ static struct {
+ kernel_ulong_t addr;
+ const char *str;
+ } addrs[] = {
+ { (kernel_ulong_t) (uintptr_t) ARG_STR(NULL) },
+ { (kernel_ulong_t) 0xbadc0deddeadf157ULL,
+ sizeof(kernel_ulong_t) == 8 ? "0xbadc0deddeadf157" :
+ "0xdeadf157" },
+ };
+ static struct {
+ kernel_ulong_t val;
+ const char *str;
+ } flags[] = {
+ { ARG_STR(0) },
+ { 1, "SYS_RISCV_FLUSH_ICACHE_LOCAL" },
+ { (kernel_ulong_t) 0xfacefeedfffffffeULL,
+ sizeof(kernel_ulong_t) == 8 ?
+ "0xfacefeedfffffffe /* SYS_RISCV_FLUSH_ICACHE_??? */" :
+ "0xfffffffe /* SYS_RISCV_FLUSH_ICACHE_??? */" },
+ { (kernel_ulong_t) 0xfacefeedffffffffULL,
+ sizeof(kernel_ulong_t) == 8 ?
+ "SYS_RISCV_FLUSH_ICACHE_LOCAL|0xfacefeedfffffffe" :
+ "SYS_RISCV_FLUSH_ICACHE_LOCAL|0xfffffffe" },
+ };
+
+ for (size_t i = 0; i < ARRAY_SIZE(addrs); i++) {
+ for (size_t j = 0; j < ARRAY_SIZE(addrs); j++) {
+ for (size_t k = 0; k < ARRAY_SIZE(flags); k++) {
+ long rc = syscall(__NR_riscv_flush_icache,
+ addrs[i].addr,
+ addrs[j].addr,
+ flags[k].val);
+
+ printf("riscv_flush_icache(%s, %s, %s) = %s\n",
+ addrs[i].str, addrs[j].str, flags[k].str,
+ sprintrc(rc));
+ }
+ }
+ }
+
+ puts("+++ exited with 0 +++");
+
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_riscv_flush_icache");
+
+#endif
diff --git a/tests-mx32/riscv_flush_icache.gen.test b/tests-mx32/riscv_flush_icache.gen.test
new file mode 100755
index 000000000..1a1f793a9
--- /dev/null
+++ b/tests-mx32/riscv_flush_icache.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (riscv_flush_icache -a34 ); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a34
diff --git a/tests-mx32/rmdir.gen.test b/tests-mx32/rmdir.gen.test
index b511039d9..8b346af9c 100755
--- a/tests-mx32/rmdir.gen.test
+++ b/tests-mx32/rmdir.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rmdir -a22); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rmdir -a22 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a22
+run_strace_match_diff -a22
diff --git a/tests-mx32/rt_sigpending.gen.test b/tests-mx32/rt_sigpending.gen.test
index 0458876b3..d52858af7 100755
--- a/tests-mx32/rt_sigpending.gen.test
+++ b/tests-mx32/rt_sigpending.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigpending -a20); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigpending -a20 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a20
+run_strace_match_diff -a20
diff --git a/tests-mx32/rt_sigprocmask.gen.test b/tests-mx32/rt_sigprocmask.gen.test
index a21c6dbbb..67fcdc0f5 100755
--- a/tests-mx32/rt_sigprocmask.gen.test
+++ b/tests-mx32/rt_sigprocmask.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigprocmask ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigprocmask ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/rt_sigqueueinfo.gen.test b/tests-mx32/rt_sigqueueinfo.gen.test
index 7baf0e483..d11eecc0c 100755
--- a/tests-mx32/rt_sigqueueinfo.gen.test
+++ b/tests-mx32/rt_sigqueueinfo.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigqueueinfo -esignal=none); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigqueueinfo -esignal=none ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -esignal=none
+run_strace_match_diff -esignal=none
diff --git a/tests-mx32/rt_sigreturn.gen.test b/tests-mx32/rt_sigreturn.gen.test
index 0672f113d..d8b153e31 100755
--- a/tests-mx32/rt_sigreturn.gen.test
+++ b/tests-mx32/rt_sigreturn.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigreturn -esignal='!USR1'); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigreturn -esignal='!USR1' ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -esignal='!USR1'
+run_strace_match_diff -esignal='!USR1'
diff --git a/tests-mx32/rt_sigtimedwait.gen.test b/tests-mx32/rt_sigtimedwait.gen.test
index 2b18e7afd..a9409ae90 100755
--- a/tests-mx32/rt_sigtimedwait.gen.test
+++ b/tests-mx32/rt_sigtimedwait.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigtimedwait -a38); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_sigtimedwait -a38 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a38
+run_strace_match_diff -a38
diff --git a/tests-mx32/rt_tgsigqueueinfo.gen.test b/tests-mx32/rt_tgsigqueueinfo.gen.test
index 407bbffa7..0539e35a0 100755
--- a/tests-mx32/rt_tgsigqueueinfo.gen.test
+++ b/tests-mx32/rt_tgsigqueueinfo.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_tgsigqueueinfo -esignal=none); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (rt_tgsigqueueinfo -esignal=none ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -esignal=none
+run_strace_match_diff -esignal=none
diff --git a/tests-mx32/run.sh b/tests-mx32/run.sh
index d1b796ca5..208aa0f9e 100755
--- a/tests-mx32/run.sh
+++ b/tests-mx32/run.sh
@@ -9,4 +9,9 @@ TIMEOUT="timeout -k 5 -s XCPU $TIMEOUT_DURATION"
$TIMEOUT true > /dev/null 2>&1 ||
TIMEOUT=
-exec $TIMEOUT "$@"
+if [ $# -eq 0 ]; then
+ echo 'No command or test-file specified' >&2
+ exit 1
+fi
+
+exec $TIMEOUT "$@" < /dev/null
diff --git a/tests-mx32/s390_guarded_storage-v.c b/tests-mx32/s390_guarded_storage-v.c
new file mode 100644
index 000000000..05afd9fec
--- /dev/null
+++ b/tests-mx32/s390_guarded_storage-v.c
@@ -0,0 +1,2 @@
+#define VERBOSE 1
+#include "s390_guarded_storage.c"
diff --git a/tests-mx32/s390_guarded_storage-v.gen.test b/tests-mx32/s390_guarded_storage-v.gen.test
new file mode 100755
index 000000000..045ff762f
--- /dev/null
+++ b/tests-mx32/s390_guarded_storage-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_guarded_storage-v -e trace=s390_guarded_storage -a32 -v); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=s390_guarded_storage -a32 -v
diff --git a/tests-mx32/s390_guarded_storage.c b/tests-mx32/s390_guarded_storage.c
new file mode 100644
index 000000000..ab67c1583
--- /dev/null
+++ b/tests-mx32/s390_guarded_storage.c
@@ -0,0 +1,229 @@
+/*
+ * Check decoding of s390_guarded_storage syscall.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <asm/unistd.h>
+
+#if defined __NR_s390_guarded_storage && defined HAVE_ASM_GUARDED_STORAGE_H
+
+# include <inttypes.h>
+# include <stdbool.h>
+# include <stdint.h>
+# include <stdio.h>
+# include <unistd.h>
+
+# include <asm/guarded_storage.h>
+
+# ifndef VERBOSE
+# define VERBOSE 0
+# endif
+
+static void
+gs_no_arg(kernel_ulong_t val, const char *val_str)
+{
+ static const kernel_ulong_t bogus_addr =
+ (kernel_ulong_t) 0xcaffeedadeadbed5ULL;
+ static const kernel_ulong_t bogus_cmd_mask =
+ (kernel_ulong_t) 0xbadc0ded00000000ULL;
+ long rc;
+
+ rc = syscall(__NR_s390_guarded_storage, val | bogus_cmd_mask,
+ bogus_addr);
+ printf("s390_guarded_storage(%s) = %s\n", val_str, sprintrc(rc));
+}
+
+static void
+gs_print_epl(uint64_t addr, bool valid, const char *str)
+{
+ if (!valid) {
+ if (str)
+ printf("%s", str);
+ else
+ printf("%#" PRIx64, addr);
+
+ return;
+ }
+
+ struct gs_epl *gsepl = (struct gs_epl *) (uintptr_t) addr;
+
+ printf("[{");
+
+# if VERBOSE
+ if (gsepl->pad1)
+ printf("pad1=%#02x, ", gsepl->pad1);
+
+ printf("gs_eam=%#02x /* extended addressing mode: %u, "
+ "basic addressing mode: %u */"
+ ", gs_eci=%#02x /* CPU in TX: %u, CPU in CX: %u, "
+ "instruction: %s */"
+ ", gs_eai=%#02x /* DAT: %u, address space indication: %u, "
+ "AR number: %u */, ",
+ gsepl->gs_eam, gsepl->e, gsepl->b,
+ gsepl->gs_eci, gsepl->tx, gsepl->cx,
+ gsepl->in ? "LLGFGS": "LGG",
+ gsepl->gs_eai, gsepl->t, gsepl->as, gsepl->ar);
+
+ if (gsepl->pad2)
+ printf("pad2=%#08x, ", gsepl->pad2);
+# endif /* VERBOSE */
+
+ printf("gs_eha=%#llx, ", (unsigned long long) gsepl->gs_eha);
+
+# if VERBOSE
+ printf("gs_eia=%#llx, gs_eoa=%#llx, gs_eir=%#llx, gs_era=%#llx",
+ (unsigned long long) gsepl->gs_eia,
+ (unsigned long long) gsepl->gs_eoa,
+ (unsigned long long) gsepl->gs_eir,
+ (unsigned long long) gsepl->gs_era);
+# else /* !VERBOSE */
+ printf("...");
+# endif /* VERBOSE */
+
+ printf("}]");
+}
+
+static void
+gs_set_cb(kernel_ulong_t addr, bool valid, bool epl_valid,
+ const char *bc_str, const char *epl_str)
+{
+ static const kernel_ulong_t bogus_cmd_mask =
+ (kernel_ulong_t) 0xda7a105700000000ULL;
+
+ long rc;
+
+ printf("s390_guarded_storage(GS_SET_BC_CB, ");
+
+ if (valid) {
+ struct gs_cb *gscb = (struct gs_cb *) (uintptr_t) addr;
+
+ printf("{");
+
+ if (gscb->reserved)
+ printf("reserved=%#016llx, ",
+ (unsigned long long) gscb->reserved);
+
+ printf("gsd=%#16llx",
+ (unsigned long long) gscb->gsd);
+# if VERBOSE
+ printf(" /* GS origin: ");
+
+ unsigned int gsc = gscb->gsd & 0x3F;
+ unsigned int gls = (gscb->gsd >> 8) & 7;
+ bool gsc_valid = gsc >= 25 && gsc <= 56;
+
+ if (gsc_valid) {
+ uint64_t gls = gscb->gsd >> gsc;
+ int field_size = 2 + (67 - gsc) / 4;
+
+ printf("%#0*" PRIx64, field_size, gls);
+ } else {
+ printf("[invalid]");
+ }
+
+ printf(", guard load shift: %u, GS characteristic: %u */",
+ gls, gsc);
+# endif /* VERBOSE */
+
+ printf(", gssm=%#016llx, gs_epl_a=",
+ (unsigned long long) gscb->gssm);
+
+ gs_print_epl(gscb->gs_epl_a, epl_valid, epl_str);
+
+ printf("}");
+ } else {
+ if (bc_str)
+ printf("%s", bc_str);
+ else
+ printf("%#llx", (unsigned long long) addr);
+ }
+
+ rc = syscall(__NR_s390_guarded_storage,
+ GS_SET_BC_CB | bogus_cmd_mask, addr);
+ printf(") = %s\n", sprintrc(rc));
+}
+
+int
+main(void)
+{
+ static const kernel_ulong_t bogus_cmd =
+ (kernel_ulong_t) 0xdeafbeefdeadc0deULL;
+ static const kernel_ulong_t bogus_addr =
+ (kernel_ulong_t) 0xfacefeedac0ffeedULL;
+
+ struct gs_cb *gscb = tail_alloc(sizeof(*gscb));
+ struct gs_epl *gsepl = tail_alloc(sizeof(*gsepl));
+
+ long rc;
+
+ rc = syscall(__NR_s390_guarded_storage, 5, 0);
+ printf("s390_guarded_storage(0x5 /* GS_??? */, NULL) = %s\n",
+ sprintrc(rc));
+
+ rc = syscall(__NR_s390_guarded_storage, bogus_cmd, bogus_addr);
+ printf("s390_guarded_storage(%#x /* GS_??? */, %#lx) = %s\n",
+ (unsigned) bogus_cmd, (unsigned long) bogus_addr, sprintrc(rc));
+
+ gs_no_arg(ARG_STR(GS_BROADCAST));
+ gs_no_arg(ARG_STR(GS_CLEAR_BC_CB));
+ gs_no_arg(ARG_STR(GS_DISABLE));
+ gs_no_arg(ARG_STR(GS_ENABLE));
+
+ fill_memory(gscb, sizeof(*gscb));
+ fill_memory_ex(gsepl, sizeof(*gsepl), 0xA5, 0x5A);
+
+ gs_set_cb(0, false, false, "NULL", NULL);
+ gs_set_cb((uintptr_t) (gscb + 1), false, false, NULL, NULL);
+
+ gscb->gs_epl_a = 0;
+ gs_set_cb((uintptr_t) gscb, true, false, NULL, "NULL");
+
+ fill_memory_ex(gscb, sizeof(*gscb), 0x5A, 0xA5);
+ gscb->gs_epl_a = (uintptr_t) (gsepl + 1) |
+ (sizeof(kernel_ulong_t) < sizeof(uint64_t) ?
+ 0xc0debad000000000ULL : 0);
+ gs_set_cb((uintptr_t) gscb, true, false, NULL, NULL);
+
+ fill_memory_ex(gscb, sizeof(*gscb), 0xA7, 0xA5);
+ gscb->gs_epl_a = (uintptr_t) gsepl;
+ gs_set_cb((uintptr_t) gscb, true, true, NULL, NULL);
+
+ fill_memory_ex(gscb, sizeof(*gscb), 0x55, 0xAA);
+ fill_memory_ex(gsepl, sizeof(*gsepl), 0x5A, 0xA5);
+ gscb->gs_epl_a = (uintptr_t) gsepl;
+ gs_set_cb((uintptr_t) gscb, true, true, NULL, NULL);
+
+ puts("+++ exited with 0 +++");
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_s390_guarded_storage && HAVE_ASM_GUARDED_STORAGE_H")
+
+#endif
diff --git a/tests-mx32/s390_guarded_storage.gen.test b/tests-mx32/s390_guarded_storage.gen.test
new file mode 100755
index 000000000..28b598146
--- /dev/null
+++ b/tests-mx32/s390_guarded_storage.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_guarded_storage -a32 ); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a32
diff --git a/tests-mx32/s390_pci_mmio_read_write.c b/tests-mx32/s390_pci_mmio_read_write.c
new file mode 100644
index 000000000..b493948de
--- /dev/null
+++ b/tests-mx32/s390_pci_mmio_read_write.c
@@ -0,0 +1,155 @@
+/*
+ * Check decoding of s390_pci_mmio_read and s390_pci_mmio_write syscalls.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <asm/unistd.h>
+
+#if defined __NR_s390_pci_mmio_read && defined __NR_s390_pci_mmio_write
+
+# include <errno.h>
+# include <stdbool.h>
+# include <stdint.h>
+# include <stdio.h>
+# include <unistd.h>
+
+static void
+do_call(bool wr, kernel_ulong_t mmio_addr, kernel_ulong_t buf,
+ kernel_ulong_t len, bool buf_valid, const char *buf_str)
+{
+ long saved_errno = 0;
+ long rc = 0;
+
+ printf("s390_pci_mmio_%s(%#llx, ", wr ? "write" : "read",
+ (unsigned long long) mmio_addr);
+
+ if (!wr) {
+ rc = syscall(__NR_s390_pci_mmio_read, mmio_addr, buf, len);
+ saved_errno = errno;
+ }
+
+ if (buf_valid && !rc) {
+ char *buf_ptr = (char *) (uintptr_t) buf;
+
+ print_quoted_hex(buf_ptr,
+ len > DEFAULT_STRLEN ? DEFAULT_STRLEN : len);
+
+ if (len > DEFAULT_STRLEN)
+ printf("...");
+ } else {
+ if (buf_str)
+ printf("%s", buf_str);
+ else
+ printf("%#llx", (unsigned long long) buf);
+ }
+
+ printf(", %llu) = ", (unsigned long long) len);
+
+ if (wr)
+ rc = syscall(__NR_s390_pci_mmio_write, mmio_addr, buf, len);
+ else
+ errno = saved_errno;
+
+ puts(sprintrc(rc));
+}
+
+int
+main(void)
+{
+ static const size_t buf_size = DEFAULT_STRLEN + 10;
+
+ char *buf = tail_alloc(buf_size);
+
+ bool bools[] = { true, false };
+
+ kernel_ulong_t addrs[] = {
+ 0,
+ (kernel_ulong_t) 0xdeafbeefdeadc0deULL,
+ };
+
+ struct {
+ kernel_ulong_t buf;
+ const char *str;
+ size_t size;
+ } bufs[] = {
+ { (kernel_ulong_t) ARG_STR(NULL), 0 },
+ { (kernel_ulong_t) (buf + buf_size), NULL, 0 },
+ { (kernel_ulong_t) (buf), NULL, buf_size },
+ { (kernel_ulong_t) (buf + 9), NULL, buf_size - 9 },
+ { (kernel_ulong_t) (buf + 10), NULL, buf_size - 10 },
+ { (kernel_ulong_t) (buf + 16), NULL, buf_size - 16 },
+ { (kernel_ulong_t) (buf + 26), NULL, buf_size - 26 },
+ { (kernel_ulong_t) (buf + 28), NULL, buf_size - 28 },
+ };
+
+ kernel_ulong_t sizes[] = {
+ 0,
+ DEFAULT_STRLEN / 2,
+ DEFAULT_STRLEN - 10,
+ DEFAULT_STRLEN,
+ DEFAULT_STRLEN + 1,
+ buf_size,
+ buf_size + 10,
+ (kernel_ulong_t) 0xfacefeedac0ffeedULL,
+ };
+
+ unsigned int i, j, k, l;
+ unsigned int ctr = 0;
+
+ for (i = 0; i < ARRAY_SIZE(addrs); i++) {
+ for (j = 0; j < ARRAY_SIZE(bufs); j++) {
+ for (k = 0; k < ARRAY_SIZE(sizes); k++) {
+ for (l = 0; l < ARRAY_SIZE(bools); l++) {
+ bool valid = bufs[j].buf &&
+ bufs[j].size >=
+ MIN(sizes[k],
+ DEFAULT_STRLEN + 1);
+
+ if (bufs[j].size && bools[l])
+ fill_memory_ex((char *) buf,
+ bufs[j].size,
+ 0xC0 + ctr, 255);
+
+ do_call(bools[l], addrs[i], bufs[j].buf,
+ sizes[k], valid, bufs[j].str);
+
+ ctr++;
+ }
+ }
+ }
+ }
+
+ puts("+++ exited with 0 +++");
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_s390_pci_mmio_read && __NR_s390_pci_mmio_write");
+
+#endif
diff --git a/tests-mx32/s390_pci_mmio_read_write.gen.test b/tests-mx32/s390_pci_mmio_read_write.gen.test
new file mode 100755
index 000000000..cf32e0b3d
--- /dev/null
+++ b/tests-mx32/s390_pci_mmio_read_write.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_pci_mmio_read_write -e trace=s390_pci_mmio_read,s390_pci_mmio_write -a30); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=s390_pci_mmio_read,s390_pci_mmio_write -a30
diff --git a/tests-mx32/s390_runtime_instr.c b/tests-mx32/s390_runtime_instr.c
new file mode 100644
index 000000000..861bbd4a5
--- /dev/null
+++ b/tests-mx32/s390_runtime_instr.c
@@ -0,0 +1,99 @@
+/*
+ * Check decoding of s390_runtime_instr syscall.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <asm/unistd.h>
+
+#if defined __NR_s390_runtime_instr
+
+# include <errno.h>
+# include <signal.h>
+# include <stdio.h>
+# include <unistd.h>
+
+int
+main(void)
+{
+ static struct {
+ kernel_ulong_t cmd;
+ const char * cmd_str;
+ } cmd_args[] = {
+ { 0, "???" },
+ { 4, "???" },
+ { (kernel_ulong_t) 0xdeafbeefdeadc0deULL, "???" },
+ { 2, "STOP", },
+ };
+
+ static struct {
+ kernel_ulong_t sig;
+ const char * sig_str;
+ } start_sig_args[] = {
+ { 0, "SIG_0" },
+ { (kernel_ulong_t) 0xfacefeedac0ffeedULL, NULL },
+ { ARG_STR(SIGALRM) },
+ { 33, "SIGRT_1" },
+ { 63, "SIGRT_31" },
+ };
+
+ unsigned int i;
+ long rc;
+
+ for (i = 0; i < ARRAY_SIZE(cmd_args); i++) {
+ rc = syscall(__NR_s390_runtime_instr, cmd_args[i].cmd, 0xdead);
+ printf("s390_runtime_instr(%d /* S390_RUNTIME_INSTR_%s */) = "
+ "%s\n",
+ (int) cmd_args[i].cmd, cmd_args[i].cmd_str,
+ sprintrc(rc));
+ }
+
+ for (i = 0; i < ARRAY_SIZE(start_sig_args); i++) {
+ long saved_errno;
+
+ rc = syscall(__NR_s390_runtime_instr, 1, start_sig_args[i].sig);
+ saved_errno = errno;
+ printf("s390_runtime_instr(1 /* S390_RUNTIME_INSTR_START */, ");
+
+ if (start_sig_args[i].sig_str)
+ printf("%s", start_sig_args[i].sig_str);
+ else
+ printf("%d", (int) start_sig_args[i].sig);
+
+ errno = saved_errno;
+ printf(") = %s\n", sprintrc(rc));
+ }
+
+ puts("+++ exited with 0 +++");
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_s390_runtime_instr")
+
+#endif
diff --git a/tests-mx32/s390_runtime_instr.gen.test b/tests-mx32/s390_runtime_instr.gen.test
new file mode 100755
index 000000000..9197dc339
--- /dev/null
+++ b/tests-mx32/s390_runtime_instr.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_runtime_instr -a50 ); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a50
diff --git a/tests-mx32/s390_sthyi-v.c b/tests-mx32/s390_sthyi-v.c
new file mode 100644
index 000000000..860552035
--- /dev/null
+++ b/tests-mx32/s390_sthyi-v.c
@@ -0,0 +1,2 @@
+#define VERBOSE 1
+#include "s390_sthyi.c"
diff --git a/tests-mx32/s390_sthyi-v.gen.test b/tests-mx32/s390_sthyi-v.gen.test
new file mode 100755
index 000000000..27ab447bf
--- /dev/null
+++ b/tests-mx32/s390_sthyi-v.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_sthyi-v -e trace=s390_sthyi -a47 -v); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=s390_sthyi -a47 -v
diff --git a/tests-mx32/s390_sthyi.c b/tests-mx32/s390_sthyi.c
new file mode 100644
index 000000000..8b241dd2a
--- /dev/null
+++ b/tests-mx32/s390_sthyi.c
@@ -0,0 +1,786 @@
+/*
+ * Check decoding of s390_sthyi syscall.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include <asm/unistd.h>
+
+#if defined HAVE_ICONV_H && defined HAVE_ICONV_OPEN && defined __NR_s390_sthyi
+
+# include <errno.h>
+# include <iconv.h>
+# include <inttypes.h>
+# include <stdbool.h>
+# include <stdint.h>
+# include <stdio.h>
+# include <unistd.h>
+
+# include <sys/user.h>
+
+# define EBCDIC_MAX_LEN 16
+
+# ifndef VERBOSE
+# define VERBOSE 0
+# endif
+
+static bool
+print_0x8(const char *prefix, unsigned char *buf, unsigned int offs, bool zero)
+{
+ if (!zero && !buf[offs])
+ return false;
+
+ printf("%s=%#02hhx", prefix, buf[offs]);
+
+ return true;
+}
+
+static bool
+print_u8(const char *prefix, unsigned char *buf, unsigned int offs, bool zero)
+{
+ if (!zero && !buf[offs])
+ return false;
+
+ printf("%s=%hhu", prefix, buf[offs]);
+
+ return true;
+}
+
+static bool
+print_u16(const char *prefix, unsigned char *buf, unsigned int offs, bool zero)
+{
+ uint16_t val = *(uint16_t *) (buf + offs);
+
+ if (!zero && !val)
+ return false;
+
+ printf("%s=%" PRIu16, prefix, val);
+
+ return true;
+}
+
+static bool
+print_x32(const char *prefix, unsigned char *buf, unsigned int offs, bool zero)
+{
+ uint32_t val = *(uint32_t *) (buf + offs);
+
+ if (!zero && !val)
+ return false;
+
+ printf("%s=%#" PRIx32, prefix, val);
+
+ return true;
+}
+
+static bool
+print_weight(const char *prefix, unsigned char *buf, unsigned int offs,
+ bool zero)
+{
+ uint32_t val = *(uint32_t *) (buf + offs);
+
+ if (print_x32(prefix, buf, offs, zero)) {
+ if (val)
+ printf(" /* %u %u/65536 cores */",
+ val >> 16, val & 0xFFFF);
+ else
+ printf(" /* unlimited */");
+
+ return true;
+ }
+
+ return false;
+}
+
+static char *
+ebcdic2ascii(unsigned char *ebcdic, size_t size)
+{
+ static char ascii_buf[EBCDIC_MAX_LEN];
+
+ char *ebcdic_pos = (char *) ebcdic;
+ char *ascii_pos = ascii_buf;
+ size_t ebcdic_left = size;
+ size_t ascii_left = size;
+ size_t ret;
+
+ iconv_t cd = iconv_open("ASCII", "EBCDICUS");
+
+ if (size > sizeof(ascii_buf))
+ error_msg_and_fail("ebcdic2ascii: EBCDIC string is too big: "
+ "%zu (maximum is %zu)",
+ size, sizeof(ascii_buf));
+ if (cd == (iconv_t) -1)
+ perror_msg_and_fail("ebcdic2ascii: unable to allocate a "
+ "conversion descriptior for converting "
+ "EBCDIC to ASCII");
+
+ while ((ret = iconv(cd, &ebcdic_pos, &ebcdic_left,
+ &ascii_pos, &ascii_left)) == (size_t) -1) {
+ switch (errno) {
+ case EILSEQ:
+ case EINVAL: /* That one is quite unexpected, actually */
+ if (!ebcdic_left || !ascii_left)
+ goto ebcdic2ascii_end;
+
+ *ascii_pos++ = ' ';
+ ebcdic_pos++;
+ ebcdic_left--;
+
+ break;
+
+ case E2BIG:
+ perror_msg_and_fail("ebcdic2ascii: ran out of "
+ "ASCII buffer unexpectedly");
+ default:
+ perror_msg_and_fail("ebcdic2ascii: unexpected error");
+ }
+ }
+
+ebcdic2ascii_end:
+ iconv_close(cd);
+
+ if (ebcdic_left != ascii_left)
+ error_msg_and_fail("ebcdic2ascii: ASCII string differs in size "
+ "from EBCDIC");
+
+ return ascii_buf;
+}
+
+# if VERBOSE
+static bool
+is_empty(unsigned char *ptr, size_t size)
+{
+ size_t i;
+
+ for (i = 0; !*ptr && i < size; ptr++, i++)
+ ;
+
+ return i == size;
+}
+# endif /* !VERBOSE */
+
+static bool
+print_ebcdic(const char *prefix, unsigned char *addr, unsigned int offs,
+ size_t size, bool zero, bool blank)
+{
+ const char *ascii = ebcdic2ascii(addr + offs, size);
+
+ if (!zero) {
+ size_t i;
+
+ for (i = 0; (addr[offs + i] == (blank ? 64 : 0)) && (i < size);
+ i++)
+ ;
+
+ if (i == size)
+ return false;
+ }
+
+ printf("%s=", prefix);
+ print_quoted_hex((char *) (addr + offs), size);
+ printf(" /* ");
+ print_quoted_memory(ascii, size);
+ printf(" */");
+
+ return true;
+}
+
+static void
+print_hypervisor_header(unsigned char *buf, int level, unsigned int offs_pos,
+ unsigned int len_pos, bool mt)
+{
+ uint16_t offs = *(uint16_t *) (buf + offs_pos);
+ uint16_t hdr_size = *(uint16_t *) (buf + len_pos);
+ unsigned char *cur;
+
+ if (!offs)
+ return;
+ if (hdr_size < 32)
+ error_msg_and_fail("sthyi: hypervisor %d section is too small "
+ "(got %hu, 32 expected)", level, hdr_size);
+
+ cur = buf + offs;
+
+ printf(", /* hypervisor %d */ {infyflg1", level);
+ print_0x8("", cur, 0, true);
+# if VERBOSE
+ if (cur[0]) {
+ bool printed = false;
+
+ printf(" /* ");
+ if (cur[0] & 0x80) {
+ printf("0x80 - guest CPU usage had limiting is using "
+ "the consumption method");
+ printed = true;
+ }
+ if (cur[0] & 0x40) {
+ if (printed)
+ printf(", ");
+ printf("0x40 - LIMITHARD caps use prorated core time "
+ "for capping");
+ printed = true;
+ }
+ if (cur[0] & 0x3F) {
+ if (printed)
+ printf(", ");
+ printf("%#hhx - ???", cur[0] & 0x3F);
+ }
+ printf(" */");
+ }
+
+ print_0x8(", infyflg2", cur, 1, false);
+ print_0x8(", infyval1", cur, 2, false);
+ print_0x8(", infyval2", cur, 3, false);
+
+ print_u8(", infytype", cur, 4, true);
+ if (cur[4] == 1)
+ printf(" /* z/VM is the hypervisor */");
+ else
+ printf(" /* unknown hypervisor type */");
+
+ if (cur[5])
+ printf(", reserved_1__=\"\\x%#02hhx\"", cur[5]);
+
+ print_u8(", infycpt", cur, 6, mt);
+ print_u8(", infyiflt", cur, 7, mt);
+# endif /* !VERBOSE */
+
+ print_ebcdic(", infysyid", cur, 8, 8, VERBOSE, true);
+ print_ebcdic(", infyclnm", cur, 16, 8, VERBOSE, true);
+
+ print_u16(", infyscps", cur, 24, VERBOSE);
+ print_u16(", infydcps", cur, 26, VERBOSE);
+ print_u16(", infysifl", cur, 28, VERBOSE);
+ print_u16(", infydifl", cur, 30, VERBOSE);
+
+# if VERBOSE
+ if (hdr_size > 32 && !is_empty(cur + 32, hdr_size - 32)) {
+ printf(", ");
+ print_quoted_hex((char *) (cur + 32), hdr_size - 32);
+ }
+# else /* !VERBOSE */
+ printf(", ...");
+# endif /* !VERBOSE */
+
+ printf("}");
+}
+
+static void
+print_guest_header(unsigned char *buf, int level, unsigned int offs_pos,
+ unsigned int len_pos)
+{
+ uint16_t offs = *(uint16_t *) (buf + offs_pos);
+ uint16_t hdr_size = *(uint16_t *) (buf + len_pos);
+ unsigned char *cur;
+
+ if (!offs)
+ return;
+ if (hdr_size < 56)
+ error_msg_and_fail("sthyi: guest %d section is too small "
+ "(got %hu, 56 expected)", level, hdr_size);
+
+ cur = buf + offs;
+
+ printf(", /* guest %d */ {infgflg1", level);
+ print_0x8("", cur, 0, true);
+# if VERBOSE
+ if (cur[0]) {
+ bool printed = false;
+
+ printf(" /* ");
+ if (cur[0] & 0x80) {
+ printf("0x80 - guest is mobility enabled");
+ printed = true;
+ }
+ if (cur[0] & 0x40) {
+ if (printed)
+ printf(", ");
+ printf("0x40 - guest has multiple virtual CPU types");
+ printed = true;
+ }
+ if (cur[0] & 0x20) {
+ if (printed)
+ printf(", ");
+ printf("0x20 - guest CP dispatch type has LIMITHARD "
+ "cap");
+ printed = true;
+ }
+ if (cur[0] & 0x10) {
+ if (printed)
+ printf(", ");
+ printf("0x10 - guest IFL dispatch type has LIMITHARD "
+ "cap");
+ printed = true;
+ }
+ if (cur[0] & 0x08) {
+ if (printed)
+ printf(", ");
+ printf("0x08 - virtual CPs are thread dispatched");
+ printed = true;
+ }
+ if (cur[0] & 0x04) {
+ if (printed)
+ printf(", ");
+ printf("0x04 - virtual IFLs are thread dispatched");
+ printed = true;
+ }
+ if (cur[0] & 0x3) {
+ if (printed)
+ printf(", ");
+ printf("%#hhx - ???", cur[0] & 0x3);
+ }
+ printf(" */");
+ }
+
+ print_0x8(", infgflg2", cur, 1, false);
+ print_0x8(", infgval1", cur, 2, false);
+ print_0x8(", infgval2", cur, 3, false);
+# endif /* !VERBOSE */
+
+ print_ebcdic(", infgusid", cur, 4, 8, true, false);
+
+ print_u16(", infgscps", cur, 12, VERBOSE);
+ print_u16(", infgdcps", cur, 14, VERBOSE);
+
+# if VERBOSE
+ print_u8(", infgcpdt", cur, 16, true);
+ if (cur[16] == 0)
+ printf(" /* General Purpose (CP) */");
+ else
+ printf(" /* unknown */");
+
+ if (cur[17] || cur[18] || cur[19])
+ printf(", reserved_1__=\"\\x%#02hhx\\x%#02hhx\\x%#02hhx\"",
+ cur[17], cur[18], cur[19]);
+# endif /* !VERBOSE */
+
+ print_weight(", infgcpcc", cur, 20, VERBOSE);
+
+ print_u16(", infgsifl", cur, 24, VERBOSE);
+ print_u16(", infgdifl", cur, 26, VERBOSE);
+
+# if VERBOSE
+ print_u8(", infgifdt", cur, 28, true);
+ if (cur[28] == 0)
+ printf(" /* General Purpose (CP) */");
+ else if (cur[28] == 3)
+ printf(" /* Integrated Facility for Linux (IFL) */");
+ else
+ printf(" /* unknown */");
+
+ if (cur[29] || cur[30] || cur[31])
+ printf(", reserved_2__=\"\\x%#02hhx\\x%#02hhx\\x%#02hhx\"",
+ cur[29], cur[30], cur[31]);
+# endif /* !VERBOSE */
+
+ print_weight(", infgifcc", cur, 32, VERBOSE);
+
+ print_0x8(", infgpflg", cur, 36, true);
+# if VERBOSE
+ if (cur[36]) {
+ bool printed = false;
+
+ printf(" /* ");
+ if (cur[36] & 0x80) {
+ printf("0x80 - CPU pool's CP virtual type has "
+ "LIMITHARD cap");
+ printed = true;
+ }
+ if (cur[36] & 0x40) {
+ if (printed)
+ printf(", ");
+ printf("0x40 - CPU pool's CP virtual type has "
+ "CAPACITY cap");
+ printed = true;
+ }
+ if (cur[36] & 0x20) {
+ if (printed)
+ printf(", ");
+ printf("0x20 - CPU pool's IFL virtual type has "
+ "LIMITHARD cap");
+ printed = true;
+ }
+ if (cur[36] & 0x10) {
+ if (printed)
+ printf(", ");
+ printf("0x10 - CPU pool's IFL virtual type has "
+ "CAPACITY cap");
+ printed = true;
+ }
+ if (cur[36] & 0x08) {
+ if (printed)
+ printf(", ");
+ printf("0x08 - CPU pool uses prorated core time");
+ printed = true;
+ }
+ if (cur[36] & 0x7) {
+ if (printed)
+ printf(", ");
+ printf("%#hhx - ???", cur[36] & 0x7);
+ }
+ printf(" */");
+ }
+
+ if (cur[37] || cur[38] || cur[39])
+ printf(", reserved_3__=\"\\x%#02hhx\\x%#02hhx\\x%#02hhx\"",
+ cur[37], cur[38], cur[39]);
+
+ print_ebcdic(", infgpnam", cur, 40, 8, false, true);
+
+ print_weight(", infgpccc", cur, 48, true);
+ print_weight(", infgpicc", cur, 52, true);
+
+ if (hdr_size > 56 && !is_empty(cur + 56, hdr_size - 56)) {
+ printf(", ");
+ print_quoted_hex((char *) (cur + 56), hdr_size - 56);
+ }
+# else /* !VERBOSE */
+ printf(", ...");
+# endif /* !VERBOSE */
+
+ printf("}");
+}
+
+static void
+print_sthyi(unsigned char *buf)
+{
+ unsigned char *cur;
+ uint16_t hdr_size;
+ uint16_t offs;
+ bool mt = false;
+
+ hdr_size = *(uint16_t *) (buf + 10);
+ if (hdr_size < 44)
+ error_msg_and_fail("sthyi: header section is too small "
+ "(got %hu, 44 expected)", hdr_size);
+
+ /* INFHFLG1 */
+ print_0x8("{/* header */ {infhflg1", buf, 0, true);
+# if VERBOSE
+ if (buf[0]) {
+ bool printed = false;
+
+ printf(" /* ");
+ if (buf[0] & 0x80) {
+ printf("0x80 - Global Performance Data unavailable");
+ printed = true;
+ }
+ if (buf[0] & 0x40) {
+ if (printed)
+ printf(", ");
+ printf("0x40 - One or more hypervisor levels below "
+ "this level does not support the STHYI "
+ "instruction");
+ printed = true;
+ }
+ if (buf[0] & 0x20) {
+ if (printed)
+ printf(", ");
+ printf("0x20 - Virtualization stack is incomplete");
+ printed = true;
+ }
+ if (buf[0] & 0x10) {
+ if (printed)
+ printf(", ");
+ printf("0x10 - Execution environment is not within a "
+ "logical partition");
+ printed = true;
+ }
+ if (buf[0] & 0xF) {
+ if (printed)
+ printf(", ");
+ printf("%#hhx - ???", buf[0] & 0xF);
+ }
+ printf(" */");
+ }
+
+ print_0x8(", infhflg2", buf, 1, false);
+ print_0x8(", infhval1", buf, 2, false);
+ print_0x8(", infhval2", buf, 3, false);
+
+ /* Reserved */
+ if (buf[4] || buf[5] || buf[6])
+ printf(", reserved_1__=\"\\x%#02hhx\\x%#02hhx\\x%#02hhx\"",
+ buf[4], buf[5], buf[6]);
+
+ print_u8(", infhygct", buf, 7, true);
+ print_u16(", infhtotl", buf, 8, true);
+ print_u16(", infhdln", buf, 10, true);
+ print_u16(", infmoff", buf, 12, true);
+ print_u16(", infmlen", buf, 14, true);
+ print_u16(", infpoff", buf, 16, true);
+ print_u16(", infplen", buf, 18, true);
+ print_u16(", infhoff1", buf, 20, true);
+ print_u16(", infhlen1", buf, 22, true);
+ print_u16(", infgoff1", buf, 24, true);
+ print_u16(", infglen1", buf, 26, true);
+ print_u16(", infhoff2", buf, 28, true);
+ print_u16(", infhlen2", buf, 30, true);
+ print_u16(", infgoff2", buf, 32, true);
+ print_u16(", infglen2", buf, 34, true);
+ print_u16(", infhoff3", buf, 36, true);
+ print_u16(", infhlen3", buf, 38, true);
+ print_u16(", infgoff3", buf, 40, true);
+ print_u16(", infglen3", buf, 42, true);
+
+ if (hdr_size > 44 && !is_empty(buf + 44, hdr_size - 44)) {
+ printf(", ");
+ print_quoted_hex((char *) (buf + 44), hdr_size - 44);
+ }
+# else /* !VERBOSE */
+ printf(", ...");
+# endif /* !VERBOSE */
+
+ printf("}");
+
+ /* Machine header */
+ offs = *(uint16_t *) (buf + 12);
+ if (!offs)
+ goto partition_hdr;
+
+ hdr_size = *(uint16_t *) (buf + 14);
+ if (hdr_size < 60)
+ error_msg_and_fail("sthyi: machine section is too small "
+ "(got %hu, 60 expected)", hdr_size);
+
+ cur = buf + offs;
+
+ printf(", /* machine */ {");
+
+# if VERBOSE
+ print_0x8("infmflg1", cur, 0, false);
+ if (cur[0])
+ printf(", ");
+ print_0x8("infmflg2", cur, 1, false);
+ if (cur[1])
+ printf(", ");
+# endif /* !VERBOSE */
+ print_0x8("infmval1", cur, 2, true);
+
+ bool cnt_valid = cur[2] & 0x80;
+# if VERBOSE
+ bool id_valid = cur[2] & 0x40;
+ bool name_valid = cur[2] & 0x20;
+
+ printf(" /* processor count validity: %d, machine ID validity: %d, "
+ "machine name validity: %d",
+ !!cnt_valid, !!id_valid, !!name_valid);
+ if (cur[2] & 0x1F)
+ printf(", %#hhx - ???", cur[2] & 0x1F);
+ printf(" */");
+ print_0x8(", infmval2", cur, 3, false);
+# endif /* !VERBOSE */
+
+ print_u16(", infmscps", cur, 4, cnt_valid);
+ print_u16(", infmdcps", cur, 6, cnt_valid);
+ print_u16(", infmsifl", cur, 8, cnt_valid);
+ print_u16(", infmdifl", cur, 10, cnt_valid);
+
+# if VERBOSE
+ print_ebcdic(", infmname", cur, 12, 8, name_valid, false);
+
+ print_ebcdic(", infmtype", cur, 20, 4, id_valid, false);
+ print_ebcdic(", infmmanu", cur, 24, 16, id_valid, false);
+ print_ebcdic(", infmseq", cur, 40, 16, id_valid, false);
+ print_ebcdic(", infmpman", cur, 56, 4, id_valid, false);
+
+ if (hdr_size > 60 && !is_empty(cur + 60, hdr_size - 60)) {
+ printf(", ");
+ print_quoted_hex((char *) (cur + 60), hdr_size - 60);
+ }
+# else /* !VERBOSE */
+ printf(", ...");
+# endif /* !VERBOSE */
+
+ printf("}");
+
+partition_hdr:
+ /* Partition header */
+ offs = *(uint16_t *) (buf + 16);
+ if (!offs)
+ goto hv_hdr;
+
+ hdr_size = *(uint16_t *) (buf + 18);
+ if (hdr_size < 56)
+ error_msg_and_fail("sthyi: partition section is too small "
+ "(got %hu, 56 expected)", hdr_size);
+
+ cur = buf + offs;
+
+ print_0x8(", /* partition */ {infpflg1", cur, 0, true);
+ mt = !!(cur[0] & 0x80);
+# if VERBOSE
+ if (cur[0]) {
+ bool printed = false;
+
+ printf(" /* ");
+ if (cur[0] & 0x80) {
+ printf("0x80 - multithreading is enabled");
+ printed = true;
+ }
+ if (cur[0] & 0x7F) {
+ if (printed)
+ printf(", ");
+ printf("%#hhx - ???", cur[0] & 0x7F);
+ }
+ printf(" */");
+ }
+ print_0x8(", infpflg2", cur, 1, false);
+# endif /* !VERBOSE */
+ print_0x8(", infpval1", cur, 2, true);
+
+ bool pcnt_valid = cur[2] & 0x80;
+ bool pid_valid = cur[2] & 0x10;
+# if VERBOSE
+ bool pwcap_valid = cur[2] & 0x40;
+ bool pacap_valid = cur[2] & 0x20;
+ bool lpar_valid = cur[2] & 0x08;
+# endif /* !VERBOSE */
+
+# if VERBOSE
+ printf(" /* processor count validity: %d, partition weight-based "
+ "capacity validity: %d, partition absolute capacity validity: "
+ "%d, partition ID validity: %d, LPAR group absolute capacity "
+ "capping information validity: %d",
+ !!pcnt_valid, !!pwcap_valid, !!pacap_valid, !!pid_valid,
+ !!lpar_valid);
+ if (cur[2] & 0x7)
+ printf(", %#hhx - ???", cur[2] & 0x7);
+ printf(" */");
+
+ print_0x8(", infpval2", cur, 3, false);
+# endif /* !VERBOSE */
+
+ print_u16(", infppnum", cur, 4, pid_valid);
+
+ print_u16(", infpscps", cur, 6, pcnt_valid);
+ print_u16(", infpdcps", cur, 8, pcnt_valid);
+ print_u16(", infpsifl", cur, 10, pcnt_valid);
+ print_u16(", infpdifl", cur, 12, pcnt_valid);
+
+# if VERBOSE
+ if (cur[14] || cur[15])
+ printf(", reserved_1__=\"\\x%#02hhx\\x%#02hhx\"",
+ cur[14], cur[15]);
+# endif /* !VERBOSE */
+
+ print_ebcdic(", infppnam", cur, 16, 8, pid_valid, false);
+
+# if VERBOSE
+ print_weight(", infpwbcp", cur, 24, pwcap_valid);
+ print_weight(", infpabcp", cur, 28, pacap_valid);
+ print_weight(", infpwbif", cur, 32, pwcap_valid);
+ print_weight(", infpabif", cur, 36, pacap_valid);
+
+ if (print_ebcdic(", infplgnm", cur, 40, 8, false, false)) {
+
+ print_weight(", infplgcp", cur, 48, false);
+ print_weight(", infplgif", cur, 52, false);
+ } else {
+ if (lpar_valid) {
+ printf(", infplgnm=");
+ print_quoted_hex((char *) (cur + 40), 8);
+ }
+
+ print_x32(", infplgcp", cur, 48, false);
+ print_x32(", infplgif", cur, 52, false);
+ }
+
+ if (hdr_size > 56 && !is_empty(cur + 56, hdr_size - 56)) {
+ printf(", ");
+ print_quoted_hex((char *) (cur + 56), hdr_size - 56);
+ }
+# else /* !VERBOSE */
+ printf(", ...");
+# endif /* !VERBOSE */
+
+ printf("}");
+
+hv_hdr:
+ /* Hypervisor/guest headers */
+ print_hypervisor_header(buf, 1, 20, 22, mt);
+ print_guest_header(buf, 1, 24, 26);
+ print_hypervisor_header(buf, 2, 28, 30, mt);
+ print_guest_header(buf, 2, 32, 34);
+ print_hypervisor_header(buf, 3, 36, 38, mt);
+ print_guest_header(buf, 3, 40, 42);
+
+ printf("}");
+}
+
+int
+main(void)
+{
+ static const kernel_ulong_t bogus_func =
+ (kernel_ulong_t) 0xdeafbeefdeadc0deULL;
+ static const kernel_ulong_t bogus_resp_buf =
+ (kernel_ulong_t) 0xfacefeedac0ffeedULL;
+ static const kernel_ulong_t bogus_ret_code =
+ (kernel_ulong_t) 0xf00dfa57decaffedULL;
+ static const kernel_ulong_t bogus_flags =
+ (kernel_ulong_t) 0xfee1deadfa57beefULL;
+
+ unsigned char *buf = tail_alloc(PAGE_SIZE);
+ uint64_t *ret = tail_alloc(sizeof(*ret));
+
+ long rc;
+
+ rc = syscall(__NR_s390_sthyi, 0, 0, 0, 0);
+ printf("s390_sthyi(STHYI_FC_CP_IFL_CAP, NULL, NULL, 0) = %s\n",
+ sprintrc(rc));
+
+ rc = syscall(__NR_s390_sthyi, bogus_func, bogus_resp_buf,
+ bogus_ret_code, bogus_flags);
+ printf("s390_sthyi(%#llx /* STHYI_FC_??? */, %#llx, %#llx, %#llx) = "
+ "%s\n",
+ (unsigned long long) bogus_func,
+ (unsigned long long) bogus_resp_buf,
+ (unsigned long long) bogus_ret_code,
+ (unsigned long long) bogus_flags,
+ sprintrc(rc));
+
+ rc = syscall(__NR_s390_sthyi, bogus_func, buf, ret, 0);
+ printf("s390_sthyi(%#llx /* STHYI_FC_??? */, %p, %p, 0) = %s\n",
+ (unsigned long long) bogus_func, buf, ret, sprintrc(rc));
+
+ rc = syscall(__NR_s390_sthyi, 0, buf, ret, 0);
+ if (rc)
+ error_msg_and_fail("syscall(__NR_s390_sthyi, 0, buf, ret, 0) "
+ "returned unexpected value of %ld", rc);
+
+ printf("s390_sthyi(STHYI_FC_CP_IFL_CAP, ");
+ print_sthyi(buf);
+ printf(", [0], 0) = 0\n");
+
+ puts("+++ exited with 0 +++");
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("HAVE_ICONV_H && HAVE_ICONV_OPEN && __NR_s390_sthyi")
+
+#endif
diff --git a/tests-mx32/s390_sthyi.gen.test b/tests-mx32/s390_sthyi.gen.test
new file mode 100755
index 000000000..cf271374a
--- /dev/null
+++ b/tests-mx32/s390_sthyi.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (s390_sthyi -a47 ); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a47
diff --git a/tests-mx32/sched_rr_get_interval.gen.test b/tests-mx32/sched_rr_get_interval.gen.test
index 493de6444..02aad0028 100755
--- a/tests-mx32/sched_rr_get_interval.gen.test
+++ b/tests-mx32/sched_rr_get_interval.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sched_rr_get_interval -a31); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sched_rr_get_interval -a31 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a31
+run_strace_match_diff -a31
diff --git a/tests-mx32/sched_yield.gen.test b/tests-mx32/sched_yield.gen.test
index 3f4542ff0..4b035fd89 100755
--- a/tests-mx32/sched_yield.gen.test
+++ b/tests-mx32/sched_yield.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sched_yield -a14); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sched_yield -a14 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a14
+run_strace_match_diff -a14
diff --git a/tests-mx32/select-P.c b/tests-mx32/select-P.c
new file mode 100644
index 000000000..868deed63
--- /dev/null
+++ b/tests-mx32/select-P.c
@@ -0,0 +1,2 @@
+#define PATH_TRACING_FD 9
+#include "select.c"
diff --git a/tests-mx32/select-P.gen.test b/tests-mx32/select-P.gen.test
new file mode 100755
index 000000000..2f6fc7bc4
--- /dev/null
+++ b/tests-mx32/select-P.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (select-P -a36 -e trace=select -P /dev/full 9>>/dev/full); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -a36 -e trace=select -P /dev/full 9>>/dev/full
diff --git a/tests-mx32/select.gen.test b/tests-mx32/select.gen.test
index cb3b8f154..238361490 100755
--- a/tests-mx32/select.gen.test
+++ b/tests-mx32/select.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (select -a36); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (select -a36 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a36
+run_strace_match_diff -a36
diff --git a/tests-mx32/sendfile.gen.test b/tests-mx32/sendfile.gen.test
index 433878f8b..d32ef3ad5 100755
--- a/tests-mx32/sendfile.gen.test
+++ b/tests-mx32/sendfile.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sendfile -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sendfile -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/sendfile64.gen.test b/tests-mx32/sendfile64.gen.test
index 1655dd324..24f0746fe 100755
--- a/tests-mx32/sendfile64.gen.test
+++ b/tests-mx32/sendfile64.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sendfile64 -a29); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sendfile64 -a29 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a29
+run_strace_match_diff -a29
diff --git a/tests-mx32/set_ptracer_any.c b/tests-mx32/set_ptracer_any.c
index 3b4ea2cbb..3c1129618 100644
--- a/tests-mx32/set_ptracer_any.c
+++ b/tests-mx32/set_ptracer_any.c
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2013-2015 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2013-2017 The strace developers.
+ * Copyright (c) 2013-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -37,10 +37,16 @@ int main(int argc, char **argv)
{
if (argc < 2)
return 99;
-#if defined HAVE_PRCTL && defined PR_SET_PTRACER && defined PR_SET_PTRACER_ANY
- /* Turn off restrictions on tracing if applicable. If the options
+#ifdef HAVE_PRCTL
+ /* Turn off restrictions on tracing if applicable. If the command
* aren't available on this system, that's OK too. */
- (void) prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY);
+# ifndef PR_SET_PTRACER
+# define PR_SET_PTRACER 0x59616d61
+# endif
+# ifndef PR_SET_PTRACER_ANY
+# define PR_SET_PTRACER_ANY -1UL
+# endif
+ (void) prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0);
#endif
if (write(1, "\n", 1) != 1) {
perror("write");
diff --git a/tests-mx32/setdomainname.gen.test b/tests-mx32/setdomainname.gen.test
index 2b12e0829..1f29563f7 100755
--- a/tests-mx32/setdomainname.gen.test
+++ b/tests-mx32/setdomainname.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setdomainname -a24); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setdomainname -a24 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a24
+run_strace_match_diff -a24
diff --git a/tests-mx32/setfsgid.gen.test b/tests-mx32/setfsgid.gen.test
index caff40127..bbb30cc17 100755
--- a/tests-mx32/setfsgid.gen.test
+++ b/tests-mx32/setfsgid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setfsgid -a12); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setfsgid -a12 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a12
+run_strace_match_diff -a12
diff --git a/tests-mx32/setfsgid32.gen.test b/tests-mx32/setfsgid32.gen.test
index fae29e01d..63b3eca0f 100755
--- a/tests-mx32/setfsgid32.gen.test
+++ b/tests-mx32/setfsgid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setfsgid32 -a14); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setfsgid32 -a14 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a14
+run_strace_match_diff -a14
diff --git a/tests-mx32/setfsuid.gen.test b/tests-mx32/setfsuid.gen.test
index e4c4d2096..5896b3032 100755
--- a/tests-mx32/setfsuid.gen.test
+++ b/tests-mx32/setfsuid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setfsuid -a12); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setfsuid -a12 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a12
+run_strace_match_diff -a12
diff --git a/tests-mx32/setfsuid32.gen.test b/tests-mx32/setfsuid32.gen.test
index b6cd67d72..52d0820fc 100755
--- a/tests-mx32/setfsuid32.gen.test
+++ b/tests-mx32/setfsuid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setfsuid32 -a14); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setfsuid32 -a14 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a14
+run_strace_match_diff -a14
diff --git a/tests-mx32/setgid.gen.test b/tests-mx32/setgid.gen.test
index f10add65b..be188d1fe 100755
--- a/tests-mx32/setgid.gen.test
+++ b/tests-mx32/setgid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setgid -a10); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setgid -a10 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a10
+run_strace_match_diff -a10
diff --git a/tests-mx32/setgid32.gen.test b/tests-mx32/setgid32.gen.test
index 26f194ec6..9020b8096 100755
--- a/tests-mx32/setgid32.gen.test
+++ b/tests-mx32/setgid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setgid32 -a12); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setgid32 -a12 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a12
+run_strace_match_diff -a12
diff --git a/tests-mx32/sethostname.gen.test b/tests-mx32/sethostname.gen.test
index 2827b1dcb..d68ed189e 100755
--- a/tests-mx32/sethostname.gen.test
+++ b/tests-mx32/sethostname.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sethostname -a22); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sethostname -a22 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a22
+run_strace_match_diff -a22
diff --git a/tests-mx32/setns.gen.test b/tests-mx32/setns.gen.test
index 45fcc601b..e25738bf4 100755
--- a/tests-mx32/setns.gen.test
+++ b/tests-mx32/setns.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setns -a21); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setns -a21 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a21
+run_strace_match_diff -a21
diff --git a/tests-mx32/setregid.gen.test b/tests-mx32/setregid.gen.test
index 0125d7a98..f84b1acb0 100755
--- a/tests-mx32/setregid.gen.test
+++ b/tests-mx32/setregid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setregid -a15); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setregid -a15 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a15
+run_strace_match_diff -a15
diff --git a/tests-mx32/setregid32.gen.test b/tests-mx32/setregid32.gen.test
index 24f1505b7..7320c8cf9 100755
--- a/tests-mx32/setregid32.gen.test
+++ b/tests-mx32/setregid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setregid32 -a17); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setregid32 -a17 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a17
+run_strace_match_diff -a17
diff --git a/tests-mx32/setresgid.gen.test b/tests-mx32/setresgid.gen.test
index ca5bc6b72..792313c2b 100755
--- a/tests-mx32/setresgid.gen.test
+++ b/tests-mx32/setresgid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setresgid -a19); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setresgid -a19 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a19
+run_strace_match_diff -a19
diff --git a/tests-mx32/setresgid32.gen.test b/tests-mx32/setresgid32.gen.test
index a5edb905e..6ecf936be 100755
--- a/tests-mx32/setresgid32.gen.test
+++ b/tests-mx32/setresgid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setresgid32 -a21); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setresgid32 -a21 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a21
+run_strace_match_diff -a21
diff --git a/tests-mx32/setresuid.gen.test b/tests-mx32/setresuid.gen.test
index a6e066410..a0dcb4ba4 100755
--- a/tests-mx32/setresuid.gen.test
+++ b/tests-mx32/setresuid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setresuid -a19); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setresuid -a19 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a19
+run_strace_match_diff -a19
diff --git a/tests-mx32/setresuid32.gen.test b/tests-mx32/setresuid32.gen.test
index 3fbf36be5..a9f439692 100755
--- a/tests-mx32/setresuid32.gen.test
+++ b/tests-mx32/setresuid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setresuid32 -a21); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setresuid32 -a21 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a21
+run_strace_match_diff -a21
diff --git a/tests-mx32/setreuid.gen.test b/tests-mx32/setreuid.gen.test
index 4c3dc9302..0ecaef0bb 100755
--- a/tests-mx32/setreuid.gen.test
+++ b/tests-mx32/setreuid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setreuid -a15); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setreuid -a15 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a15
+run_strace_match_diff -a15
diff --git a/tests-mx32/setreuid32.gen.test b/tests-mx32/setreuid32.gen.test
index d1790538c..3eb0e95a9 100755
--- a/tests-mx32/setreuid32.gen.test
+++ b/tests-mx32/setreuid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setreuid32 -a17); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setreuid32 -a17 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a17
+run_strace_match_diff -a17
diff --git a/tests-mx32/setrlimit.gen.test b/tests-mx32/setrlimit.gen.test
index dfe2da38a..0d1508d3b 100755
--- a/tests-mx32/setrlimit.gen.test
+++ b/tests-mx32/setrlimit.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setrlimit -a27); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setrlimit -a27 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a27
+run_strace_match_diff -a27
diff --git a/tests-mx32/setugid.c b/tests-mx32/setugid.c
index aba277c59..6ceec7fcc 100644
--- a/tests-mx32/setugid.c
+++ b/tests-mx32/setugid.c
@@ -2,6 +2,7 @@
* Check decoding of setuid/setgid/setuid32/setgid32 syscalls.
*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -61,6 +62,8 @@ main(void)
const unsigned int num = (unsigned UGID_TYPE) tests[i];
long expected;
+ errno = 0;
+
if (num == ugid)
expected = 0;
else if ((UGID_TYPE) num == (UGID_TYPE) -1U)
@@ -77,8 +80,9 @@ main(void)
SYSCALL_NAME, ugid, errstr);
break;
}
- perror_msg_and_fail("%s(%#lx) != %ld",
- SYSCALL_NAME, tests[i], expected);
+ perror_msg_and_fail("%s(%#lx) = %ld != %ld",
+ SYSCALL_NAME, tests[i],
+ rc, expected);
}
printf("%s(", SYSCALL_NAME);
diff --git a/tests-mx32/setuid.gen.test b/tests-mx32/setuid.gen.test
index 98d470fd4..00aeb7a27 100755
--- a/tests-mx32/setuid.gen.test
+++ b/tests-mx32/setuid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setuid -a10); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setuid -a10 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a10
+run_strace_match_diff -a10
diff --git a/tests-mx32/setuid32.gen.test b/tests-mx32/setuid32.gen.test
index 7d15495c3..ac8df8f23 100755
--- a/tests-mx32/setuid32.gen.test
+++ b/tests-mx32/setuid32.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setuid32 -a12); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (setuid32 -a12 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a12
+run_strace_match_diff -a12
diff --git a/tests-mx32/shmxt.c b/tests-mx32/shmxt.c
index 23cc7ccf4..398667c84 100644
--- a/tests-mx32/shmxt.c
+++ b/tests-mx32/shmxt.c
@@ -18,6 +18,10 @@ cleanup(void)
# define SHMAT "shmat"
#endif
+#ifndef SHM_EXEC
+# define SHM_EXEC 0100000
+#endif
+
int
main(void)
{
@@ -34,8 +38,8 @@ main(void)
atexit(cleanup);
rc = (long) shmat(bogus_shmid, bogus_shmaddr, bogus_shmflg);
- printf("%s(%d, %p, SHM_REMAP|SHM_RDONLY|SHM_RND|%#x) = %s\n",
- SHMAT, bogus_shmid, bogus_shmaddr, bogus_shmflg & ~0x7000,
+ printf("%s(%d, %p, SHM_RDONLY|SHM_RND|SHM_REMAP|SHM_EXEC|%#x) = %s\n",
+ SHMAT, bogus_shmid, bogus_shmaddr, bogus_shmflg & ~0xf000,
sprintrc(rc));
shmat(id, NULL, SHM_REMAP);
@@ -50,18 +54,31 @@ main(void)
rc = shmdt(NULL);
printf("shmdt(NULL) = %s\n", sprintrc(rc));
- if (shmdt(shmaddr))
- perror_msg_and_skip("shmdt");
- printf("shmdt(%p) = 0\n", shmaddr);
+ rc = shmdt(shmaddr);
+ printf("shmdt(%p) = %s\n", shmaddr, sprintrc(rc));
++shmaddr;
void *shmaddr2 = shmat(id, shmaddr, SHM_RND);
if (shmaddr2 == (void *)(-1))
printf("%s(%d, %p, SHM_RND) = -1 %s (%m)\n",
SHMAT, id, shmaddr, errno2name());
- else
+ else {
printf("%s(%d, %p, SHM_RND) = %p\n",
SHMAT, id, shmaddr, shmaddr2);
+ rc = shmdt(shmaddr2);
+ printf("shmdt(%p) = %s\n", shmaddr2, sprintrc(rc));
+ }
+
+ shmaddr = shmat(id, NULL, SHM_RDONLY|SHM_EXEC);
+ if (shmaddr == (void *)(-1))
+ printf("%s(%d, NULL, SHM_RDONLY|SHM_EXEC) = %s\n",
+ SHMAT, id, sprintrc(-1));
+ else {
+ printf("%s(%d, NULL, SHM_RDONLY|SHM_EXEC) = %p\n",
+ SHMAT, id, shmaddr);
+ rc = shmdt(shmaddr);
+ printf("shmdt(%p) = %s\n", shmaddr, sprintrc(rc));
+ }
puts("+++ exited with 0 +++");
return 0;
diff --git a/tests-mx32/shutdown.gen.test b/tests-mx32/shutdown.gen.test
index 3412513f1..7fde46eeb 100755
--- a/tests-mx32/shutdown.gen.test
+++ b/tests-mx32/shutdown.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (shutdown -a24); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (shutdown -a24 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a24
+run_strace_match_diff -a24
diff --git a/tests-mx32/sigaction.gen.test b/tests-mx32/sigaction.gen.test
index dee340e8e..1db6b3aa3 100755
--- a/tests-mx32/sigaction.gen.test
+++ b/tests-mx32/sigaction.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sigaction -a31); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sigaction -a31 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a31
+run_strace_match_diff -a31
diff --git a/tests-mx32/signalfd4.gen.test b/tests-mx32/signalfd4.gen.test
index e91a9fe4a..dee4274c9 100755
--- a/tests-mx32/signalfd4.gen.test
+++ b/tests-mx32/signalfd4.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (signalfd4 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (signalfd4 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/sigpending.gen.test b/tests-mx32/sigpending.gen.test
index 0f4259a32..c061868ce 100755
--- a/tests-mx32/sigpending.gen.test
+++ b/tests-mx32/sigpending.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sigpending -a15); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sigpending -a15 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a15
+run_strace_match_diff -a15
diff --git a/tests-mx32/sigprocmask.gen.test b/tests-mx32/sigprocmask.gen.test
index 44a508cea..065b74d7a 100755
--- a/tests-mx32/sigprocmask.gen.test
+++ b/tests-mx32/sigprocmask.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sigprocmask -a34); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sigprocmask -a34 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a34
+run_strace_match_diff -a34
diff --git a/tests-mx32/sigreturn.gen.test b/tests-mx32/sigreturn.gen.test
index f317e893c..3b67c9d04 100755
--- a/tests-mx32/sigreturn.gen.test
+++ b/tests-mx32/sigreturn.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sigreturn -esignal='!USR1'); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sigreturn -esignal='!USR1' ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -esignal='!USR1'
+run_strace_match_diff -esignal='!USR1'
diff --git a/tests-mx32/socketcall.gen.test b/tests-mx32/socketcall.gen.test
index 95c45fd7d..d18b03646 100755
--- a/tests-mx32/socketcall.gen.test
+++ b/tests-mx32/socketcall.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (socketcall -a20); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (socketcall -a20 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a20
+run_strace_match_diff -a20
diff --git a/tests-mx32/sockname.c b/tests-mx32/sockname.c
index 587267120..bba9a892d 100644
--- a/tests-mx32/sockname.c
+++ b/tests-mx32/sockname.c
@@ -2,7 +2,7 @@
* Check decoding of sockname family syscalls.
*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -42,7 +42,9 @@
# error TEST_SYSCALL_NAME must be defined
#endif
-#define TEST_SYSCALL_STR STRINGIFY_VAL(TEST_SYSCALL_NAME)
+#ifndef TEST_SYSCALL_STR
+# define TEST_SYSCALL_STR STRINGIFY_VAL(TEST_SYSCALL_NAME)
+#endif
#define TEST_SOCKET TEST_SYSCALL_STR ".socket"
#ifdef TEST_SYSCALL_PREPARE
diff --git a/tests-mx32/sockopt-sol_netlink.c b/tests-mx32/sockopt-sol_netlink.c
new file mode 100644
index 000000000..066920c63
--- /dev/null
+++ b/tests-mx32/sockopt-sol_netlink.c
@@ -0,0 +1,213 @@
+/*
+ * Check decoding of getsockopt and setsockopt for SOL_NETLINK level.
+ *
+ * Copyright (c) 2017 Dmitry V. Levin <ldv@altlinux.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+#include "netlink.h"
+#include <stdio.h>
+
+#ifndef SOL_NETLINK
+# define SOL_NETLINK 270
+#endif
+
+static int rc;
+static const char *errstr;
+
+static int
+get_sockopt(int fd, int name, void *val, socklen_t *len)
+{
+ rc = getsockopt(fd, SOL_NETLINK, name, val, len);
+ errstr = sprintrc(rc);
+ return rc;
+}
+
+static int
+set_sockopt(int fd, int name, void *val, socklen_t len)
+{
+ rc = setsockopt(fd, SOL_NETLINK, name, val, len);
+ errstr = sprintrc(rc);
+ return rc;
+}
+
+int
+main(void)
+{
+ static const struct {
+ int val;
+ const char *str;
+ } names[] = {
+#ifdef NETLINK_ADD_MEMBERSHIP
+ { ARG_STR(NETLINK_ADD_MEMBERSHIP) },
+#endif
+#ifdef NETLINK_DROP_MEMBERSHIP
+ { ARG_STR(NETLINK_DROP_MEMBERSHIP) },
+#endif
+#ifdef NETLINK_PKTINFO
+ { ARG_STR(NETLINK_PKTINFO) },
+#endif
+#ifdef NETLINK_BROADCAST_ERROR
+ { ARG_STR(NETLINK_BROADCAST_ERROR) },
+#endif
+#ifdef NETLINK_NO_ENOBUFS
+ { ARG_STR(NETLINK_NO_ENOBUFS) },
+#endif
+#ifdef NETLINK_RX_RING
+ { ARG_STR(NETLINK_RX_RING) },
+#endif
+#ifdef NETLINK_TX_RING
+ { ARG_STR(NETLINK_TX_RING) },
+#endif
+#ifdef NETLINK_LISTEN_ALL_NSID
+ { ARG_STR(NETLINK_LISTEN_ALL_NSID) },
+#endif
+#ifdef NETLINK_LIST_MEMBERSHIPS
+ { ARG_STR(NETLINK_LIST_MEMBERSHIPS) },
+#endif
+#ifdef NETLINK_CAP_ACK
+ { ARG_STR(NETLINK_CAP_ACK) },
+#endif
+#ifdef NETLINK_EXT_ACK
+ { ARG_STR(NETLINK_EXT_ACK) },
+#endif
+ };
+
+ TAIL_ALLOC_OBJECT_CONST_PTR(int, val);
+ TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, len);
+ void *const efault = val + 1;
+ int fd = socket(AF_NETLINK, SOCK_RAW, 0);
+ if (fd < 0)
+ perror_msg_and_skip("socket AF_NETLINK SOCK_RAW");
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(names); ++i) {
+ /* getsockopt */
+
+ /* classic */
+ *len = sizeof(*val);
+ get_sockopt(fd, names[i].val, val, len);
+ printf("getsockopt(%d, SOL_NETLINK, %s, ", fd, names[i].str);
+ if (rc)
+ printf("%p", val);
+ else
+ printf("[%d]", *val);
+ printf(", [%d]) = %s\n", *len, errstr);
+
+ /* optlen larger than necessary - shortened */
+ *len = sizeof(*val) + 1;
+ get_sockopt(fd, names[i].val, val, len);
+ printf("getsockopt(%d, SOL_NETLINK, %s, ", fd, names[i].str);
+ if (rc)
+ printf("%p", val);
+ else
+ printf("[%d]", *val);
+ printf(", [%d", (int) sizeof(*val) + 1);
+ if ((int) sizeof(*val) + 1 != *len)
+ printf("->%d", *len);
+ printf("]) = %s\n", errstr);
+
+ /* zero optlen - print returned optlen */
+ *len = 0;
+ get_sockopt(fd, names[i].val, NULL, len);
+ printf("getsockopt(%d, SOL_NETLINK, %s, NULL, [0",
+ fd, names[i].str);
+ if (*len)
+ printf("->%d", *len);
+ printf("]) = %s\n", errstr);
+
+#ifdef NETLINK_LIST_MEMBERSHIPS
+ if (names[i].val != NETLINK_LIST_MEMBERSHIPS) {
+#endif
+ /* optlen shorter than necessary - print address */
+ *len = sizeof(*val) - 1;
+ get_sockopt(fd, names[i].val, val, len);
+ printf("getsockopt(%d, SOL_NETLINK, %s, %p, [%d",
+ fd, names[i].str, val, (int) sizeof(*val) - 1);
+ if ((int) sizeof(*val) - 1 != *len)
+ printf("->%d", *len);
+ printf("]) = %s\n", errstr);
+#ifdef NETLINK_LIST_MEMBERSHIPS
+ } else {
+ /* optlen shorter than required for the first element */
+ *len = sizeof(*val) - 1;
+ get_sockopt(fd, names[i].val, efault, len);
+ printf("getsockopt(%d, SOL_NETLINK, %s, ",
+ fd, names[i].str);
+ if (rc)
+ printf("%p", efault);
+ else
+ printf("[]");
+ printf(", [%d", (int) sizeof(*val) - 1);
+ if ((int) sizeof(*val) - 1 != *len)
+ printf("->%d", *len);
+ printf("]) = %s\n", errstr);
+ }
+#endif
+
+ /* optval EFAULT - print address */
+ *len = sizeof(*val);
+ get_sockopt(fd, names[i].val, efault, len);
+ printf("getsockopt(%d, SOL_NETLINK, %s, %p, [%d]) = %s\n",
+ fd, names[i].str, efault, *len, errstr);
+
+ /* optlen EFAULT - print address */
+ get_sockopt(fd, names[i].val, val, len + 1);
+ printf("getsockopt(%d, SOL_NETLINK, %s, %p, %p) = %s\n",
+ fd, names[i].str, val, len + 1, errstr);
+
+ /* setsockopt */
+
+ /* classic */
+ *val = 0xdefaced;
+ set_sockopt(fd, names[i].val, val, sizeof(*val));
+ printf("setsockopt(%d, SOL_NETLINK, %s, [%d], %d) = %s\n",
+ fd, names[i].str, *val, (int) sizeof(*val), errstr);
+
+ /* optlen larger than necessary - shortened */
+ set_sockopt(fd, names[i].val, val, sizeof(*val) + 1);
+ printf("setsockopt(%d, SOL_NETLINK, %s, [%d], %d) = %s\n",
+ fd, names[i].str, *val, (int) sizeof(*val) + 1, errstr);
+
+ /* optlen < 0 - print address */
+ set_sockopt(fd, names[i].val, val, -1U);
+ printf("setsockopt(%d, SOL_NETLINK, %s, %p, -1) = %s\n",
+ fd, names[i].str, val, errstr);
+
+ /* optlen smaller than necessary - print address */
+ set_sockopt(fd, names[i].val, val, sizeof(*val) - 1);
+ printf("setsockopt(%d, SOL_NETLINK, %s, %p, %d) = %s\n",
+ fd, names[i].str, val, (int) sizeof(*val) - 1, errstr);
+
+ /* optval EFAULT - print address */
+ set_sockopt(fd, names[i].val, efault, sizeof(*val));
+ printf("setsockopt(%d, SOL_NETLINK, %s, %p, %d) = %s\n",
+ fd, names[i].str, efault, (int) sizeof(*val), errstr);
+ }
+
+ puts("+++ exited with 0 +++");
+ return 0;
+}
diff --git a/tests-mx32/sockopt-sol_netlink.gen.test b/tests-mx32/sockopt-sol_netlink.gen.test
new file mode 100755
index 000000000..a2ba06dd5
--- /dev/null
+++ b/tests-mx32/sockopt-sol_netlink.gen.test
@@ -0,0 +1,4 @@
+#!/bin/sh -efu
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sockopt-sol_netlink -e trace=getsockopt,setsockopt); do not edit.
+. "${srcdir=.}/init.sh"
+run_strace_match_diff -e trace=getsockopt,setsockopt
diff --git a/tests-mx32/splice.gen.test b/tests-mx32/splice.gen.test
index 83c84064b..756608061 100755
--- a/tests-mx32/splice.gen.test
+++ b/tests-mx32/splice.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (splice ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (splice ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/stack-fcall-0.c b/tests-mx32/stack-fcall-0.c
index 12a260deb..edd6d326c 100644
--- a/tests-mx32/stack-fcall-0.c
+++ b/tests-mx32/stack-fcall-0.c
@@ -1,4 +1,4 @@
-int f1(int i);
+#include "stack-fcall.h"
int f0(int i)
{
diff --git a/tests-mx32/stack-fcall-1.c b/tests-mx32/stack-fcall-1.c
index 8716702df..5d0bf0e6c 100644
--- a/tests-mx32/stack-fcall-1.c
+++ b/tests-mx32/stack-fcall-1.c
@@ -1,4 +1,4 @@
-int f2(int i);
+#include "stack-fcall.h"
int f1(int i)
{
diff --git a/tests-mx32/stack-fcall-2.c b/tests-mx32/stack-fcall-2.c
index 19f8cf83c..e16432078 100644
--- a/tests-mx32/stack-fcall-2.c
+++ b/tests-mx32/stack-fcall-2.c
@@ -1,4 +1,4 @@
-int f3(int i);
+#include "stack-fcall.h"
int f2(int i)
{
diff --git a/tests-mx32/stack-fcall-3.c b/tests-mx32/stack-fcall-3.c
index 3af1667f4..98726d8f3 100644
--- a/tests-mx32/stack-fcall-3.c
+++ b/tests-mx32/stack-fcall-3.c
@@ -1,4 +1,5 @@
#include <unistd.h>
+#include "stack-fcall.h"
int f3(int i)
{
diff --git a/tests-mx32/stack-fcall-mangled-0.c b/tests-mx32/stack-fcall-mangled-0.c
new file mode 100644
index 000000000..475494017
--- /dev/null
+++ b/tests-mx32/stack-fcall-mangled-0.c
@@ -0,0 +1,2 @@
+#define MANGLE
+#include "stack-fcall-0.c"
diff --git a/tests-mx32/stack-fcall-mangled-1.c b/tests-mx32/stack-fcall-mangled-1.c
new file mode 100644
index 000000000..492c562bc
--- /dev/null
+++ b/tests-mx32/stack-fcall-mangled-1.c
@@ -0,0 +1,2 @@
+#define MANGLE
+#include "stack-fcall-1.c"
diff --git a/tests-mx32/stack-fcall-mangled-2.c b/tests-mx32/stack-fcall-mangled-2.c
new file mode 100644
index 000000000..eb7c3624b
--- /dev/null
+++ b/tests-mx32/stack-fcall-mangled-2.c
@@ -0,0 +1,2 @@
+#define MANGLE
+#include "stack-fcall-2.c"
diff --git a/tests-mx32/stack-fcall-mangled-3.c b/tests-mx32/stack-fcall-mangled-3.c
new file mode 100644
index 000000000..98f738b42
--- /dev/null
+++ b/tests-mx32/stack-fcall-mangled-3.c
@@ -0,0 +1,2 @@
+#define MANGLE
+#include "stack-fcall-3.c"
diff --git a/tests-mx32/stack-fcall-mangled.c b/tests-mx32/stack-fcall-mangled.c
new file mode 100644
index 000000000..67862059c
--- /dev/null
+++ b/tests-mx32/stack-fcall-mangled.c
@@ -0,0 +1,2 @@
+#define MANGLE
+#include "stack-fcall.c"
diff --git a/tests-mx32/stack-fcall.c b/tests-mx32/stack-fcall.c
index fc9ee5f9d..e0ec3b1ae 100644
--- a/tests-mx32/stack-fcall.c
+++ b/tests-mx32/stack-fcall.c
@@ -1,4 +1,4 @@
-int f0(int i);
+#include "stack-fcall.h"
int main(int argc, char **argv)
{
diff --git a/tests-mx32/stack-fcall.h b/tests-mx32/stack-fcall.h
new file mode 100644
index 000000000..1a83bad41
--- /dev/null
+++ b/tests-mx32/stack-fcall.h
@@ -0,0 +1,13 @@
+#ifdef MANGLE
+
+#define f0 _ZN2ns2f0Ei
+#define f1 _ZN2ns2f1Ei
+#define f2 _ZN2ns2f2Ei
+#define f3 _ZN2ns2f3Ei
+
+#endif
+
+int f0(int i);
+int f1(int i);
+int f2(int i);
+int f3(int i);
diff --git a/tests-mx32/statfs.gen.test b/tests-mx32/statfs.gen.test
index 19b26dd8a..32204a144 100755
--- a/tests-mx32/statfs.gen.test
+++ b/tests-mx32/statfs.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (statfs -a17); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (statfs -a17 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a17
+run_strace_match_diff -a17
diff --git a/tests-mx32/statfs64.gen.test b/tests-mx32/statfs64.gen.test
index 66409f9c3..8f6f06f7d 100755
--- a/tests-mx32/statfs64.gen.test
+++ b/tests-mx32/statfs64.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (statfs64 -a23); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (statfs64 -a23 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a23
+run_strace_match_diff -a23
diff --git a/tests-mx32/strace-V.test b/tests-mx32/strace-V.test
index ec1ca059d..eb05e8655 100755
--- a/tests-mx32/strace-V.test
+++ b/tests-mx32/strace-V.test
@@ -39,8 +39,21 @@ config_year=$(getstr COPYRIGHT_YEAR)
}
option_unwind=$(getoption USE_LIBUNWIND " stack-unwind")
+option_demangle=$(getoption USE_DEMANGLE " stack-demangle")
-features="${option_unwind}"
+option_m32=
+option_mx32=
+case "$STRACE_NATIVE_ARCH" in
+x86_64)
+ option_m32=$(getoption HAVE_M32_MPERS ' m32-mpers' ' no-m32-mpers')
+ option_mx32=$(getoption HAVE_MX32_MPERS ' mx32-mpers' ' no-mx32-mpers')
+ ;;
+aarch64|powerpc64|riscv|s390x|sparc64|tile|x32)
+ option_m32=$(getoption HAVE_M32_MPERS ' m32-mpers' ' no-m32-mpers')
+ ;;
+esac
+
+features="${option_unwind}${option_demangle}${option_m32}${option_mx32}"
[ -n "$features" ] || features=" (none)"
cat > "$EXP" << __EOF__
diff --git a/tests-mx32/strace-k-demangle.test b/tests-mx32/strace-k-demangle.test
new file mode 100755
index 000000000..1616449f1
--- /dev/null
+++ b/tests-mx32/strace-k-demangle.test
@@ -0,0 +1,7 @@
+#!/bin/sh
+# Check strace -k symbol names demangling.
+
+test_prog=../stack-fcall-mangled
+expected='getpid ns::f3(int) ns::f2(int) ns::f1(int) ns::f0(int) main '
+
+. "${srcdir=.}"/strace-k.test
diff --git a/tests-mx32/strace-k.test b/tests-mx32/strace-k.test
index e68951e8f..2a21a9db4 100755
--- a/tests-mx32/strace-k.test
+++ b/tests-mx32/strace-k.test
@@ -38,11 +38,13 @@
check_prog sed
check_prog tr
-run_prog ../stack-fcall
+: ${test_prog=../stack-fcall}
+: ${expected='getpid f3 f2 f1 f0 main '}
+
+run_prog "$test_prog"
run_strace -e getpid -k $args
-expected='getpid f3 f2 f1 f0 main '
-result=$(sed -r -n '1,/\(main\+0x[a-f0-9]+\) .*/ s/^.*\(([^+]+)\+0x[a-f0-9]+\) .*/\1/p' "$LOG" |
+result=$(sed -r -n '1,/\(main\+0x[a-f0-9]+\) .*/ s/^[^(]+\(([^+]+)\+0x[a-f0-9]+\) .*/\1/p' "$LOG" |
tr '\n' ' ')
test "$result" = "$expected" || {
@@ -50,5 +52,3 @@ test "$result" = "$expected" || {
echo "result: \"$result\""
dump_log_and_fail_with "$STRACE $args output mismatch"
}
-
-exit 0
diff --git a/tests-mx32/symlink.gen.test b/tests-mx32/symlink.gen.test
index f41668c38..8cedfbf44 100755
--- a/tests-mx32/symlink.gen.test
+++ b/tests-mx32/symlink.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (symlink -a34); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (symlink -a34 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a34
+run_strace_match_diff -a34
diff --git a/tests-mx32/symlinkat.gen.test b/tests-mx32/symlinkat.gen.test
index 39e624ab6..12455dd92 100755
--- a/tests-mx32/symlinkat.gen.test
+++ b/tests-mx32/symlinkat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (symlinkat ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (symlinkat ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/sync.gen.test b/tests-mx32/sync.gen.test
index 4aaf8c7f2..8436a1fa2 100755
--- a/tests-mx32/sync.gen.test
+++ b/tests-mx32/sync.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sync -a7); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sync -a7 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a7
+run_strace_match_diff -a7
diff --git a/tests-mx32/sync_file_range.gen.test b/tests-mx32/sync_file_range.gen.test
index 0693c12e3..2f41c7dbd 100755
--- a/tests-mx32/sync_file_range.gen.test
+++ b/tests-mx32/sync_file_range.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sync_file_range ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sync_file_range ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/sync_file_range2.gen.test b/tests-mx32/sync_file_range2.gen.test
index 23046b6b2..d432647a9 100755
--- a/tests-mx32/sync_file_range2.gen.test
+++ b/tests-mx32/sync_file_range2.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sync_file_range2 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sync_file_range2 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/syntax.sh b/tests-mx32/syntax.sh
index 0a0d2a572..b1c8fdc1e 100644
--- a/tests-mx32/syntax.sh
+++ b/tests-mx32/syntax.sh
@@ -50,13 +50,11 @@ check_exit_status_and_stderr_using_grep()
"strace $* failed to print expected diagnostics"
}
-strace_exp="${STRACE##* }"
-
check_e()
{
local pattern="$1"; shift
cat > "$EXP" << __EOF__
-$strace_exp: $pattern
+$STRACE_EXE: $pattern
__EOF__
check_exit_status_and_stderr "$@"
}
@@ -65,7 +63,7 @@ check_e_using_grep()
{
local pattern="$1"; shift
cat > "$EXP" << __EOF__
-$strace_exp: $pattern
+$STRACE_EXE: $pattern
__EOF__
check_exit_status_and_stderr_using_grep "$@"
}
@@ -74,8 +72,8 @@ check_h()
{
local pattern="$1"; shift
cat > "$EXP" << __EOF__
-$strace_exp: $pattern
-Try '$strace_exp -h' for more information.
+$STRACE_EXE: $pattern
+Try '$STRACE_EXE -h' for more information.
__EOF__
check_exit_status_and_stderr "$@"
}
diff --git a/tests-mx32/sysinfo.gen.test b/tests-mx32/sysinfo.gen.test
index e6469d550..fa4623760 100755
--- a/tests-mx32/sysinfo.gen.test
+++ b/tests-mx32/sysinfo.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sysinfo -a14); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (sysinfo -a14 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a14
+run_strace_match_diff -a14
diff --git a/tests-mx32/syslog.gen.test b/tests-mx32/syslog.gen.test
index 5423d5bb1..5707a3e2a 100755
--- a/tests-mx32/syslog.gen.test
+++ b/tests-mx32/syslog.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (syslog -a36); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (syslog -a36 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a36
+run_strace_match_diff -a36
diff --git a/tests-mx32/tee.gen.test b/tests-mx32/tee.gen.test
index 2a87fae3e..b5fbfc057 100755
--- a/tests-mx32/tee.gen.test
+++ b/tests-mx32/tee.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (tee ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (tee ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/test_printpath.c b/tests-mx32/test_printpath.c
index 5f482f25e..c485a26fb 100644
--- a/tests-mx32/test_printpath.c
+++ b/tests-mx32/test_printpath.c
@@ -2,6 +2,7 @@
* Test printpath/umovestr.
*
* Copyright (c) 2015-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,10 +30,10 @@
#include "tests.h"
+#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <sys/param.h>
#include "test_ucopy.h"
diff --git a/tests-mx32/test_ucopy.c b/tests-mx32/test_ucopy.c
index 9ddffbca4..09f809a24 100644
--- a/tests-mx32/test_ucopy.c
+++ b/tests-mx32/test_ucopy.c
@@ -2,6 +2,7 @@
* Test whether process_vm_readv and PTRACE_PEEKDATA work.
*
* Copyright (c) 2016-2017 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2017-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -30,10 +31,10 @@
#include "tests.h"
#include <errno.h>
+#include <sys/ptrace.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
-#include <sys/ptrace.h>
#include <sys/uio.h>
#include <sys/wait.h>
diff --git a/tests-mx32/tests.h b/tests-mx32/tests.h
index d453e3e0a..1c66c265d 100644
--- a/tests-mx32/tests.h
+++ b/tests-mx32/tests.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
- * Copyright (c) 2016-2017 The strace developers.
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -75,6 +75,15 @@ void error_msg_and_skip(const char *, ...)
void perror_msg_and_skip(const char *, ...)
ATTRIBUTE_FORMAT((printf, 1, 2)) ATTRIBUTE_NORETURN;
+#ifndef perror_msg_and_fail
+# define perror_msg_and_fail(fmt_, ...) \
+ perror_msg_and_fail("%s:%d: " fmt_, __FILE__, __LINE__, ##__VA_ARGS__)
+#endif
+#ifndef perror_msg_and_fail
+# define error_msg_and_fail(fmt_, ...) \
+ error_msg_and_fail("%s:%d: " fmt_, __FILE__, __LINE__, ##__VA_ARGS__)
+#endif
+
/* Stat the specified file and skip the test if the stat call failed. */
void skip_if_unavailable(const char *);
diff --git a/tests-mx32/time.gen.test b/tests-mx32/time.gen.test
index ed7ec69ae..3269b164b 100755
--- a/tests-mx32/time.gen.test
+++ b/tests-mx32/time.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (time -a10); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (time -a10 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a10
+run_strace_match_diff -a10
diff --git a/tests-mx32/timer_create.gen.test b/tests-mx32/timer_create.gen.test
index 6b4c543db..bf6526124 100755
--- a/tests-mx32/timer_create.gen.test
+++ b/tests-mx32/timer_create.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (timer_create ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (timer_create ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/times.gen.test b/tests-mx32/times.gen.test
index ca4ebbe5f..06b036fc4 100755
--- a/tests-mx32/times.gen.test
+++ b/tests-mx32/times.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (times -esignal=none); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (times -esignal=none ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -esignal=none
+run_strace_match_diff -esignal=none
diff --git a/tests-mx32/truncate.gen.test b/tests-mx32/truncate.gen.test
index 0410e73d2..7a631ef08 100755
--- a/tests-mx32/truncate.gen.test
+++ b/tests-mx32/truncate.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (truncate ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (truncate ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/truncate64.gen.test b/tests-mx32/truncate64.gen.test
index dae0fe6f3..2b368f448 100755
--- a/tests-mx32/truncate64.gen.test
+++ b/tests-mx32/truncate64.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (truncate64 ); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (truncate64 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff
+run_strace_match_diff
diff --git a/tests-mx32/ugetrlimit.gen.test b/tests-mx32/ugetrlimit.gen.test
index ff27134ac..a412fe6a6 100755
--- a/tests-mx32/ugetrlimit.gen.test
+++ b/tests-mx32/ugetrlimit.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ugetrlimit -a28); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ugetrlimit -a28 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a28
+run_strace_match_diff -a28
diff --git a/tests-mx32/umask.gen.test b/tests-mx32/umask.gen.test
index 60af5e9a5..5d6c3187b 100755
--- a/tests-mx32/umask.gen.test
+++ b/tests-mx32/umask.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (umask -a11); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (umask -a11 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a11
+run_strace_match_diff -a11
diff --git a/tests-mx32/umovestr3.c b/tests-mx32/umovestr3.c
index cf2fa7d4f..74f0e9340 100644
--- a/tests-mx32/umovestr3.c
+++ b/tests-mx32/umovestr3.c
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Copyright (c) 2016-2018 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -26,9 +27,9 @@
*/
#include "tests.h"
+#include <limits.h>
#include <stdio.h>
#include <unistd.h>
-#include <sys/param.h>
int
main(void)
diff --git a/tests-mx32/unlink.gen.test b/tests-mx32/unlink.gen.test
index 7b8522b47..63bc0c426 100755
--- a/tests-mx32/unlink.gen.test
+++ b/tests-mx32/unlink.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (unlink -a24); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (unlink -a24 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a24
+run_strace_match_diff -a24
diff --git a/tests-mx32/unlinkat.gen.test b/tests-mx32/unlinkat.gen.test
index 5a77c6ab9..5de790842 100755
--- a/tests-mx32/unlinkat.gen.test
+++ b/tests-mx32/unlinkat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (unlinkat -a35); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (unlinkat -a35 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a35
+run_strace_match_diff -a35
diff --git a/tests-mx32/unshare.gen.test b/tests-mx32/unshare.gen.test
index 077a45807..782ce47a8 100755
--- a/tests-mx32/unshare.gen.test
+++ b/tests-mx32/unshare.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (unshare -a11); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (unshare -a11 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a11
+run_strace_match_diff -a11
diff --git a/tests-mx32/userfaultfd.gen.test b/tests-mx32/userfaultfd.gen.test
index 47351466a..61b6988e0 100755
--- a/tests-mx32/userfaultfd.gen.test
+++ b/tests-mx32/userfaultfd.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (userfaultfd -a38); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (userfaultfd -a38 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a38
+run_strace_match_diff -a38
diff --git a/tests-mx32/ustat.gen.test b/tests-mx32/ustat.gen.test
index f64b28d99..2b09f7e9e 100755
--- a/tests-mx32/ustat.gen.test
+++ b/tests-mx32/ustat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ustat -a33); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (ustat -a33 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a33
+run_strace_match_diff -a33
diff --git a/tests-mx32/utime.gen.test b/tests-mx32/utime.gen.test
index 727055669..58ebc5ac8 100755
--- a/tests-mx32/utime.gen.test
+++ b/tests-mx32/utime.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (utime -a16); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (utime -a16 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a16
+run_strace_match_diff -a16
diff --git a/tests-mx32/utimensat.gen.test b/tests-mx32/utimensat.gen.test
index a4d6656e2..07dffa377 100755
--- a/tests-mx32/utimensat.gen.test
+++ b/tests-mx32/utimensat.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (utimensat -a33); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (utimensat -a33 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a33
+run_strace_match_diff -a33
diff --git a/tests-mx32/utimes.gen.test b/tests-mx32/utimes.gen.test
index 37ed29cd8..559243e9b 100755
--- a/tests-mx32/utimes.gen.test
+++ b/tests-mx32/utimes.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (utimes -a17); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (utimes -a17 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a17
+run_strace_match_diff -a17
diff --git a/tests-mx32/vhangup.gen.test b/tests-mx32/vhangup.gen.test
index 7ac84e571..da1921690 100755
--- a/tests-mx32/vhangup.gen.test
+++ b/tests-mx32/vhangup.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (vhangup -a10); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (vhangup -a10 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a10
+run_strace_match_diff -a10
diff --git a/tests-mx32/vmsplice.gen.test b/tests-mx32/vmsplice.gen.test
index fe6a07d3c..0dc18b639 100755
--- a/tests-mx32/vmsplice.gen.test
+++ b/tests-mx32/vmsplice.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (vmsplice -ewrite=1); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (vmsplice -ewrite=1 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -ewrite=1
+run_strace_match_diff -ewrite=1
diff --git a/tests-mx32/wait4.gen.test b/tests-mx32/wait4.gen.test
index ae04915f3..22a982fdb 100755
--- a/tests-mx32/wait4.gen.test
+++ b/tests-mx32/wait4.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (wait4 -esignal=none); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (wait4 -esignal=none ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -esignal=none
+run_strace_match_diff -esignal=none
diff --git a/tests-mx32/waitid.gen.test b/tests-mx32/waitid.gen.test
index 59f40228b..22edd6739 100755
--- a/tests-mx32/waitid.gen.test
+++ b/tests-mx32/waitid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (waitid -esignal=none); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (waitid -esignal=none ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -esignal=none
+run_strace_match_diff -esignal=none
diff --git a/tests-mx32/waitpid.gen.test b/tests-mx32/waitpid.gen.test
index d91e29854..a5678a1ab 100755
--- a/tests-mx32/waitpid.gen.test
+++ b/tests-mx32/waitpid.gen.test
@@ -1,4 +1,4 @@
#!/bin/sh -efu
-# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (waitpid -a28); do not edit.
+# Generated by ./tests/gen_tests.sh from ./tests/gen_tests.in (waitpid -a28 ); do not edit.
. "${srcdir=.}/init.sh"
-run_strace_match_diff -a28
+run_strace_match_diff -a28
diff --git a/tests-mx32/xet_thread_area_x86.c b/tests-mx32/xet_thread_area_x86.c
new file mode 100644
index 000000000..68f495cbe
--- /dev/null
+++ b/tests-mx32/xet_thread_area_x86.c
@@ -0,0 +1,227 @@
+/*
+ * Check decoding of set_thread_area and get_thread_area syscalls on x86
+ * architecture.
+ *
+ * Copyright (c) 2018 The strace developers.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "tests.h"
+
+#include <asm/unistd.h>
+
+#if defined __NR_get_thread_area && defined __NR_set_thread_area \
+ && defined HAVE_STRUCT_USER_DESC
+
+# include <assert.h>
+# include <errno.h>
+# include <stdbool.h>
+# include <stdio.h>
+# include <stdint.h>
+# include <string.h>
+# include <unistd.h>
+
+# include "print_user_desc.c"
+
+long errnum;
+
+static void
+printptr(kernel_ulong_t ptr, const char *ptr_str)
+{
+ if (ptr_str)
+ printf("%s", ptr_str);
+ else
+ printf("%#llx", zero_extend_signed_to_ull(ptr));
+}
+
+/**
+ * Perform set_thread_area call along with printing the expected output.
+ *
+ * @param ptr_val Pointer to thread area argument.
+ * @param ptr_str Explicit string representation of the argument.
+ * @param valid Whether argument points to the valid memory and its contents
+ * should be decoded.
+ * @param entry_number_str explicit decoding of the entry_number field.
+ */
+static long
+set_thread_area(kernel_ulong_t ptr_val, const char *ptr_str, bool valid,
+ const char *entry_number_str)
+{
+ struct user_desc *ptr = (struct user_desc *) (uintptr_t) ptr_val;
+ long rc = -1;
+ int saved_errno;
+
+ rc = syscall(__NR_set_thread_area, ptr_val);
+ saved_errno = errno;
+ printf("set_thread_area(");
+
+ if (valid)
+ print_user_desc(ptr, entry_number_str);
+ else
+ printptr(ptr_val, ptr_str);
+
+ errno = saved_errno;
+ printf(") = %s", sprintrc(rc));
+ if (!rc)
+ printf(" (entry_number=%u)", ptr->entry_number);
+
+ puts("");
+
+ return rc;
+}
+
+/**
+ * Perform get_thread_are call along with printing the expected output and
+ * checking the result against the argument of the previous set_thread_area
+ * call, if it had place.
+ *
+ * @param ptr_val Pointer to thread area argument.
+ * @param ptr_str Explicit string representation of the argument.
+ * @param valid Whether argument points to the valid memory and its contents
+ * should be decoded.
+ * @param set_rc Return code of the previous set_thread_area call.
+ * @param expected The value of the argument passed to the previous
+ * set_thread_area call.
+ */
+static void
+get_thread_area(kernel_ulong_t ptr_val, const char *ptr_str, bool valid,
+ long set_rc, kernel_ulong_t expected)
+{
+ struct user_desc *ptr = (struct user_desc *) (uintptr_t) ptr_val;
+ struct user_desc *expected_ptr =
+ (struct user_desc *) (uintptr_t) expected;
+ int saved_errno;
+ long rc;
+
+ rc = syscall(__NR_get_thread_area, ptr_val);
+ saved_errno = errno;
+
+ printf("get_thread_area(");
+
+ if (valid && !rc) {
+ if (!set_rc) {
+ assert(ptr->entry_number == expected_ptr->entry_number);
+ assert(ptr->base_addr == expected_ptr->base_addr);
+ assert(ptr->limit == expected_ptr->limit);
+ assert(ptr->seg_32bit == expected_ptr->seg_32bit);
+ assert(ptr->contents == expected_ptr->contents);
+ assert(ptr->read_exec_only ==
+ expected_ptr->read_exec_only);
+ assert(ptr->limit_in_pages ==
+ expected_ptr->limit_in_pages);
+ assert(ptr->seg_not_present ==
+ expected_ptr->seg_not_present);
+ assert(ptr->useable == expected_ptr->useable);
+ /*
+ * We do not check lm as 32-bit processes ignore it, and
+ * only 32-bit processes can successfully execute
+ * get_thread_area.
+ */
+ }
+
+ print_user_desc(ptr,
+ (int) ptr->entry_number == -1 ? "-1" : NULL);
+ } else {
+ printptr(ptr_val, ptr_str);
+ }
+
+ errno = saved_errno;
+ printf(") = %s\n", sprintrc(rc));
+}
+
+int main(void)
+{
+ struct user_desc *ta1 = tail_alloc(sizeof(*ta1));
+ struct user_desc *ta2 = tail_alloc(sizeof(*ta2));
+ unsigned *bogus_entry_number = tail_alloc(sizeof(*bogus_entry_number));
+
+ long set_rc = -1;
+
+ /*
+ * Let's do some weird syscall, it will mark the beginning of our
+ * expected output.
+ */
+ syscall(__NR_reboot, 0, 0, 0, 0);
+
+ set_rc = set_thread_area((uintptr_t) ARG_STR(NULL), false, NULL);
+ get_thread_area((uintptr_t) ARG_STR(NULL), false, set_rc,
+ (uintptr_t) NULL);
+
+ set_rc = set_thread_area(-1, NULL, false, NULL);
+ get_thread_area(-1, NULL, false, set_rc, -1);
+
+ fill_memory(ta1, sizeof(*ta1));
+ fill_memory_ex(ta2, sizeof(*ta2), 0xA5, 0x5A);
+
+ set_thread_area((uintptr_t) (ta1 + 1), NULL, false, NULL);
+
+ set_thread_area((uintptr_t) bogus_entry_number, NULL, false, NULL);
+
+ set_thread_area((uintptr_t) ta1, NULL, true, NULL);
+
+ ta1->entry_number = -1;
+ ta1->base_addr = 0;
+ ta1->limit = 0;
+ ta1->contents = 1;
+ ta1->seg_32bit = 1;
+ ta1->seg_not_present = 0;
+
+ set_rc = set_thread_area((uintptr_t) ta1, NULL, true, "-1");
+
+ *bogus_entry_number = 2718281828U;
+ get_thread_area((uintptr_t) bogus_entry_number,
+ "{entry_number=2718281828, ...}",
+ false, set_rc, (uintptr_t) ta1);
+
+ /* That one should return -EFAULT on i386 */
+ *bogus_entry_number = 12;
+ get_thread_area((uintptr_t) bogus_entry_number,
+ "{entry_number=12, ...}",
+ false, set_rc, (uintptr_t) ta1);
+
+ ta2->entry_number = 3141592653U;
+ get_thread_area((uintptr_t) ta2, "{entry_number=3141592653, ...}",
+ false, set_rc, (uintptr_t) ta1);
+
+ ta2->entry_number = -1;
+ get_thread_area((uintptr_t) ta2, "{entry_number=-1, ...}",
+ false, set_rc, (uintptr_t) ta1);
+
+ ta2->entry_number = ta1->entry_number;
+ assert(set_rc == 0 || (int) ta2->entry_number == -1);
+ get_thread_area((uintptr_t) ta2, "{entry_number=-1, ...}",
+ true, set_rc, (uintptr_t) ta1);
+
+ puts("+++ exited with 0 +++");
+
+ return 0;
+}
+
+#else
+
+SKIP_MAIN_UNDEFINED("__NR_get_thread_area && __NR_set_thread_area"
+ " && HAVE_STRUCT_USER_DESC");
+
+#endif
diff --git a/tests-mx32/xet_thread_area_x86.test b/tests-mx32/xet_thread_area_x86.test
new file mode 100755
index 000000000..863f7e21a
--- /dev/null
+++ b/tests-mx32/xet_thread_area_x86.test
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# Check decoding of set_thread_area and get_thread_area syscalls on x86.
+
+. "${srcdir=.}/init.sh"
+
+check_prog sed
+run_prog > /dev/null
+run_strace -a22 -e trace=reboot,/[gs]et_thread_area $args > "$EXP"
+sed '0,/^reboot/d' "$LOG" > "$OUT"
+match_diff "$OUT" "$EXP"
diff --git a/tests-mx32/xselect.c b/tests-mx32/xselect.c
index a25ebcc65..b1e37662f 100644
--- a/tests-mx32/xselect.c
+++ b/tests-mx32/xselect.c
@@ -1,5 +1,7 @@
/*
- * Copyright (c) 2015-2016 Dmitry V. Levin <ldv@altlinux.org>
+ * Check decoding of select/_newselect syscalls.
+ *
+ * Copyright (c) 2015-2018 Dmitry V. Levin <ldv@altlinux.org>
* Copyright (c) 2015-2017 The strace developers.
* All rights reserved.
*
@@ -30,127 +32,442 @@
* Based on test by Dr. David Alan Gilbert <dave@treblig.org>
*/
-#include <assert.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/select.h>
-static fd_set set[0x1000000 / sizeof(fd_set)];
+static const char *errstr;
-int main(void)
+static long
+xselect(const kernel_ulong_t nfds,
+ const kernel_ulong_t rs,
+ const kernel_ulong_t ws,
+ const kernel_ulong_t es,
+ const kernel_ulong_t tv)
+#ifndef xselect
{
- TAIL_ALLOC_OBJECT_CONST_PTR(struct timeval, tv);
- struct timeval tv_in;
- int fds[2];
- long rc;
+ long rc = syscall(TEST_SYSCALL_NR,
+ F8ILL_KULONG_MASK | nfds, rs, ws, es, tv);
+ errstr = sprintrc(rc);
+ return rc;
+}
+#else
+ ;
+#endif
+
+#define XSELECT(expected_, ...) \
+ do { \
+ long rc = xselect(__VA_ARGS__); \
+ if (rc != (expected_)) \
+ perror_msg_and_fail(TEST_SYSCALL_STR \
+ ": expected %d" \
+ ", returned %ld", \
+ (expected_), rc); \
+ } while (0) \
+/* End of XSELECT definition. */
+
+int
+main(void)
+{
+#ifdef PATH_TRACING_FD
+ skip_if_unavailable("/proc/self/fd/");
+#endif
+
+ for (int i = 3; i < FD_SETSIZE; ++i) {
+#ifdef PATH_TRACING_FD
+ if (i == PATH_TRACING_FD)
+ continue;
+#endif
+ (void) close(i);
+ }
+ int fds[2];
if (pipe(fds))
perror_msg_and_fail("pipe");
+ static const int smallset_size = sizeof(kernel_ulong_t) * 8;
+ const int nfds = fds[1] + 1;
+ if (nfds > smallset_size)
+ error_msg_and_fail("nfds[%d] > smallset_size[%d]\n",
+ nfds, smallset_size);
+
+ struct timeval tv_in = { 0, 123 };
+ struct timeval *const tv = tail_memdup(&tv_in, sizeof(tv_in));
+ const uintptr_t a_tv = (uintptr_t) tv;
+
+ TAIL_ALLOC_OBJECT_VAR_PTR(kernel_ulong_t, l_rs);
+ fd_set *const rs = (void *) l_rs;
+ const uintptr_t a_rs = (uintptr_t) rs;
+
+ TAIL_ALLOC_OBJECT_VAR_PTR(kernel_ulong_t, l_ws);
+ fd_set *const ws = (void *) l_ws;
+ const uintptr_t a_ws = (uintptr_t) ws;
+
+ TAIL_ALLOC_OBJECT_VAR_PTR(kernel_ulong_t, l_es);
+ fd_set *const es = (void *) l_es;
+ const uintptr_t a_es = (uintptr_t) es;
+
+ long rc;
+
/*
- * Start with a nice simple select.
+ * An equivalent of nanosleep.
*/
- FD_ZERO(set);
- FD_SET(fds[0], set);
- FD_SET(fds[1], set);
- rc = syscall(TEST_SYSCALL_NR, fds[1] + 1, set, set, set, NULL);
- if (rc < 0)
- perror_msg_and_skip(TEST_SYSCALL_STR);
- assert(rc == 1);
- printf("%s(%d, [%d %d], [%d %d], [%d %d], NULL) = 1 ()\n",
- TEST_SYSCALL_STR, fds[1] + 1, fds[0], fds[1],
- fds[0], fds[1], fds[0], fds[1]);
+ if (xselect(0, 0, 0, 0, a_tv)) {
+ if (errno == ENOSYS)
+ perror_msg_and_skip(TEST_SYSCALL_STR);
+ else
+ perror_msg_and_fail(TEST_SYSCALL_STR);
+ }
+#ifndef PATH_TRACING_FD
+ printf("%s(0, NULL, NULL, NULL, {tv_sec=%lld, tv_usec=%llu})"
+ " = 0 (Timeout)\n",
+ TEST_SYSCALL_STR, (long long) tv_in.tv_sec,
+ zero_extend_signed_to_ull(tv_in.tv_usec));
+#endif
+
+ /* EFAULT on tv argument */
+ XSELECT(-1, 0, 0, 0, 0, a_tv + 1);
+#ifndef PATH_TRACING_FD
+ printf("%s(0, NULL, NULL, NULL, %#lx) = %s\n",
+ TEST_SYSCALL_STR, (unsigned long) a_tv + 1, errstr);
+#endif
+
+ /*
+ * Start with a nice simple select with the same set.
+ */
+ for (int i = nfds; i <= smallset_size; ++i) {
+ *l_rs = (1UL << fds[0]) | (1UL << fds[1]);
+ XSELECT(1, i, a_rs, a_rs, a_rs, 0);
+#ifndef PATH_TRACING_FD
+ printf("%s(%d, [%d %d], [%d %d], [%d %d], NULL) = 1 ()\n",
+ TEST_SYSCALL_STR, i, fds[0], fds[1],
+ fds[0], fds[1], fds[0], fds[1]);
+#else
+ *l_rs = (1UL << fds[0]) | (1UL << fds[1]) |
+ (1UL << PATH_TRACING_FD);
+ XSELECT(i > PATH_TRACING_FD ? 3 : 1, i, a_rs, a_rs, a_rs, 0);
+ if (i > PATH_TRACING_FD) {
+ printf("%s(%d, [%d %d %d], [%d %d %d], [%d %d %d]"
+ ", NULL) = 3 ()\n",
+ TEST_SYSCALL_STR, i,
+ fds[0], fds[1], PATH_TRACING_FD,
+ fds[0], fds[1], PATH_TRACING_FD,
+ fds[0], fds[1], PATH_TRACING_FD);
+ }
+#endif
+ }
/*
* Odd timeout.
*/
- FD_SET(fds[0], set);
- FD_SET(fds[1], set);
- tv->tv_sec = 0xdeadbeefU;
- tv->tv_usec = 0xfacefeedU;
- memcpy(&tv_in, tv, sizeof(tv_in));
- rc = syscall(TEST_SYSCALL_NR, fds[1] + 1, set, set, set, tv);
+ *l_rs = (1UL << fds[0]) | (1UL << fds[1]);
+ tv_in.tv_sec = 0xdeadbeefU;
+ tv_in.tv_usec = 0xfacefeedU;
+ memcpy(tv, &tv_in, sizeof(tv_in));
+ rc = xselect(nfds, a_rs, a_rs, a_rs, a_tv);
if (rc < 0) {
+#ifndef PATH_TRACING_FD
printf("%s(%d, [%d %d], [%d %d], [%d %d]"
", {tv_sec=%lld, tv_usec=%llu}) = %s\n",
- TEST_SYSCALL_STR, fds[1] + 1, fds[0], fds[1],
- fds[0], fds[1], fds[0], fds[1], (long long) tv->tv_sec,
- zero_extend_signed_to_ull(tv->tv_usec), sprintrc(rc));
+ TEST_SYSCALL_STR, nfds, fds[0], fds[1],
+ fds[0], fds[1], fds[0], fds[1],
+ (long long) tv_in.tv_sec,
+ zero_extend_signed_to_ull(tv_in.tv_usec),
+ errstr);
+#endif /* !PATH_TRACING_FD */
} else {
+#ifndef PATH_TRACING_FD
printf("%s(%d, [%d %d], [%d %d], [%d %d]"
", {tv_sec=%lld, tv_usec=%llu}) = %ld"
" (left {tv_sec=%lld, tv_usec=%llu})\n",
- TEST_SYSCALL_STR, fds[1] + 1, fds[0], fds[1],
- fds[0], fds[1], fds[0], fds[1], (long long) tv_in.tv_sec,
+ TEST_SYSCALL_STR, nfds, fds[0], fds[1],
+ fds[0], fds[1], fds[0], fds[1],
+ (long long) tv_in.tv_sec,
zero_extend_signed_to_ull(tv_in.tv_usec),
rc, (long long) tv->tv_sec,
zero_extend_signed_to_ull(tv->tv_usec));
+#endif /* !PATH_TRACING_FD */
}
- FD_SET(fds[0], set);
- FD_SET(fds[1], set);
- tv->tv_sec = (time_t) 0xcafef00ddeadbeefLL;
- tv->tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
- memcpy(&tv_in, tv, sizeof(tv_in));
- rc = syscall(TEST_SYSCALL_NR, fds[1] + 1, set, set, set, tv);
+ /*
+ * Very odd timeout.
+ */
+ *l_rs = (1UL << fds[0]) | (1UL << fds[1]);
+ tv_in.tv_sec = (time_t) 0xcafef00ddeadbeefLL;
+ tv_in.tv_usec = (suseconds_t) 0xbadc0dedfacefeedLL;
+ memcpy(tv, &tv_in, sizeof(tv_in));
+ rc = xselect(nfds, a_rs, a_rs, a_rs, a_tv);
if (rc < 0) {
+#ifndef PATH_TRACING_FD
printf("%s(%d, [%d %d], [%d %d], [%d %d]"
", {tv_sec=%lld, tv_usec=%llu}) = %s\n",
- TEST_SYSCALL_STR, fds[1] + 1, fds[0], fds[1],
- fds[0], fds[1], fds[0], fds[1], (long long) tv->tv_sec,
- zero_extend_signed_to_ull(tv->tv_usec), sprintrc(rc));
+ TEST_SYSCALL_STR, nfds, fds[0], fds[1],
+ fds[0], fds[1], fds[0], fds[1],
+ (long long) tv_in.tv_sec,
+ zero_extend_signed_to_ull(tv_in.tv_usec),
+ errstr);
+#endif /* PATH_TRACING_FD */
} else {
+#ifndef PATH_TRACING_FD
printf("%s(%d, [%d %d], [%d %d], [%d %d]"
", {tv_sec=%lld, tv_usec=%llu}) = %ld"
" (left {tv_sec=%lld, tv_usec=%llu})\n",
- TEST_SYSCALL_STR, fds[1] + 1, fds[0], fds[1],
- fds[0], fds[1], fds[0], fds[1], (long long) tv_in.tv_sec,
+ TEST_SYSCALL_STR, nfds, fds[0], fds[1],
+ fds[0], fds[1], fds[0], fds[1],
+ (long long) tv_in.tv_sec,
zero_extend_signed_to_ull(tv_in.tv_usec),
rc, (long long) tv->tv_sec,
zero_extend_signed_to_ull(tv->tv_usec));
+#endif /* PATH_TRACING_FD */
}
/*
* Another simple one, with a timeout.
*/
- FD_SET(1, set);
- FD_SET(2, set);
- FD_SET(fds[0], set);
- FD_SET(fds[1], set);
- tv->tv_sec = 0xc0de1;
- tv->tv_usec = 0xc0de2;
- memcpy(&tv_in, tv, sizeof(tv_in));
- assert(syscall(TEST_SYSCALL_NR, fds[1] + 1, NULL, set, NULL, tv) == 3);
- printf("%s(%d, NULL, [1 2 %d %d], NULL, {tv_sec=%lld, tv_usec=%llu})"
- " = 3 (out [1 2 %d], left {tv_sec=%lld, tv_usec=%llu})\n",
- TEST_SYSCALL_STR, fds[1] + 1, fds[0], fds[1],
- (long long) tv_in.tv_sec,
- zero_extend_signed_to_ull(tv_in.tv_usec),
- fds[1],
- (long long) tv->tv_sec,
- zero_extend_signed_to_ull(tv->tv_usec));
+ for (int i = nfds; i <= smallset_size; ++i) {
+ *l_rs = (1UL << fds[0]) | (1UL << fds[1]);
+ *l_ws = (1UL << 1) | (1UL << 2) |
+ (1UL << fds[0]) | (1UL << fds[1]);
+ *l_es = 0;
+ tv_in.tv_sec = 0xc0de1;
+ tv_in.tv_usec = 0xc0de2;
+ memcpy(tv, &tv_in, sizeof(tv_in));
+ XSELECT(3, i, a_rs, a_ws, a_es, a_tv);
+#ifndef PATH_TRACING_FD
+ printf("%s(%d, [%d %d], [%d %d %d %d], []"
+ ", {tv_sec=%lld, tv_usec=%llu}) = 3 (out [1 2 %d]"
+ ", left {tv_sec=%lld, tv_usec=%llu})\n",
+ TEST_SYSCALL_STR, i, fds[0], fds[1],
+ 1, 2, fds[0], fds[1],
+ (long long) tv_in.tv_sec,
+ zero_extend_signed_to_ull(tv_in.tv_usec),
+ fds[1],
+ (long long) tv->tv_sec,
+ zero_extend_signed_to_ull(tv->tv_usec));
+#else
+ *l_rs = (1UL << fds[0]) | (1UL << fds[1]) |
+ (1UL << PATH_TRACING_FD);
+ *l_ws = (1UL << 1) | (1UL << 2) |
+ (1UL << fds[0]) | (1UL << fds[1]);
+ tv_in.tv_sec = 0xc0de1;
+ tv_in.tv_usec = 0xc0de2;
+ memcpy(tv, &tv_in, sizeof(tv_in));
+ XSELECT(3 + (i > PATH_TRACING_FD), i, a_rs, a_ws, a_es, a_tv);
+ if (i > PATH_TRACING_FD) {
+ printf("%s(%d, [%d %d %d], [%d %d %d %d], []"
+ ", {tv_sec=%lld, tv_usec=%llu})"
+ " = 4 (in [%d], out [1 2 %d]"
+ ", left {tv_sec=%lld, tv_usec=%llu})\n",
+ TEST_SYSCALL_STR, i,
+ fds[0], fds[1], PATH_TRACING_FD,
+ 1, 2, fds[0], fds[1],
+ (long long) tv_in.tv_sec,
+ zero_extend_signed_to_ull(tv_in.tv_usec),
+ PATH_TRACING_FD, fds[1],
+ (long long) tv->tv_sec,
+ zero_extend_signed_to_ull(tv->tv_usec));
+ }
+
+ *l_rs = (1UL << fds[0]) | (1UL << fds[1]);
+ *l_ws = (1UL << 1) | (1UL << 2) |
+ (1UL << fds[0]) | (1UL << fds[1]) |
+ (1UL << PATH_TRACING_FD);
+ tv_in.tv_sec = 0xc0de1;
+ tv_in.tv_usec = 0xc0de2;
+ memcpy(tv, &tv_in, sizeof(tv_in));
+ XSELECT(3 + (i > PATH_TRACING_FD), i, a_rs, a_ws, a_es, a_tv);
+ if (i > PATH_TRACING_FD) {
+ printf("%s(%d, [%d %d], [%d %d %d %d %d], []"
+ ", {tv_sec=%lld, tv_usec=%llu})"
+ " = 4 (out [1 2 %d %d]"
+ ", left {tv_sec=%lld, tv_usec=%llu})\n",
+ TEST_SYSCALL_STR, i,
+ fds[0], fds[1],
+ 1, 2, fds[0], fds[1], PATH_TRACING_FD,
+ (long long) tv_in.tv_sec,
+ zero_extend_signed_to_ull(tv_in.tv_usec),
+ fds[1], PATH_TRACING_FD,
+ (long long) tv->tv_sec,
+ zero_extend_signed_to_ull(tv->tv_usec));
+ }
+
+ *l_rs = (1UL << fds[0]) | (1UL << fds[1]);
+ *l_ws = (1UL << 1) | (1UL << 2) |
+ (1UL << fds[0]) | (1UL << fds[1]);
+ *l_es = (1UL << PATH_TRACING_FD);
+ tv_in.tv_sec = 0xc0de1;
+ tv_in.tv_usec = 0xc0de2;
+ memcpy(tv, &tv_in, sizeof(tv_in));
+ XSELECT(3, i, a_rs, a_ws, a_es, a_tv);
+ if (i > PATH_TRACING_FD) {
+ printf("%s(%d, [%d %d], [%d %d %d %d], [%d]"
+ ", {tv_sec=%lld, tv_usec=%llu}) = 3 (out [1 2 %d]"
+ ", left {tv_sec=%lld, tv_usec=%llu})\n",
+ TEST_SYSCALL_STR, i,
+ fds[0], fds[1],
+ 1, 2, fds[0], fds[1], PATH_TRACING_FD,
+ (long long) tv_in.tv_sec,
+ zero_extend_signed_to_ull(tv_in.tv_usec),
+ fds[1],
+ (long long) tv->tv_sec,
+ zero_extend_signed_to_ull(tv->tv_usec));
+ }
+
+#endif /* PATH_TRACING_FD */
+ }
/*
* Now the crash case that trinity found, negative nfds
* but with a pointer to a large chunk of valid memory.
*/
- FD_ZERO(set);
+ static fd_set set[0x1000000 / sizeof(fd_set)];
FD_SET(fds[1], set);
- assert(syscall(TEST_SYSCALL_NR, -1, NULL, set, NULL, NULL) == -1);
- printf("%s(-1, NULL, %p, NULL, NULL) = -1 EINVAL (%m)\n",
- TEST_SYSCALL_STR, set);
+ XSELECT(-1, -1U, 0, (uintptr_t) set, 0, 0);
+#ifndef PATH_TRACING_FD
+ printf("%s(-1, NULL, %p, NULL, NULL) = %s\n",
+ TEST_SYSCALL_STR, set, errstr);
+#endif
/*
- * Another variant, with nfds exceeding FD_SETSIZE limit.
+ * Big sets, nfds exceeds FD_SETSIZE limit.
*/
- FD_ZERO(set);
+ const size_t big_size = sizeof(fd_set) + sizeof(long);
+ fd_set *const big_rs = tail_alloc(big_size);
+ const uintptr_t a_big_rs = (uintptr_t) big_rs;
+
+ fd_set *const big_ws = tail_alloc(big_size);
+ const uintptr_t a_big_ws = (uintptr_t) big_ws;
+
+ for (unsigned int i = FD_SETSIZE; i <= big_size * 8; ++i) {
+ memset(big_rs, 0, big_size);
+ memset(big_ws, 0, big_size);
+ FD_SET(fds[0], big_rs);
+ tv->tv_sec = 0;
+ tv->tv_usec = 10 + (i - FD_SETSIZE);
+ XSELECT(0, i, a_big_rs, a_big_ws, 0, a_tv);
+#ifndef PATH_TRACING_FD
+ printf("%s(%d, [%d], [], NULL, {tv_sec=0, tv_usec=%d})"
+ " = 0 (Timeout)\n",
+ TEST_SYSCALL_STR, i, fds[0], 10 + (i - FD_SETSIZE));
+#else
+ FD_SET(fds[0], big_rs);
+ FD_SET(PATH_TRACING_FD, big_rs);
+ tv->tv_sec = 0;
+ tv->tv_usec = 10 + (i - FD_SETSIZE);
+ XSELECT(1, i, a_big_rs, a_big_ws, 0, a_tv);
+ printf("%s(%d, [%d %d], [], NULL, {tv_sec=0, tv_usec=%d})"
+ " = 1 (in [%d], left {tv_sec=0, tv_usec=%llu})\n",
+ TEST_SYSCALL_STR, i, fds[0], PATH_TRACING_FD,
+ 10 + (i - FD_SETSIZE), PATH_TRACING_FD,
+ zero_extend_signed_to_ull(tv->tv_usec));
+#endif /* PATH_TRACING_FD */
+ }
+
+ /*
+ * Huge sets, nfds equals to INT_MAX.
+ */
+ FD_SET(fds[0], set);
+ FD_SET(fds[1], set);
+ tv->tv_sec = 0;
+ tv->tv_usec = 123;
+ XSELECT(0, INT_MAX, (uintptr_t) set, (uintptr_t) &set[1],
+ (uintptr_t) &set[2], a_tv);
+#ifndef PATH_TRACING_FD
+ printf("%s(%d, [%d %d], [], [], {tv_sec=0, tv_usec=123})"
+ " = 0 (Timeout)\n",
+ TEST_SYSCALL_STR, INT_MAX, fds[0], fds[1]);
+#else
FD_SET(fds[0], set);
+ FD_SET(fds[1], set);
+ FD_SET(PATH_TRACING_FD, set);
tv->tv_sec = 0;
tv->tv_usec = 123;
- assert(syscall(TEST_SYSCALL_NR, FD_SETSIZE + 1, set, set + 1, NULL, tv) == 0);
- printf("%s(%d, [%d], [], NULL, {tv_sec=0, tv_usec=123}) = 0 (Timeout)\n",
- TEST_SYSCALL_STR, FD_SETSIZE + 1, fds[0]);
+ XSELECT(1, INT_MAX, (uintptr_t) set, (uintptr_t) &set[1],
+ (uintptr_t) &set[2], a_tv);
+ printf("%s(%d, [%d %d %d], [], [], {tv_sec=0, tv_usec=123})"
+ " = 1 (in [%d], left {tv_sec=0, tv_usec=%llu})\n",
+ TEST_SYSCALL_STR, INT_MAX, fds[0], fds[1], PATH_TRACING_FD,
+ PATH_TRACING_FD, zero_extend_signed_to_ull(tv->tv_usec));
+#endif /* PATH_TRACING_FD */
+
+ /*
+ * Small sets, nfds exceeds FD_SETSIZE limit.
+ * The kernel seems to be fine with it but strace cannot follow.
+ */
+ *l_rs = (1UL << fds[0]) | (1UL << fds[1])
+#ifdef PATH_TRACING_FD
+ | (1UL << PATH_TRACING_FD)
+#endif
+ ;
+ *l_ws = (1UL << fds[0]);
+ *l_es = (1UL << fds[0]) | (1UL << fds[1])
+#ifdef PATH_TRACING_FD
+ | (1UL << PATH_TRACING_FD)
+#endif
+ ;
+ tv->tv_sec = 0;
+ tv->tv_usec = 123;
+ rc = xselect(FD_SETSIZE + 1, a_rs, a_ws, a_es, a_tv);
+ if (rc < 0) {
+#ifndef PATH_TRACING_FD
+ printf("%s(%d, %p, %p, %p, {tv_sec=0, tv_usec=123}) = %s\n",
+ TEST_SYSCALL_STR, FD_SETSIZE + 1, rs, ws, es, errstr);
+#endif
+ } else {
+#ifndef PATH_TRACING_FD
+ printf("%s(%d, %p, %p, %p, {tv_sec=0, tv_usec=123})"
+ " = 0 (Timeout)\n",
+ TEST_SYSCALL_STR, FD_SETSIZE + 1, rs, ws, es);
+#endif
+ }
+
+ /*
+ * Small sets, one of allocated descriptors exceeds smallset_size.
+ */
+ if (dup2(fds[1], smallset_size) != smallset_size)
+ perror_msg_and_fail("dup2");
+#ifdef PATH_TRACING_FD
+ FD_SET(PATH_TRACING_FD, rs);
+ FD_SET(PATH_TRACING_FD, ws);
+ FD_SET(PATH_TRACING_FD, es);
+#endif
+ XSELECT(-1, smallset_size + 1, a_rs, a_ws, a_es, 0);
+#ifndef PATH_TRACING_FD
+ printf("%s(%d, %p, %p, %p, NULL) = %s\n",
+ TEST_SYSCALL_STR, smallset_size + 1, rs, ws, es, errstr);
+#endif
+
+ /*
+ * Small and big sets,
+ * one of allocated descriptors exceeds smallset_size.
+ */
+ memset(big_rs, 0, big_size);
+ FD_SET(fds[0], big_rs);
+ FD_SET(smallset_size, big_rs);
+ memset(big_ws, 0, big_size);
+ FD_SET(fds[1], big_ws);
+ FD_SET(smallset_size, big_ws);
+ XSELECT(-1, smallset_size + 1, a_big_rs, a_big_ws, a_es, 0);
+#ifndef PATH_TRACING_FD
+ printf("%s(%d, [%d %d], [%d %d], %p, NULL) = %s\n",
+ TEST_SYSCALL_STR, smallset_size + 1,
+ fds[0], smallset_size,
+ fds[1], smallset_size,
+ es, errstr);
+#endif /* !PATH_TRACING_FD */
+ XSELECT(-1, smallset_size + 1, a_es, a_big_ws, a_big_rs, 0);
+#ifndef PATH_TRACING_FD
+ printf("%s(%d, %p, [%d %d], [%d %d], NULL) = %s\n",
+ TEST_SYSCALL_STR, smallset_size + 1,
+ es,
+ fds[1], smallset_size,
+ fds[0], smallset_size,
+ errstr);
+#endif /* !PATH_TRACING_FD */
puts("+++ exited with 0 +++");
return 0;