diff options
author | Elliott Hughes <enh@google.com> | 2018-02-20 17:03:16 -0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2018-02-20 17:06:23 -0800 |
commit | b755614143ce6aab5265ed32c1bb6c8f748e7898 (patch) | |
tree | 4b0da9dce35635a264d079fb8ef8b27a16430c29 /tests-mx32 | |
parent | f174ca62c552149d51472717a480e2a571885b9a (diff) | |
download | strace-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')
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, ®s); + 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, ®ion); + 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; |