]> granicus.if.org Git - strace/log
strace
7 years agoPrint timeval pair as an array of timeval entries
Eugene Syromyatnikov [Sun, 27 Nov 2016 20:24:12 +0000 (23:24 +0300)]
Print timeval pair as an array of timeval entries

* print_timeval.c (print_timeval_item): New function.
(print_timeval_pair): Use it as a print_function in print_array call.
* tests/futimesat.c (main): Update to test new behaviour.
* tests/utimes.c (main): Likewise.

7 years agotests: treat tv_sec/tv_usec as signed types in futimesat and utimes tests
Eugene Syromyatnikov [Sun, 27 Nov 2016 15:46:31 +0000 (18:46 +0300)]
tests: treat tv_sec/tv_usec as signed types in futimesat and utimes tests

* tests/futimesat.c: Print tv_sec and tv_usec fields as signed types.
* tests/utimes.c: Likewise.

7 years agoalpha: print struct timeval32 consistently
Dmitry V. Levin [Mon, 28 Nov 2016 04:21:11 +0000 (04:21 +0000)]
alpha: print struct timeval32 consistently

* defs.h [ALPHA] (timeval32_t): New type.
[ALPHA] (print_timeval32_t): New prototype.
* print_timeval.c [ALPHA] (timeval32_t): Remove.
[ALPHA] (print_timeval32_t): Remove static keyword.
* printrusage.c [ALPHA] (printrusage32): Use timeval32_t instead
of local definition of struct timeval32.  Use print_timeval32_t.

7 years agoPrint struct timeval consistently
Dmitry V. Levin [Mon, 28 Nov 2016 04:07:37 +0000 (04:07 +0000)]
Print struct timeval consistently

Use print_struct_timeval interface to print struct timeval.

* print_timeval.c (print_struct_timeval): New mpers printer.
* print_timex.c (print_timex): Use it.
* printrusage.c (printrusage): Likewise.
* v4l2.c (print_v4l2_buffer): Likewise.
* tests/getrusage.c (main): Print tv_sec and tv_usec fields as signed.
* tests/waitid.c (sprint_rusage): Likewise.

Suggested-by: Eugene Syromyatnikov <evgsyr@gmail.com>
7 years agoSplit print_time.c
Dmitry V. Levin [Mon, 28 Nov 2016 02:45:13 +0000 (02:45 +0000)]
Split print_time.c

After commit v4.14-136-g151d1d1 that removed the last object common
for timespec and timeval parsers there is no need to keep them all
in a single file.

* print_timespec.c: New file.
* print_timeval.c: Likewise.
* Makefile.am (strace_SOURCES): Add them.
* print_time.c: Move all timespec related code to print_timespec.c.
Move all timeval related code to print_timeval.c.

7 years agotests: check decoding of threads when a non-leader thread invokes execve
Dmitry V. Levin [Mon, 28 Nov 2016 00:31:59 +0000 (00:31 +0000)]
tests: check decoding of threads when a non-leader thread invokes execve

* tests/threads-execve.c: New file.
* tests/threads-execve.test: New test.
* tests/.gitignore: Add threads-execve.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(threads_execve_LDADD): New variable.
(MISC_TESTS): Add threads-execve.test.

7 years agotests: check decoding of fault injected exit_group syscall
Dmitry V. Levin [Sun, 27 Nov 2016 00:02:18 +0000 (00:02 +0000)]
tests: check decoding of fault injected exit_group syscall

* tests/answer.c: New file.
* tests/fault_injection-exit_group.expected: Likewise.
* tests/fault_injection-exit_group.test: New test.
* tests/.gitignore: Add answer.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add fault_injection-exit_group.test.
(EXTRA_DIST): Add fault_injection-exit_group.expected.

7 years agoSet PTRACE_O_TRACEEXIT option and handle PTRACE_EVENT_EXIT events
Dmitry V. Levin [Sat, 26 Nov 2016 23:45:05 +0000 (23:45 +0000)]
Set PTRACE_O_TRACEEXIT option and handle PTRACE_EVENT_EXIT events

Do not assume that some syscalls do not generate syscall-exit-stops.
When syscalls fail for any reason they may generate syscall-exit-stops.

The solution is to wait for an actual exit reported by PTRACE_EVENT_EXIT
and print the end of unfinished exiting syscall properly.

* exit.c: Remove.
* Makefile.am (strace_SOURCES): Remove exit.c.
* linux/dummy.h (sys_exit): Alias to printargs_d.
* strace.c (ptrace_setoptions): Add PTRACE_O_TRACEEXIT bit.
(print_event_exit): New function.
(trace): Use it in case of PTRACE_EVENT_EXIT.
* syscall.c (trace_syscall_entering): Remove special handling
of SEN_exit.

7 years agoChange printargs to return RVAL_DECODED
Dmitry V. Levin [Sun, 27 Nov 2016 14:19:09 +0000 (14:19 +0000)]
Change printargs to return RVAL_DECODED

As printargs is invoked as a generic syscall decoder only and
it is not supposed to print anything on exiting, change printargs
to return RVAL_DECODED so it would not be called on exiting at all.

* util.c (printargs): Print args unconditionally, return RVAL_DECODED.

7 years agoEnhance error diagnostics of exit/exit_group decoder
Dmitry V. Levin [Sat, 26 Nov 2016 20:51:52 +0000 (20:51 +0000)]
Enhance error diagnostics of exit/exit_group decoder

* exit.c (SYS_FUNC(exit)): Print the name of syscall that has returned.

7 years agoRestrain from fault injection while the trace executes strace code
Dmitry V. Levin [Sat, 26 Nov 2016 18:30:26 +0000 (18:30 +0000)]
Restrain from fault injection while the trace executes strace code

There is little use in injections of faults into syscalls made by strace.

* syscall.c (trace_syscall_entering): Clear QUAL_FAULT bit from
tcp->qual_flg when tcp->flags has TCB_HIDE_LOG bit set.

7 years agoMove two global flags to tracee scope
Dmitry V. Levin [Sat, 26 Nov 2016 18:08:01 +0000 (18:08 +0000)]
Move two global flags to tracee scope

A simultaneous use of -p option and tracing of a command available
since commit v4.11-183-gfa8c286 introduces a race condition because
the flags whether the first exec has happened are global.

Fix the race by moving hide_log_until_execve and hide_log_until_execve
global variables to TCB_HIDE_LOG and TCB_SKIP_DETACH_ON_FIRST_EXEC bits
in struct tcb.flags, correspondingly.

* defs.h (TCB_HIDE_LOG, TCB_SKIP_DETACH_ON_FIRST_EXEC, hide_log):
New macros.
(hide_log_until_execve): Remove prototype.
* strace.c (skip_one_b_execve, hide_log_until_execve): Remove.
(startup_child): Set TCB_HIDE_LOG and TCB_SKIP_DETACH_ON_FIRST_EXEC bits
in the allocated tcb structure.
(init): Remove initialization of hide_log_until_execve and
skip_one_b_execve.
(print_stopped): Use hide_log() instead of hide_log_until_execve.
(trace): Check and clear TCB_SKIP_DETACH_ON_FIRST_EXEC flag instead
of skip_one_b_execve.
* syscall.c (trace_syscall_entering): Clear TCB_HIDE_LOG flag instead of
hide_log_until_execve.
(trace_syscall_entering, trace_syscall_exiting): Check hide_log()
instead of hide_log_until_execve.

7 years agoTreat execveat as an execve family syscall
Dmitry V. Levin [Sat, 26 Nov 2016 16:08:10 +0000 (16:08 +0000)]
Treat execveat as an execve family syscall

* syscall.c (trace_syscall_entering): Clear hide_log_until_execve flag
also when SEN_execveat is encountered.

7 years agoChange parser of fault expressions to conform the documentation
Dmitry V. Levin [Fri, 25 Nov 2016 23:47:32 +0000 (23:47 +0000)]
Change parser of fault expressions to conform the documentation

Make expressions like fault=SYSCALL1,SYSCALL2:error=EPERM work
as documented, i.e. fail both SYSCALL1 and SYSCALL2 with EPERM.

* syscall.c (parse_fault_expression): Remove const qualifier from
"name" and "token: variables, as well as from the return value.
(qual_fault): Remove const qualifier from "name" variables.
Split "name" into comma delimited tokens and pass each token
to individual qual_syscall_ex call.
(qualify): For QUAL_FAULT options, pass the whole option value
to their qualify methods without prior splitting into comma
delimited tokens.
* tests/fault_injection.test: Check it.
* tests/fault_syntax.test: Check empty syscall sets.

7 years agoSimplify parse_fault_expression
Dmitry V. Levin [Thu, 24 Nov 2016 21:35:05 +0000 (21:35 +0000)]
Simplify parse_fault_expression

* syscall.c (parse_fault_expression): Rewrite iterator over strtok_r
in a more concise way.

7 years agoFix omission of field names in printers of timeval structure
Eugene Syromyatnikov [Thu, 24 Nov 2016 21:48:00 +0000 (00:48 +0300)]
Fix omission of field names in printers of timeval structure

* print_time.c (time_fmt): Remove.
(timeval_fmt): New constant.
(print_timeval_t, sprint_timeval, print_timeval32_t, sprint_timeval32):
Use it instead of time_fmt.
* print_timex.c (print_timex): Print field names of the time field.
* printrusage.c (printrusage, printrusage32): Print field names
of ru_utime and ru_stime fields.
* tests/adjtimex.c (main): Add field names to expected output.
* tests/clock_nanosleep.c (main): Likewise.
* tests/futimesat.c (main): Likewise.
* tests/getrusage.c (main): Likewise.
* tests/nanosleep.c (main): Likewise.
* tests/oldselect.expected: Likewise.
* tests/utimes.c (main): Likewise.
* tests/wait4.c (sprint_rusage): Likewise.
* tests/waitid.c (sprint_rusage): Likewise.
* tests/xetitimer.c (main): Likewise.
* tests/xettimeofday.c (main): Likewise.
* tests/xselect.c (main): Likewise.

7 years agoFix omission of field names in printers of timespec structure
Eugene Syromyatnikov [Thu, 24 Nov 2016 21:48:00 +0000 (00:48 +0300)]
Fix omission of field names in printers of timespec structure

* print_time.c (timespec_fmt): New constant.
(print_timespec_t, sprint_timespec): Use it instead of time_fmt.
* tests/aio.c: Add field names to expected output.
* tests/clock_nanosleep.c (main): Likewise.
* tests/clock_xettime.c (main): Likewise.
* tests/futex.c (main): Likewise.
* tests/mq_sendrecv.c (do_send, do_recv): Likewise.
* tests/nanosleep.c (main): Likewise.
* tests/ppoll-v.expected: Likewise.
* tests/ppoll.expected: Likewise.
* tests/pselect6.c (main): Likewise.
* tests/recvmmsg-timeout.c (main): Likewise.
* tests/restart_syscall.c (main): Likewise.
* tests/rt_sigtimedwait.c (iterate, main): Likewise.
* tests/sched_rr_get_interval.c (main): Likewise.
* tests/semop.c (main): Likewise.
* tests/strace-T.expected: Likewise.
* tests/timer_xettime.c (main): Likewise.
* tests/timerfd_xettime.c (main): Likewise.
* tests/utimensat.c (print_ts): Likewise.

7 years agotests: robustify prctl-name.test against unrelated prctl invocations
Dmitry V. Levin [Wed, 23 Nov 2016 00:38:03 +0000 (00:38 +0000)]
tests: robustify prctl-name.test against unrelated prctl invocations

* tests/prctl-name.test: Filter out unrelated PR_GET_* prctl calls.

7 years agotests: cleanup prctl-name.c
Dmitry V. Levin [Tue, 22 Nov 2016 01:46:07 +0000 (01:46 +0000)]
tests: cleanup prctl-name.c

* tests/prctl-name.c (main): Remove "len" variable, rename "len1"
to "len".  Remove "name1" variable, use "name" instead.

7 years agoMove KVM_* ioctl entries from ioctls_inc*.h to ioctls_arch*.h
Dmitry V. Levin [Mon, 21 Nov 2016 19:44:14 +0000 (19:44 +0000)]
Move KVM_* ioctl entries from ioctls_inc*.h to ioctls_arch*.h

* linux/32/ioctls_inc_align32.h: Regenerate.
* linux/32/ioctls_inc_align64.h: Likewise.
* linux/64/ioctls_inc.h: Likewise.
* linux/arm/ioctls_arch0.h: Likewise.
* linux/i386/ioctls_arch0.h: Likewise.
* linux/powerpc/ioctls_arch0.h: Likewise.
* linux/s390/ioctls_arch0.h: Likewise.
* linux/s390x/ioctls_arch0.h: Likewise.
* linux/x32/ioctls_inc0.h: Likewise.
* linux/x86_64/ioctls_arch0.h: Likewise.

7 years agomaint: add more workarounds for alpha and powerpc
Dmitry V. Levin [Tue, 22 Nov 2016 00:20:49 +0000 (00:20 +0000)]
maint: add more workarounds for alpha and powerpc

* maint/ioctls_sym.sh: Skip asm/core_*.h.  Filter out from
asm-generic/ioctls.h those macros that are defined using unavailable
struct termios2 on alpha and powerpc.

7 years agoAdd ioctl definitions for 16-bit alignment
Andreas Schwab [Sat, 12 Nov 2016 14:58:26 +0000 (15:58 +0100)]
Add ioctl definitions for 16-bit alignment

* Makefile.am (EXTRA_DIST): Add linux/32/ioctls_inc_align16.h.
* linux/32/ioctls_inc_align16.h: New file.
* linux/32/ioctls_inc.h [M68K]: Include it.

7 years agomaint: move KVM_* constants from ioctls_inc.h to ioctls_arch.h
Dmitry V. Levin [Mon, 21 Nov 2016 16:23:14 +0000 (16:23 +0000)]
maint: move KVM_* constants from ioctls_inc.h to ioctls_arch.h

* maint/ioctls_gen.sh: Place constants defined in linux/kvm.h
into ioctls_arch.h instead of ioctls_inc.h.

7 years agomaint: harmonize use of ioctls_sym.sh
Dmitry V. Levin [Mon, 21 Nov 2016 16:14:03 +0000 (16:14 +0000)]
maint: harmonize use of ioctls_sym.sh

* maint/ioctls_gen.sh: Consistently specify INCLUDES for all
ioctls_sym.sh invocations.  Use $mydir to specify ioctls_sym.sh
location.

7 years agomaint: rework workarounds for linux/kvm.h
Dmitry V. Levin [Mon, 21 Nov 2016 16:08:08 +0000 (16:08 +0000)]
maint: rework workarounds for linux/kvm.h

* maint/ioctls_sym.sh: Remove pre-include linux/kvm.h workarounds.
Skip linux/kvm.h on those architectures that have no asm/kvm.h file.
Introduce post-process workarounds, add post-process workarounds
for linux/kvm.h.

7 years agoRestructure strace.1
Elvira Khabirova [Sun, 20 Nov 2016 00:17:10 +0000 (03:17 +0300)]
Restructure strace.1

* strace.1 (OPTIONS): Add subsections.
(PROBLEMS): Rename to REPORTING BUGS.
(SEE ALSO): Move to the bottom.

7 years agoprctl: implement decoding of PR_SET_FP_MODE and PR_GET_FP_MODE options
Eugene Syromyatnikov [Sat, 19 Nov 2016 20:10:01 +0000 (23:10 +0300)]
prctl: implement decoding of PR_SET_FP_MODE and PR_GET_FP_MODE options

* xlat/pr_fp_mode.in: New file.
* prctl.c: Include "xlat/pr_fp_mode.h".
(SYS_FUNC(prctl)): Add handling for PR_SET_FP_MODE and PR_GET_FP_MODE
options.

7 years agoprctl: add braces for conditional blocks with else/else-if blocks having braces
Eugene Syromyatnikov [Fri, 18 Nov 2016 18:00:02 +0000 (21:00 +0300)]
prctl: add braces for conditional blocks with else/else-if blocks having braces

7 years agoprctl: cast arg2 to int in PR_SET_PTRACER handler
Eugene Syromyatnikov [Fri, 18 Nov 2016 17:36:21 +0000 (20:36 +0300)]
prctl: cast arg2 to int in PR_SET_PTRACER handler

Kernel code does this when compares it with -1 (apart from comparing it with
PR_SET_PTRACER_ANY, which is also -1) in security/yama/yama_lsm.c.

* prctl.c (SYS_FUNC(prctl)) <PR_SET_PTRACER>: Cast arg2 to int before
comparing it with -1.

7 years agoprctl: use getarg_ull for option value retrieval
Eugene Syromyatnikov [Fri, 18 Nov 2016 17:25:13 +0000 (20:25 +0300)]
prctl: use getarg_ull for option value retrieval

The prctl syscall does not use compat on x32/n32, so argument types
are in fact kernel_ulong_t.

* prctl.c (print_prctl_args): Use getarg_ull, print as "%#llx" instead
of "%#lx".
(SYS_FUNC(prctl)): Use getarg_ull to store call arguments in arg2, arg3,
arg4, arg5 variables of type unsigned long long.  Use them in printing
routines.
(SYS_FUNC(arch_prctl)): Use getarg_ull to store call argument in addr
variable of type unsigned long long.  Print it as "%#llx" instead of
"%#lx".

7 years agoblock: add some definitions from <linux/blkpg.h>
Eugene Syromyatnikov [Sun, 13 Nov 2016 16:00:27 +0000 (19:00 +0300)]
block: add some definitions from <linux/blkpg.h>

This is done in order to fix build error on old distributions where
struct blkpg_ioctl_arg declaration is broken:

In file included from block.c:35:
/usr/include/linux/blkpg.h:36: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token
block.c: In function 'print_blkpg_req':
block.c:113: error: 'struct_blkpg_ioctl_arg' has no member named 'data'

(from SLE10)

* block.c: Include <linux/ioctl.h> instead of <linux/blkpg.h>.
(BLKPG, BLKPG_DEVNAMELTH, BLKPG_VOLNAMELTH): New macros.
(struct_blkpg_ioctl_arg, struct_blkpg_partition): New definitions,
copied from blkpg_ioctl_arg and blkpg_partition structures defined
in <linux/blkpg.h>.

7 years agoxlat: add values to new ARCH_* constants
Eugene Syromyatnikov [Sat, 19 Nov 2016 00:36:22 +0000 (03:36 +0300)]
xlat: add values to new ARCH_* constants

Since UAPI header declares them under CONFIG_CHECKPOINT_RESTORE
and they would never be defined in user space.

* xlat/archvals.in: Add numeric values to ARCH_MAP_VDSO_* constants.

7 years agoprctl: include <linux/prctl.h> instead of <sys/prctl.h>
Dmitry V. Levin [Sun, 20 Nov 2016 02:00:35 +0000 (02:00 +0000)]
prctl: include <linux/prctl.h> instead of <sys/prctl.h>

There are no users of prctl function in prctl.c, and all the rest
is provided by <linux/prctl.h> anyway.

* prctl.c: Include <linux/prctl.h> instead of <sys/prctl.h>.

7 years agotests: check decoding of prctl PR_GET_NAME/PR_SET_NAME operations
Dmitry V. Levin [Sat, 19 Nov 2016 23:25:54 +0000 (23:25 +0000)]
tests: check decoding of prctl PR_GET_NAME/PR_SET_NAME operations

* tests/prctl-name.c: New file.
* tests/prctl-name.test: New test.
* tests/.gitignore: Add prctl-name.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add prctl-name.test.

7 years agoprctl: fix printing of PR_SET_NAME's argument
Dmitry V. Levin [Sun, 20 Nov 2016 00:38:34 +0000 (00:38 +0000)]
prctl: fix printing of PR_SET_NAME's argument

* prctl.c (SYS_FUNC(prctl)): Use printstr_ex with QUOTE_0_TERMINATED
instead of printstr to print the argument of PR_SET_NAME and PR_GET_NAME
operations.

7 years agoprintstr_ex: fix handling of last byte when QUOTE_0_TERMINATED bit set
Dmitry V. Levin [Sun, 20 Nov 2016 00:29:46 +0000 (00:29 +0000)]
printstr_ex: fix handling of last byte when QUOTE_0_TERMINATED bit set

* util.c (printstr_ex): Simplify handling of size == 0 case.
Do not artificially decrement size when QUOTE_0_TERMINATED bit is set.
Ensure that str[size] byte is non-zero if it hasn't been fetched.

7 years agoprintstr_ex: handle QUOTE_0_TERMINATED bit consistently
Dmitry V. Levin [Sat, 19 Nov 2016 21:01:03 +0000 (21:01 +0000)]
printstr_ex: handle QUOTE_0_TERMINATED bit consistently

When user_style has QUOTE_0_TERMINATED bit set, printstr_ex prints
the fetched string as a NUL-terminated.
After this change, the string is being fetched as a NUL-terminated, too.

* util.c (printstr_ex): Use umovestr instead of umoven
if QUOTE_0_TERMINATED bit is set.

7 years agoCleanup fetch part of printstr_ex
Dmitry V. Levin [Sat, 19 Nov 2016 16:33:37 +0000 (16:33 +0000)]
Cleanup fetch part of printstr_ex

* util.c (printstr_ex): Initialize "style" early, unify error handling.

7 years agoUpdate prctl ARCH_* constants
Dmitry V. Levin [Fri, 18 Nov 2016 13:32:39 +0000 (13:32 +0000)]
Update prctl ARCH_* constants

* xlat/archvals.in: Add ARCH_MAP_VDSO_X32, ARCH_MAP_VDSO_32, and
ARCH_MAP_VDSO_64 introduced by linux kernel commit v4.9-rc1~155^2~6.

7 years agoUpdate V4L2_* constants
Dmitry V. Levin [Fri, 18 Nov 2016 13:23:03 +0000 (13:23 +0000)]
Update V4L2_* constants

* xlat/v4l2_device_capabilities_flags.in: Add V4L2_CAP_TOUCH introduced
by linux kernel commit v4.9-rc4~7^2~422.
* xlat/v4l2_input_types.in: Add V4L2_CAP_TOUCH introduced
by linux kernel commit v4.9-rc4~7^2~422.

7 years agoUpdate fs *_MAGIC constants
Dmitry V. Levin [Fri, 18 Nov 2016 13:17:22 +0000 (13:17 +0000)]
Update fs *_MAGIC constants

* xlat/fsmagic.in: Add DAXFS_MAGIC introduced by linux kernel commit
v4.9-rc1~45^2^2~5.

7 years agoUpdate MS_* constants
Dmitry V. Levin [Fri, 18 Nov 2016 13:13:31 +0000 (13:13 +0000)]
Update MS_* constants

* xlat/mount_flags.in: Add MS_NOREMOTELOCK introduced
by linux kernel commit v4.9-rc1~57^2~1^2~7.

7 years agoUpdate FALLOC_* constants
Dmitry V. Levin [Fri, 18 Nov 2016 13:11:04 +0000 (13:11 +0000)]
Update FALLOC_* constants

* xlat/falloc_flags.in: Add FALLOC_FL_UNSHARE_RANGE introduced
by linux kernel commit v4.9-rc1~31^2~69.

7 years agoUpdate BTRFS_* constants
Dmitry V. Levin [Fri, 18 Nov 2016 13:08:27 +0000 (13:08 +0000)]
Update BTRFS_* constants

* xlat/btrfs_features_compat_ro.in: Add
BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID introduced
by linux kernel commit v4.9-rc1~7^2^2~4.

7 years agoUpdate BPF_* constants
Dmitry V. Levin [Fri, 18 Nov 2016 13:05:23 +0000 (13:05 +0000)]
Update BPF_* constants

* xlat/bpf_prog_types.in: Add BPF_PROG_TYPE_PERF_EVENT introduced
by linux kernel commit v4.9-rc1~127^2~302^2~4.

7 years agomake-dist: use HEAD for making distribution package
Eugene Syromyatnikov [Thu, 27 Oct 2016 20:43:36 +0000 (23:43 +0300)]
make-dist: use HEAD for making distribution package

* make-dist: Use HEAD commit instead of master branch by default.

7 years agotests: fix btrfs build error on some old systems
Dmitry V. Levin [Fri, 18 Nov 2016 00:51:37 +0000 (00:51 +0000)]
tests: fix btrfs build error on some old systems

Fix the following build error on SLE 11 SP4:

btrfs.c: In function 'btrfs_test_dev_replace_ioctl':
btrfs.c:1570: error: unknown field 'start' specified in initializer

* tests/btrfs.c (btrfs_test_dev_replace_ioctl): Move initialization
of struct btrfs_ioctl_dev_replace_args.start.srcdevid out of the
designated initializer.

7 years agotests: check decoding of ERESTARTSYS error code
Dmitry V. Levin [Fri, 18 Nov 2016 00:28:29 +0000 (00:28 +0000)]
tests: check decoding of ERESTARTSYS error code

* tests/erestartsys.c: New file.
* tests/erestartsys.test: New test.
* tests/.gitignore: Add erestartsys.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add erestartsys.test.

7 years agoFix signame usage in qual_signal
Dmitry V. Levin [Fri, 18 Nov 2016 00:11:39 +0000 (00:11 +0000)]
Fix signame usage in qual_signal

Do not assume that the string returned by signame starts with "SIG"
prefix, this is not always the case.

* syscall.c (qual_signal): Skip signame return value
when it does not have "SIG" prefix.

7 years agotests: check -e signal=set syntax
Dmitry V. Levin [Fri, 18 Nov 2016 00:11:27 +0000 (00:11 +0000)]
tests: check -e signal=set syntax

* tests/qual_signal.c: New file.
* tests/qual_signal.test: New test.
* tests/.gitignore: Add qual_signal.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(MISC_TESTS): Add qual_signal.test.

7 years agoMake -e fault= expressions cumulative
Dmitry V. Levin [Thu, 17 Nov 2016 15:44:21 +0000 (15:44 +0000)]
Make -e fault= expressions cumulative

Change the way how subsequent -e fault= expressions are interpreted
to implement a cumulative behavior.  For example,
-e fault=file:when=3+ -e fault=chdir
now specifies that all chdir syscalls and 3+ file related syscalls
except chdir are subject for fault injection.

* syscall.c (qualify): Do not reset qual_vec for QUAL_FAULT.
* tests/fault_injection.test: Check it.

7 years agotests: check syscall fault injection
Dmitry V. Levin [Wed, 16 Nov 2016 17:27:46 +0000 (17:27 +0000)]
tests: check syscall fault injection

* tests/fault_injection.c: New file.
* tests/fault_injection.test: New test.
* tests/fault_syntax.test: Likewise.
* tests/.gitignore: Add fault_injection.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(MISC_TESTS): Add fault_injection.test and fault_syntax.test.

7 years agoImplement syscall fault injection
Dmitry V. Levin [Wed, 16 Nov 2016 17:26:58 +0000 (17:26 +0000)]
Implement syscall fault injection

Introduce new -e fault=EXPR syntax that can be used to specify a subset
of syscalls that are subject of syscall fault injection, an error code
that has to be injected, and a frequency of injection.

The expression specifying syscall fault injection has the following
format: SET[:error=ERRNO][:when=FIRST[+[STEP]]]
where only SET is a required part and all the rest is optional.

The method used to implement syscall fault injection is the following:
on entering syscall the syscall number is substituted by an invalid
syscall number -1, and on exiting syscall the error code returned by
the kernel is substituted with the error code specified in the fault
expression.

This implementaion is based on the prototype developed
by Nahim El Atmani as a part of his GSoC 2016 strace project.

* defs.h (struct fault_opts): New forward declaration.
(struct tcb): Add fault_vec field.
(TCB_FAULT_INJ, QUAL_FAULT): New macros.
* strace.1: Document -e fault expression syntax.
* strace.c (usage): Mention -e fault expression.
(droptcb): Deallocate fault_vec member.
* syscall.c (qual_fault, arch_set_scno, arch_set_error): New prototypes.
(qual_options): Add "fault" option.
(struct fault_opts): New structure.
(num_faults): New variable.
(fault_vec): New array.
(syscall_fault_injected, tcb_fault_opts, reallocate_fault,
find_errno_by_name, qual_syscall_ex, strip_prefix, parse_fault_token,
parse_fault_expression, qual_fault, inject_syscall_fault_entering,
update_syscall_fault_exiting): New functions.
(qual_syscall): Use qual_syscall_ex.
(qualify_one): Add argument: a pointer to struct fault_opts, all callers
changed.  Copy struct fault_opts from the pointer to fault_vec.
Use reallocate_fault.
(qualify_scno, qualify_syscall_class, qualify_syscall_name): Add
argument: a pointer to struct fault_opts.
(qualify): Use reallocate_fault.  Do not check "all" class for
QUAL_FAULT qualifier.
(lookup_class): Check for "all" class.
(trace_syscall_entering): Use inject_syscall_fault_entering.
(trace_syscall_exiting): Use update_syscall_fault_exiting.  Clear
TCB_FAULT_INJ flag along with TCB_INSYSCALL.  Print " (INJECTED)" suffix
when the syscall has been injected successfully.
[ARCH_REGS_FOR_GETREGSET && !HAVE_GETREGS_OLD]
(ptrace_setregset): New function.
(ptrace_setregset_or_setregs): Define to ptrace_setregset.
[ARCH_REGS_FOR_GETREGS && !HAVE_GETREGS_OLD]
(ptrace_setregs): New function.
(ptrace_setregset_or_setregs): Define to ptrace_setregs.
[ptrace_setregset_or_setregs] (set_regs): New function.
Include "set_scno.c" and "set_error.c"
* NEWS: Mention this enhancement.

7 years agoImplement arch specific methods of changing syscall number and error code
Dmitry V. Levin [Tue, 15 Nov 2016 17:38:21 +0000 (17:38 +0000)]
Implement arch specific methods of changing syscall number and error code

This introduces arch_set_error and arch_set_scno functions for each
supported architecture, needed to implement syscall fault injection.

* linux/aarch64/set_error.c: New file.
* linux/aarch64/set_scno.c: Likewise.
* linux/alpha/set_error.c: Likewise.
* linux/alpha/set_scno.c: Likewise.
* linux/arc/set_error.c: Likewise.
* linux/arc/set_scno.c: Likewise.
* linux/arm/set_error.c: Likewise.
* linux/arm/set_scno.c: Likewise.
* linux/avr32/set_error.c: Likewise.
* linux/avr32/set_scno.c: Likewise.
* linux/bfin/set_error.c: Likewise.
* linux/bfin/set_scno.c: Likewise.
* linux/crisv10/set_error.c: Likewise.
* linux/crisv10/set_scno.c: Likewise.
* linux/crisv32/set_error.c: Likewise.
* linux/crisv32/set_scno.c: Likewise.
* linux/hppa/set_error.c: Likewise.
* linux/hppa/set_scno.c: Likewise.
* linux/i386/set_error.c: Likewise.
* linux/i386/set_scno.c: Likewise.
* linux/ia64/set_error.c: Likewise.
* linux/ia64/set_scno.c: Likewise.
* linux/m68k/set_error.c: Likewise.
* linux/m68k/set_scno.c: Likewise.
* linux/metag/set_error.c: Likewise.
* linux/metag/set_scno.c: Likewise.
* linux/microblaze/set_error.c: Likewise.
* linux/microblaze/set_scno.c: Likewise.
* linux/mips/set_error.c: Likewise.
* linux/mips/set_scno.c: Likewise.
* linux/nios2/set_error.c: Likewise.
* linux/nios2/set_scno.c: Likewise.
* linux/or1k/set_error.c: Likewise.
* linux/or1k/set_scno.c: Likewise.
* linux/powerpc/set_error.c: Likewise.
* linux/powerpc/set_scno.c: Likewise.
* linux/powerpc64/set_error.c: Likewise.
* linux/powerpc64/set_scno.c: Likewise.
* linux/riscv/set_error.c: Likewise.
* linux/riscv/set_scno.c: Likewise.
* linux/s390/set_error.c: Likewise.
* linux/s390/set_scno.c: Likewise.
* linux/s390x/set_error.c: Likewise.
* linux/s390x/set_scno.c: Likewise.
* linux/sh/set_error.c: Likewise.
* linux/sh/set_scno.c: Likewise.
* linux/sh64/set_error.c: Likewise.
* linux/sh64/set_scno.c: Likewise.
* linux/sparc/set_error.c: Likewise.
* linux/sparc/set_scno.c: Likewise.
* linux/sparc64/set_error.c: Likewise.
* linux/sparc64/set_scno.c: Likewise.
* linux/tile/set_error.c: Likewise.
* linux/tile/set_scno.c: Likewise.
* linux/x32/set_error.c: Likewise.
* linux/x32/set_scno.c: Likewise.
* linux/x86_64/set_error.c: Likewise.
* linux/x86_64/set_scno.c: Likewise.
* linux/xtensa/set_error.c: Likewise.
* linux/xtensa/set_scno.c: Likewise.
* Makefile.am (EXTRA_DIST): Add them.

7 years agocris: add syscall tables
Dmitry V. Levin [Wed, 16 Nov 2016 02:25:47 +0000 (02:25 +0000)]
cris: add syscall tables

The incomplete CRIS support introduced by commit v4.5.18-77-gea0e6e8
should not have been merged because it lacks essential parts, e.g.
syscall tables.

This change adds missing syscall tables for crisv10 and crisv32.

* linux/crisv10/syscallent.h: New file.
* linux/crisv32/syscallent.h: Likewise.
* Makefile.am (EXTRA_DIST): Add them.

7 years agoIntroduce string_to_uint_ex and string_to_uint_upto functions
Dmitry V. Levin [Wed, 16 Nov 2016 00:58:05 +0000 (00:58 +0000)]
Introduce string_to_uint_ex and string_to_uint_upto functions

* defs.h (string_to_uint_ex): New prototype.
(string_to_uint_upto): New function, a thin wrapper around
string_to_uint_ex.
* util.c (string_to_uint_ex): New function.
(string_to_uint): Change into a thin wrapper around string_to_uint_upto.
* strace.c (init): Use string_to_uint_upto.
* syscall.c (qualify_scno, qual_signal, qual_desc): Use
string_to_uint_upto instead of string_to_uint.

7 years agoSplit qual_syscall into separate functions
Dmitry V. Levin [Tue, 15 Nov 2016 22:57:33 +0000 (22:57 +0000)]
Split qual_syscall into separate functions

Split qual_syscall into qualify_scno, qualify_syscall_class,
and qualify_syscall_name.
This might be needed later to implement syscall fault injection.

* syscall.c (qualify_scno, qualify_syscall_class, qualify_syscall_name):
New functions.
(qual_syscall): Use them.

8 years agoxtensa: wire up new syscalls
Dmitry V. Levin [Tue, 15 Nov 2016 01:09:51 +0000 (01:09 +0000)]
xtensa: wire up new syscalls

* linux/xtensa/syscallent.h [342..347]: New entries.

8 years agoarc: wire up new syscalls
Dmitry V. Levin [Mon, 14 Nov 2016 01:07:59 +0000 (01:07 +0000)]
arc: wire up new syscalls

* linux/arc/syscallent.h [247, 248]: New entries.

8 years agotests: fix potential compilation warning in ioctl_block.c
Dmitry V. Levin [Sun, 13 Nov 2016 22:29:30 +0000 (22:29 +0000)]
tests: fix potential compilation warning in ioctl_block.c

ioctl_block.c:48: warning: 'init_magic' defined but not used

* tests/ioctl_block.c (init_magic): Define only for
[BLKTRACESETUP && HAVE_STRUCT_BLK_USER_TRACE_SETUP].

8 years agoAdd support for pkey_mprotect, pkey_alloc, pkey_free syscalls
Eugene Syromyatnikov [Sat, 12 Nov 2016 17:54:56 +0000 (20:54 +0300)]
Add support for pkey_mprotect, pkey_alloc, pkey_free syscalls

* linux/32/syscallent.h: Add syscall entries for pkey_* calls.
* linux/64/syscallent.h: Likewise.
* linux/arm/syscallent.h: Likewise.
* linux/i386/syscallent.h: Likewise.
* linux/mips/syscallent-n32.h: Likewise.
* linux/mips/syscallent-n64.h: Likewise.
* linux/mips/syscallent-o32.h: Likewise.
* linux/x32/syscallent.h: Likewise.
* linux/x86_64/syscallent.h: Likewise.
* mem.c (do_mprotect): New function, common handler for mprotect and
pkey_mprotect.
(SYS_FUNC(mprotect)): Convert to wrapper around do_mprotect.
(SYS_FUNC(pkey_mprotect)): New function.
* xlat/pkey_access.in: New file.
* pkeys.c: New file containing implementation of pkey_alloc and
pkey_free.
* Makefile.am: Add it.
* NEWS: Mention this enhancement.
* tests/.gitignore: Add pkey_alloc, pkey_free, and pkey_mprotect.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add pkey_alloc.test, pkey_free.test, and
pkey_mprotect.test.
* tests/pkey_alloc.c: New file.
* tests/pkey_free.c: Likewise.
* tests/pkey_mprotect.c: Likewise.
* tests/pkey_alloc.test: New test.
* tests/pkey_free.test: Likewise.
* tests/pkey_mprotect.test: Likewise.

8 years agotests: fix "constant is too large" compilation warnings
Eugene Syromyatnikov [Sun, 13 Nov 2016 16:14:46 +0000 (19:14 +0300)]
tests: fix "constant is too large" compilation warnings

alarm.c: In function 'main':
alarm.c:41: warning: integer constant is too large for 'long' type
aio.c: In function 'main':
aio.c:162: warning: integer constant is too large for 'long' type
btrfs.c: In function 'btrfs_test_sync_ioctls':
btrfs.c:202: warning: integer constant is too large for 'long' type
btrfs.c: In function 'btrfs_test_subvol_ioctls':
btrfs.c:289: warning: integer constant is too large for 'long' type
btrfs.c:290: warning: integer constant is too large for 'long' type
dup2.c: In function 'main':
dup2.c:12: warning: integer constant is too large for 'long' type
dup2.c:13: warning: integer constant is too large for 'long' type
dup3.c: In function 'main':
dup3.c:13: warning: integer constant is too large for 'long' type
dup3.c:14: warning: integer constant is too large for 'long' type
epoll_create.c: In function 'main':
epoll_create.c:12: warning: integer constant is too large for 'long' type
epoll_ctl.c: In function 'invoke_syscall':
epoll_ctl.c:14: warning: integer constant is too large for 'long' type
faccessat.c: In function 'main':
faccessat.c:13: warning: integer constant is too large for 'long' type
fchdir.c: In function 'main':
fchdir.c:12: warning: integer constant is too large for 'long' type
struct_flock.c: In function 'invoke_test_syscall':
struct_flock.c:48: warning: integer constant is too large for 'long' type
struct_flock.c: In function 'test_flock_einval':
struct_flock.c:58: warning: integer constant is too large for 'long' type
struct_flock.c:59: warning: integer constant is too large for 'long' type
fcntl64.c: In function 'test_flock64_einval':
fcntl64.c:44: warning: integer constant is too large for 'long' type
fcntl64.c:45: warning: integer constant is too large for 'long' type
fcntl.c: In function 'test_flock64_einval':
fcntl.c:44: warning: integer constant is too large for 'long' type
fcntl.c:45: warning: integer constant is too large for 'long' type
fdatasync.c: In function 'main':
fdatasync.c:12: warning: integer constant is too large for 'long' type
flock.c: In function 'main':
flock.c:13: warning: integer constant is too large for 'long' type
xstatx.c: In function 'main':
xstatx.c:255: warning: integer constant is too large for 'long' type
xstatx.c:290: warning: integer constant is too large for 'long' type
xstatx.c:290: warning: integer constant is too large for 'long' type
xstatx.c:290: warning: integer constant is too large for 'long' type
xstatx.c:290: warning: integer constant is too large for 'long' type
xstatx.c:290: warning: integer constant is too large for 'long' type
xstatx.c:290: warning: integer constant is too large for 'long' type
xstatx.c:290: warning: integer constant is too large for 'long' type
xstatx.c:290: warning: integer constant is too large for 'long' type
xstatx.c:290: warning: integer constant is too large for 'long' type
xstatx.c:294: warning: integer constant is too large for 'long' type
xstatx.c:294: warning: integer constant is too large for 'long' type
xstatx.c:294: warning: integer constant is too large for 'long' type
xstatx.c:294: warning: integer constant is too large for 'long' type
xstatx.c:294: warning: integer constant is too large for 'long' type
xstatx.c:294: warning: integer constant is too large for 'long' type
xstatx.c:294: warning: integer constant is too large for 'long' type
xstatx.c:294: warning: integer constant is too large for 'long' type
xstatx.c:294: warning: integer constant is too large for 'long' type
xstatfsx.c: In function 'main':
xstatfsx.c:113: warning: integer constant is too large for 'long' type
fsync.c: In function 'main':
fsync.c:12: warning: integer constant is too large for 'long' type
ftruncate64.c: In function 'main':
ftruncate64.c:39: warning: integer constant is too large for 'long' type
futimesat.c: In function 'main':
futimesat.c:52: warning: integer constant is too large for 'long' type
futimesat.c:59: warning: integer constant is too large for 'long' type
get_mempolicy.c: In function 'main':
get_mempolicy.c:83: warning: integer constant is too large for 'long' type
get_mempolicy.c:84: warning: integer constant is too large for 'long' type
get_mempolicy.c:85: warning: integer constant is too large for 'long' type
get_mempolicy.c:86: warning: integer constant is too large for 'long' type
getdents.c: In function 'main':
getdents.c:109: warning: integer constant is too large for 'long' type
getdents.c:110: warning: integer constant is too large for 'long' type
getdents.c:114: warning: integer constant is too large for 'long' type
getdents64.c: In function 'main':
getdents64.c:114: warning: integer constant is too large for 'long' type
getdents64.c:115: warning: integer constant is too large for 'long' type
getdents64.c:119: warning: integer constant is too large for 'long' type
xgetrlimit.c: In function 'main':
xgetrlimit.c:71: warning: integer constant is too large for 'long' type
ioctl_block.c:44: warning: integer constant is too large for 'long' type
ioctl_block.c: In function 'main':
ioctl_block.c:136: warning: integer constant is too large for 'long' type
ioctl_block.c:137: warning: integer constant is too large for 'long' type
ioctl_block.c:161: warning: integer constant is too large for 'long' type
ioctl_block.c:170: warning: integer constant is too large for 'long' type
ioctl_block.c:171: warning: integer constant is too large for 'long' type
ioctl_evdev.c:42: warning: integer constant is too large for 'long' type
ioctl_mtd.c:46: warning: integer constant is too large for 'long' type
ioctl_rtc.c:40: warning: integer constant is too large for 'long' type
ioperm.c: In function 'main':
ioperm.c:12: warning: integer constant is too large for 'long' type
ioctl_v4l2.c: In function 'main':
ioctl_v4l2.c:409: warning: integer constant is too large for 'long' type
ipc.c: In function 'ipc_call':
ipc.c:52: warning: integer constant is too large for 'long' type
kill.c: In function 'main':
kill.c:59: warning: integer constant is too large for 'long' type
kill.c:62: warning: integer constant is too large for 'long' type
kill.c:63: warning: integer constant is too large for 'long' type
kill.c:68: warning: integer constant is too large for 'long' type
linkat.c: In function 'main':
linkat.c:14: warning: integer constant is too large for 'long' type
linkat.c:15: warning: integer constant is too large for 'long' type
mbind.c: In function 'main':
mbind.c:41: warning: integer constant is too large for 'long' type
mbind.c:43: warning: integer constant is too large for 'long' type
mbind.c:44: warning: integer constant is too large for 'long' type
migrate_pages.c: In function 'main':
migrate_pages.c:41: warning: integer constant is too large for 'long' type
In file included from mkdirat.c:10:
umode_t.c: In function 'test_syscall':
umode_t.c:47: warning: integer constant is too large for 'long' type
mknod.c: In function 'call_mknod':
mknod.c:16: warning: integer constant is too large for 'long' type
mknod.c: In function 'main':
mknod.c:23: warning: integer constant is too large for 'long' type
mknod.c:49: warning: integer constant is too large for 'long' type
mknod.c:56: warning: integer constant is too large for 'long' type
mknodat.c:12: warning: integer constant is too large for 'long' type
mknodat.c: In function 'call_mknodat':
mknodat.c:17: warning: integer constant is too large for 'long' type
mknodat.c: In function 'main':
mknodat.c:24: warning: integer constant is too large for 'long' type
mknodat.c:50: warning: integer constant is too large for 'long' type
mknodat.c:57: warning: integer constant is too large for 'long' type
mmap.c: In function 'main':
mmap.c:51: warning: integer constant is too large for 'long' type
move_pages.c: In function 'print_stat_pages':
move_pages.c:139: warning: integer constant is too large for 'long' type
move_pages.c: In function 'print_move_pages':
move_pages.c:166: warning: integer constant is too large for 'long' type
move_pages.c: In function 'main':
move_pages.c:188: warning: integer constant is too large for 'long' type
mq_sendrecv.c: In function 'main':
mq_sendrecv.c:238: warning: integer constant is too large for 'long' type
mq_sendrecv.c:401: warning: integer constant is too large for 'long' type
mq_sendrecv.c:403: warning: integer constant is too large for 'long' type
nsyscalls.c: In function 'test_syscall':
nsyscalls.c:64: warning: integer constant is too large for 'long' type
nsyscalls.c:65: warning: integer constant is too large for 'long' type
nsyscalls.c:66: warning: integer constant is too large for 'long' type
nsyscalls.c:67: warning: integer constant is too large for 'long' type
nsyscalls.c:68: warning: integer constant is too large for 'long' type
nsyscalls.c:69: warning: integer constant is too large for 'long' type
preadv-pwritev.c: In function 'main':
preadv-pwritev.c:162: warning: comparison between signed and unsigned
prlimit64.c: In function 'main':
prlimit64.c:65: warning: integer constant is too large for 'long' type
prlimit64.c:70: warning: integer constant is too large for 'long' type
remap_file_pages.c: In function 'main':
remap_file_pages.c:42: warning: integer constant is too large for 'long' type
remap_file_pages.c:43: warning: integer constant is too large for 'long' type
remap_file_pages.c:45: warning: integer constant is too large for 'long' type
renameat.c: In function 'main':
renameat.c:15: warning: integer constant is too large for 'long' type
renameat.c:16: warning: integer constant is too large for 'long' type
rt_sigqueueinfo.c: In function 'main':
rt_sigqueueinfo.c:41: warning: integer constant is too large for 'long' type
rt_tgsigqueueinfo.c: In function 'k_tgsigqueueinfo':
rt_tgsigqueueinfo.c:45: warning: integer constant is too large for 'long' type
rt_tgsigqueueinfo.c:46: warning: integer constant is too large for 'long' type
rt_tgsigqueueinfo.c:47: warning: integer constant is too large for 'long' type
rt_tgsigqueueinfo.c: In function 'main':
rt_tgsigqueueinfo.c:67: warning: integer constant is too large for 'long' type
sendfile.c: In function 'main':
sendfile.c:110: warning: integer constant is too large for 'long' type
sendfile64.c: In function 'main':
sendfile64.c:100: warning: integer constant is too large for 'long' type
set_mempolicy.c: In function 'main':
set_mempolicy.c:129: warning: integer constant is too large for 'long' type
set_mempolicy.c:130: warning: integer constant is too large for 'long' type
setrlimit.c: In function 'main':
setrlimit.c:44: warning: integer constant is too large for 'long' type
socketcall.c: In function 'test_socketcall':
socketcall.c:58: warning: integer constant is too large for 'long' type
splice.c: In function 'main':
splice.c:41: warning: integer constant is too large for 'long' type
splice.c:42: warning: integer constant is too large for 'long' type
splice.c:45: warning: integer constant is too large for 'long' type
splice.c:46: warning: integer constant is too large for 'long' type
symlinkat.c: In function 'main':
symlinkat.c:12: warning: integer constant is too large for 'long' type
sync_file_range.c: In function 'main':
sync_file_range.c:42: warning: integer constant is too large for 'long' type
sync_file_range.c:43: warning: integer constant is too large for 'long' type
syslog.c: In function 'main':
syslog.c:14: warning: integer constant is too large for 'long' type
tee.c: In function 'main':
tee.c:41: warning: integer constant is too large for 'long' type
tee.c:42: warning: integer constant is too large for 'long' type
timer_create.c: In function 'main':
timer_create.c:52: warning: integer constant is too large for 'long' type
timer_create.c:84: warning: integer constant is too large for 'long' type
timer_create.c:85: warning: integer constant is too large for 'long' type
truncate64.c: In function 'main':
truncate64.c:41: warning: integer constant is too large for 'long' type
xgetrlimit.c: In function 'main':
xgetrlimit.c:71: warning: integer constant is too large for 'long' type
umode_t.c: In function 'test_syscall':
umode_t.c:46: warning: integer constant is too large for 'long' type
unlinkat.c: In function 'main':
unlinkat.c:13: warning: integer constant is too large for 'long' type
waitpid.c: In function 'main':
waitpid.c:43: warning: integer constant is too large for 'long' type
waitid.c: In function 'poison':
waitid.c:141: warning: integer constant is too large for 'long' type
xetpriority.c: In function 'main':
xetpriority.c:15: warning: integer constant is too large for 'long' type
xetpriority.c:19: warning: integer constant is too large for 'long' type
xetpriority.c:20: warning: integer constant is too large for 'long' type
xetpgid.c: In function 'main':
xetpgid.c:43: warning: integer constant is too large for 'long' type
xetpgid.c:47: warning: integer constant is too large for 'long' type
xetpgid.c:48: warning: integer constant is too large for 'long' type

(SLES 11SP4, i386)

* tests/alarm.c (main): Add proper suffix to integer constant.
* tests/aio.c (main): Likewise.
* tests/btrfs.c (btrfs_test_sync_ioctls, btrfs_test_subvol_ioctls): Likewise.
* tests/dup2.c (main): Likewise.
* tests/dup3.c (main): Likewise.
* tests/epoll_create.c (main): Likewise.
* tests/epoll_ctl.c (invoke_syscall): Likewise.
* tests/faccessat.c (main): Likewise.
* tests/fchdir.c (main): Likewise.
* tests/fcntl.c (test_flock64_einval): Likewise.
* tests/fcntl64.c (test_flock64_einval): Likewise.
* tests/fdatasync.c (main): Likewise.
* tests/flock.c (main): Likewise.
* tests/fstat64.c (SAMPLE_SIZE): Likewise.
* tests/fstat.c (SAMPLE_SIZE): Likewise.
* tests/fsync.c (main): Likewise.
* tests/ftruncate64.c (main): Likewise.
* tests/futimesat.c (main): Likewise.
* tests/get_mempolicy.c (main): Likewise.
* tests/getdents.c (main): Likewise.
* tests/getdents64.c (main): Likewise.
* tests/ioctl_block.c (lmagic, main): Likewise.
* tests/ioctl_evdev.c (lmagic): Likewise.
* tests/ioctl_mtd.c (lmagic): Likewise.
* tests/ioctl_rtc.c (lmagic): Likewise.
* tests/ioctl_v4l2.c (main): Likewise.
* tests/ioperm.c (main): Likewise.
* tests/ipc.c (ipc_call): Likewise.
* tests/kill.c (main): Likewise.
* tests/linkat.c (main): Likewise.
* tests/lstat64.c (SAMPLE_SIZE): Likewise.
* tests/lstat.c (SAMPLE_SIZE): Likewise.
* tests/mbind.c (main): Likewise.
* tests/migrate_pages.c (main): Likewise.
* tests/mkdirat.c (TEST_SYSCALL_PREFIX_ARGS): Likewise.
* tests/mknod.c (call_mknod, main): Likewise.
* tests/mknodat.c (fd, call_mknodat, main): Likewise.
* tests/mmap.c (main): Likewise.
* tests/move_pages.c (print_stat_pages, print_move_pages): Likewise.
* tests/mq_sendrecv.c (main): Likewise.
* tests/nsyscalls.c (test_syscall): Likewise.
* tests/prlimit64.c (main): Likewise.
* tests/remap_file_pages.c (main): Likewise.
* tests/renameat.c (main): Likewise.
* tests/rt_sigqueueinfo.c (main): Likewise.
* tests/rt_tgsigqueueinfo.c (k_tgsigqueueinfo, main): Likewise.
* tests/sendfile.c (main): Likewise.
* tests/sendfile64.c (main): Likewise.
* tests/set_mempolicy.c (main): Likewise.
* tests/setrlimit.c (main): Likewise.
* tests/socketcall.c (test_socketcall): Likewise.
* tests/splice.c (main): Likewise.
* tests/stat64.c (SAMPLE_SIZE): Likewise.
* tests/stat.c (SAMPLE_SIZE): Likewise.
* tests/struct_flock.c (invoke_test_syscall, test_flock_einval): Likewise.
* tests/symlinkat.c (main): Likewise.
* tests/sync_file_range.c (main): Likewise.
* tests/syslog.c (main): Likewise.
* tests/tee.c (main): Likewise.
* tests/timer_create.c (main): Likewise.
* tests/truncate64.c (main): Likewise.
* tests/umode_t.c (test_syscall): Likewise.
* tests/unlinkat.c (main): Likewise.
* tests/waitid.c (main): Likewise.
* tests/waitpid.c (main): Likewise.
* tests/xetpgid.c (main): Likewise.
* tests/xetpriority.c (main): Likewise.
* tests/xgetrlimit.c (main): Likewise.
* tests/xstatfsx.c (main) [CHECK_ODD_SIZE]: Likewise.
* tests/xstatx.c (main): Likewise.

8 years agotests: fix "comparison between signed and unsigned" compilation warnings
Eugene Syromyatnikov [Sun, 13 Nov 2016 18:30:25 +0000 (21:30 +0300)]
tests: fix "comparison between signed and unsigned" compilation warnings

preadv-pwritev.c: In function 'main':
preadv-pwritev.c:162: warning: comparison between signed and unsigned
readv.c: In function 'main':
readv.c:148: warning: comparison between signed and unsigned
recvmsg.c: In function 'main':
recvmsg.c:148: warning: comparison between signed and unsigned

* tests/preadv-pwritev.c (main): Cast r_len to int.
* tests/readv.c (main): Likewise.
* tests/recvmsg.c (main): Likewise.

8 years agosyscall.c: refactor getregs_old fallback in get_regs
Dmitry V. Levin [Sat, 12 Nov 2016 10:59:57 +0000 (10:59 +0000)]
syscall.c: refactor getregs_old fallback in get_regs

This change moves remaining arch specific getregs_old code into
appropriate arch subdirectories and removes unnecessary code
duplication.

* linux/getregs_old.h: New file.
* linux/powerpc/getregs_old.h: Likewise.
* linux/powerpc64/getregs_old.h: Likewise.
* linux/x86_64/getregs_old.h: Likewise.
* Makefile.am (EXTRA_DIST): Add them.
* syscall.c: Include "getregs_old.h".
[X86_64 || POWERPC]: Remove.
[ARCH_REGS_FOR_GETREGSET] (ptrace_getregset_or_getregs): Define
to ptrace_getregset.
[ARCH_REGS_FOR_GETREGS] (ptrace_getregset_or_getregs): Define
to ptrace_getregs.
(get_regs): Check for ptrace_getregset_or_getregs instead
of ARCH_REGS_FOR_GETREGSET and ARCH_REGS_FOR_GETREGS.  Use
ptrace_getregset_or_getregs instead of ptrace_getregset and
ptrace_getregs.  Check for HAVE_GETREGS_OLD instead of X86_64
and POWERPC.  Use use_getregs_old instead of getregset_support
and old_kernel.

8 years agoRename BUILD_BUG_ON_ZERO macro
Eugene Syromyatnikov [Sun, 13 Nov 2016 10:45:59 +0000 (13:45 +0300)]
Rename BUILD_BUG_ON_ZERO macro

In order to avoid name clash on distributions which decide to include
kernel headers instead of UAPI ones.  For example, on SLES 11SP4:

gcc -DHAVE_CONFIG_H -I./linux/x86_64 -I./linux -I. -Wall -O2 -c net.c
In file included from /usr/include/linux/sysctl.h:25:0,
                 from /usr/include/linux/netfilter.h:6,
                 from /usr/include/linux/netfilter_arp.h:8,
                 from /usr/include/linux/netfilter_arp/arp_tables.h:14,
                 from net.c:60:
net.c: In function 'print_packet_mreq':
gcc_compat.h:59:27: error: negative width in bit-field '<anonymous>'
 # define MUST_BE_ARRAY(a) BUILD_BUG_ON_ZERO(!SAME_TYPE((a), &(a)[0]))
                           ^
defs.h:76:53: note: in expansion of macro 'MUST_BE_ARRAY'
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]) + MUST_BE_ARRAY(a))
                                                     ^
net.c:747:22: note: in expansion of macro 'ARRAY_SIZE'
   if (mreq.mr_alen > ARRAY_SIZE(mreq.mr_address))
                      ^
due to the fact BUILD_BUG_ON_ZERO is already defined in <linux/kernel.h>.

* gcc_compat.h (BUILD_BUG_ON_ZERO): Rename to FAIL_BUILD_ON_ZERO.
(MUST_BE_ARRAY): Update usage.

8 years agosyscall.c: factor out ptrace_getregs from get_regs
Dmitry V. Levin [Sat, 12 Nov 2016 10:44:18 +0000 (10:44 +0000)]
syscall.c: factor out ptrace_getregs from get_regs

Move the code that calls ptrace(PTRACE_GETREGS) to a separate function.

* syscall.c (ptrace_getregs): New function.
(get_regs): Use it.

8 years agosyscall.c: rename get_regset to ptrace_getregset
Dmitry V. Levin [Sat, 12 Nov 2016 01:11:22 +0000 (01:11 +0000)]
syscall.c: rename get_regset to ptrace_getregset

* syscall.c (get_regset): Rename to ptrace_getregset.
(get_regs): Rename get_regset to ptrace_getregset.

8 years agom68k: switch to PTRACE_GETREGS
Andreas Schwab [Sat, 12 Nov 2016 19:02:23 +0000 (20:02 +0100)]
m68k: switch to PTRACE_GETREGS

* Makefile.am (EXTRA_DIST): Add linux/m68k/arch_regs.h, remove
linux/m68k/get_syscall_result.c.
* linux/m68k/arch_regs.c (m68k_d0, ARCH_PC_PEEK_ADDR): Don't
define.
(m68k_regs, m68k_usp_ptr, ARCH_PC_REG, ARCH_REGS_FOR_GETREGS):
Define.
* linux/m68k/arch_regs.h: New file.
* linux/m68k/arch_sigreturn.c (arch_sigreturn): Use m68k_usp_ptr.
* linux/m68k/get_error.c (get_error): Use m68k_regs.d0.
* linux/m68k/get_scno.c (arch_get_scno): Use m68k_regs.orig_d0.
* linux/m68k/get_syscall_args.c (get_syscall_args): Use m68k_regs.
* linux/m68k/get_syscall_result.c: Remove.

8 years agotests: do not run old_mmap test on m68k
Andreas Schwab [Sat, 12 Nov 2016 09:48:55 +0000 (10:48 +0100)]
tests: do not run old_mmap test on m68k

* tests/old_mmap.c: Skip test on m68k.

8 years agosyscall.c: introduce reallocate_vec function
Dmitry V. Levin [Sat, 12 Nov 2016 00:36:01 +0000 (00:36 +0000)]
syscall.c: introduce reallocate_vec function

This might be needed later to implement syscall fault injection.

* syscall.c (reallocate_vec): New function.
(reallocate_qual): Use it.

8 years agoFix prototypes of qual_desc, qual_signal, and qual_syscall functions
Dmitry V. Levin [Fri, 11 Nov 2016 23:55:23 +0000 (23:55 +0000)]
Fix prototypes of qual_desc, qual_signal, and qual_syscall functions

* syscall.c (qual_desc, qual_signal, qual_syscall): Fix prototypes.
(struct qual_options): Fix type of "qualify" member.

8 years agolinux/x32/syscallent.h: fix syscallent array initialisation on x32
Eugene Syromyatnikov [Sat, 12 Nov 2016 10:20:51 +0000 (13:20 +0300)]
linux/x32/syscallent.h: fix syscallent array initialisation on x32

Why gcc didn't complain about it? It is definitely an index clash.

* linux/x32/syscallent.h: Change initializer indices for empty records from
[327 ... 511] to [329 ... 511].

8 years agoIntroduce upoke function
Dmitry V. Levin [Fri, 11 Nov 2016 17:10:33 +0000 (17:10 +0000)]
Introduce upoke function

This will be needed to implement fault injection on those architectures
that lack PTRACE_SETREGSET/PTRACE_SETREGS support.

* defs.h (upoke): New prototype.
* upoke.c: New file.
* Makefile.am (libstrace_a_SOURCES): Add it.

8 years agoUpdate ioctl entries from linux 4.9
Gleb Fotengauer-Malinovskiy [Fri, 11 Nov 2016 17:51:45 +0000 (20:51 +0300)]
Update ioctl entries from linux 4.9

* linux/32/ioctls_inc_align32.h: Update from linux v4.9 using ioctls_gen.sh.
* linux/32/ioctls_inc_align64.h: Likewise.
* linux/64/ioctls_inc.h: Likewise.
* linux/x32/ioctls_inc0.h: Likewise.
* NEWS: Mention this.

8 years agoUpdate NEWS
Eugene Syromyatnikov [Sat, 29 Oct 2016 01:34:37 +0000 (04:34 +0300)]
Update NEWS

8 years agoAdd support for decoding of DM_* ioctl commands
Mikulas Patocka [Sun, 2 Oct 2016 21:59:06 +0000 (17:59 -0400)]
Add support for decoding of DM_* ioctl commands

* dm.c: New file.
* xlat/dm_flags.in: Likewise.
* Makefile.am (strace_SOURCES): Add dm.c.
* configure.ac (AC_CHECK_HEADERS): Add linux/dm-ioctl.h.
* defs.h (dm_ioctl): New prototype.
* ioctl.c (ioctl_decode) [HAVE_LINUX_DM_IOCTL_H]: Call dm_ioctl
for 0xfd ioctl type.
* tests/ioctl_dm.c: New file.
* tests/ioctl_dm-v.c: Likewise.
* tests/ioctl_dm.test: New test.
* tests/ioctl_dm-v.test: Likewise.
* tests/.gitignore: Add ioctl_dm and ioctl_dm-v.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add ioctl_dm.test and ioctl_dm-v.test.

Co-authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
8 years agoIntroduce ALIGNOF macro
Dmitry V. Levin [Thu, 10 Nov 2016 10:29:46 +0000 (10:29 +0000)]
Introduce ALIGNOF macro

* gcc_compat.h (ALIGNOF): New macro.

8 years agoutil: add support for QUOTE_0_TERMINATED in user_style to ptrintstr_ex
Eugene Syromyatnikov [Mon, 10 Oct 2016 16:55:54 +0000 (19:55 +0300)]
util: add support for QUOTE_0_TERMINATED in user_style to ptrintstr_ex

This enables printing size-limited (expectedly) ASCIZ strings.

This is done by increasing umoven size limit for sized strings by one
byte above max_strlen (enabling copying possible NUL byte in case len is
greater than max_strlen) and decreasing size after copying by one byte
in case QUOTE_0_TERMINATED is set (due to user_style or usage of len of
-1).  As a result, there is one excess byte for string_quote in case
QUOTE_0_TERMINATED is set so string_quote can check for NUL termination
of strings up to size bytes in size (which is len or max_strlen, whatever
is greater).

The catch here is that when string is not properly NUL-terminated and
QUOTE_0_TERMINATED is provided in user_style and len is less than
max_strlen then last non-NUL byte is not printed.  But ellipsis is
printed instead, being indication that string is not terminated
properly.  QUOTE_OMIT_TRAILING_0 should be used instead in case this
behaviour is not intended.

* util.c (printstr_ex): Copy one excess byte in case of non-negative len
provided and it is more than max_strlen; handle case of max_strlen of 0
in case QUOTE_0_TERMINATED is set separately; check for need of printing
ellipsis by checking resulting style against QUOTE_0_TERMINATED.

8 years agotests: check decoding of mq_{notify,open,timedreceive,timedsend,unlink}
Eugene Syromyatnikov [Thu, 27 Oct 2016 07:18:44 +0000 (10:18 +0300)]
tests: check decoding of mq_{notify,open,timedreceive,timedsend,unlink}

* tests/mq_sendrecv.c: New file.
* tests/mq_sendrecv-read.c: Likewise.
* tests/mq_sendrecv-write.c: Likewise.
* tests/mq_sendrecv.test: New test.
* tests/mq_sendrecv-read.test: Likewise.
* tests/mq_sendrecv-write.test: Likewise.
* tests/.gitignore: Add mq_sendrecv, mq_sendrecv-read,
and mq_sendrecv-write.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(mq_sendrecv_LDADD, mq_sendrecv_read_LDADD, mq_sendrecv_write_LDADD):
New variables.
(DECODER_TESTS): Add mq_sendrecv.test, mq_sendrecv-read.test,
and mq_sendrecv-write.test.

8 years agotests: skip times.test if CLOCK_PROCESS_CPUTIME_ID does not work
Dmitry V. Levin [Tue, 8 Nov 2016 15:32:47 +0000 (15:32 +0000)]
tests: skip times.test if CLOCK_PROCESS_CPUTIME_ID does not work

* tests/times.c (main): Skip if clock_gettime consistenly returns zero
for CLOCK_PROCESS_CPUTIME_ID timer.

8 years agotests: add tests for perf_event_attr structure decoding in perf_event_open
Eugene Syromyatnikov [Sun, 2 Oct 2016 22:35:53 +0000 (01:35 +0300)]
tests: add tests for perf_event_attr structure decoding in perf_event_open

* configure.ac: Add checks for presence of various fields of struct
perf_event_attr defined in kernel headers.
* tests/perf_event_open.c: New file.
* tests/perf_event_open_unabbrev.c: Likewise.
* tests/perf_event_open.test: New test.
* tests/perf_event_open_unabbrev.test: Likewise.
* tests/.gitignore: Add perf_event_open, perf_event_open_unabbrev.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add perf_event_open.test, perf_event_open_unabbrev.test.

8 years agoImplement decoding of perf_event_attr structure in perf_event_open syscall
Eugene Syromyatnikov [Sat, 3 Sep 2016 11:44:48 +0000 (14:44 +0300)]
Implement decoding of perf_event_attr structure in perf_event_open syscall

* linux/perf_event_struct.h: New file, definition of struct perf_event_attr
from Linux 4.8
* Makefile.am (strace_SOURCES): Add it.
* xlat/hw_breakpoint_len.in: New file.
* xlat/hw_breakpoint_type.in: Likewise.
* xlat/perf_attr_size.in: Likewise.
* xlat/perf_branch_sample_type.in: Likewise.
* xlat/perf_event_read_format.in: Likewise.
* xlat/perf_event_sample_format.in: Likewise.
* xlat/perf_hw_cache_id.in: Likewise.
* xlat/perf_hw_cache_op_id.in: Likewise.
* xlat/perf_hw_cache_op_result_id.in: Likewise.
* xlat/perf_hw_id.in: Likewise.
* xlat/perf_sw_ids.in: Likewise.
* xlat/perf_type_id.in: Likewise.
* perf.c [HAVE_LINUX_PERF_EVENT_H]: Remove inclusion of
<linux/perf_event.h>.
(PRINT_XLAT): New macro for simplifying printing values from
sorted xlat.
(printxlat_search): New function, wrapper for xlat_search with behaviour
similar to printval.
(print_perf_event_attr): New print_event_attr structure fetching and
printing function.
(SYS_FUNC(perf_event_open)): Use print_perf_event_attr for displaying
attr argument contents.
* tests/perf_event_open.c: Renamed to
tests/perf_event_open_nonverbose.c.
* tests/perf_event_open.test: add -e verbose=none in order to preserve
output format being checked (in case verbose output is enabled,
contents of attr arguments are shown now); rename to
tests/perf_event_open_nonverbose.test; add -e trace=perf_event_open.

8 years agotests: fix name spelling
Eugene Syromyatnikov [Sun, 30 Oct 2016 20:44:50 +0000 (23:44 +0300)]
tests: fix name spelling

8 years agotests: fix name spelling
Eugene Syromyatnikov [Sun, 30 Oct 2016 20:44:50 +0000 (23:44 +0300)]
tests: fix name spelling

8 years agoUpdate NEWS
Eugene Syromyatnikov [Sat, 29 Oct 2016 01:34:37 +0000 (04:34 +0300)]
Update NEWS

8 years agoFix typo in comment in tests/quotactl.h
Eugene Syromyatnikov [Sun, 30 Oct 2016 20:16:34 +0000 (23:16 +0300)]
Fix typo in comment in tests/quotactl.h

8 years agotests: fix invalid pointer checks in quotactl test
Eugene Syromyatnikov [Sun, 30 Oct 2016 19:28:37 +0000 (22:28 +0300)]
tests: fix invalid pointer checks in quotactl test

* tests/quotactl.h (bogus_special, bogus_addr): Move it...
* tests/quotactl.c (main): ... here; remove static and const qualifiers,
use memory after tail_alloc instead of magic numbers.
* tests/quotactl-xfs.c (main): Likewise.

8 years agotests: fix invalid pointer checks in getcpu test
Eugene Syromyatnikov [Sun, 30 Oct 2016 19:27:55 +0000 (22:27 +0300)]
tests: fix invalid pointer checks in getcpu test

* test/getcpu.c (main): Replace magic numbers deemed invalid pointers
with addresses after memory returned by tail_alloc.

8 years agotests: fix invalid pointer checks in request_key test
Eugene Syromyatnikov [Sun, 30 Oct 2016 19:27:18 +0000 (22:27 +0300)]
tests: fix invalid pointer checks in request_key test

* test/request_key.c (main): Replace magic numbers deemed invalid pointers
with addresses after memory returned by tail_alloc.

8 years agotests: fix invalid pointer checks in add_key test
Eugene Syromyatnikov [Sun, 30 Oct 2016 19:27:07 +0000 (22:27 +0300)]
tests: fix invalid pointer checks in add_key test

* test/add_key.c (main): Replace magic numbers deemed invalid pointers
with addresses after memory returned by tail_alloc.

8 years agostatfs: use printxval_search
Eugene Syromyatnikov [Sat, 29 Oct 2016 02:29:15 +0000 (05:29 +0300)]
statfs: use printxval_search

* print_statfs.c (print_statfs_type): Use printxval_search for printing
FS magic xlat value.

8 years agoutil: add printing helper for sorted xlat arrays
Eugene Syromyatnikov [Sat, 29 Oct 2016 02:26:50 +0000 (05:26 +0300)]
util: add printing helper for sorted xlat arrays

* util.c (printxval_searchn): New function.
* defs.h (printxval_searchn): New prototype.
(printxval_search): New helper macro useful in conjunction with static
xlat arrays.

8 years agodefs: add check for argument being array to ARRAY_SIZE macro
Eugene Syromyatnikov [Sat, 29 Oct 2016 02:24:08 +0000 (05:24 +0300)]
defs: add check for argument being array to ARRAY_SIZE macro

* gcc_compat.h [GNUC_PREREQ(3, 0)] (BUILD_BUG_ON_ZERO): New macro.
(SAME_TYPE, MUST_BE_ARRAY): Likewise.
* defs.h (ARRAY_SIZE): Add MUST_BE_ARRAY for build-time type check.

8 years agotests: check decoding of oldfstat, oldlstat, and oldstat syscalls
Eugene Syromyatnikov [Mon, 24 Oct 2016 01:50:36 +0000 (04:50 +0300)]
tests: check decoding of oldfstat, oldlstat, and oldstat syscalls

* tests/oldfstat.c: New file.
* tests/oldlstat.c: Likewise.
* tests/oldstat.c: Likewise.
* tests/oldfstat.test: New test.
* tests/oldlstat.test: Likewise.
* tests/oldstat.test: Likewise.
* tests/xstatx.c [!OLD_STAT]: define OLD_STAT to 0.
(print_stat) [OLD_STAT]: Print predefined values for
st_blksize/st_blocks.
(print_stat): Check for !OLD_STAT in nanosecond precision checks.
(main) [OLD_STAT]: Ignore EOVERFLOW.
(main): Test for successful rc in returned size value check;
print address only on non-successful rc.
* tests/.gitignore: Add oldfstat, oldlstat, and oldstat.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(DECODER_TESTS): Add oldfstat.test, oldlstat.test, and oldstat.test.

8 years agotests: additional tests of stat decoders
Eugene Syromyatnikov [Wed, 19 Oct 2016 08:11:41 +0000 (11:11 +0300)]
tests: additional tests of stat decoders

* tests/fstatx.c (IS_FSTAT): Define to 1.
* tests/fstatat64.c [__GLIBC__ && __sparc64__] (TEST_BOGUS_STRUCT_STAT):
Define to 0.
* tests/xstatx.c [!IS_STAT] (IS_STAT): Define to 0.
[!TEST_BOGUS_STRUCT_STAT] (TEST_BOGUS_STRUCT_STAT): Define to 1.
(main): Add a check for non-available pointer and a check
for block device file.
* tests/statx.sh: Add tracing of /dev/full file, specify alignment.
* tests/fstat.test: Specify alignment.

8 years agotests: prepare for additional tests of stat decoders
Eugene Syromyatnikov [Wed, 19 Oct 2016 08:11:41 +0000 (11:11 +0300)]
tests: prepare for additional tests of stat decoders

PRINT_SYSCALL_HEADER/PRINT_SYSCALL_FOOTER now contain open/close brace
pair in order to save errno.  PRINT_SYSCALL_FOOTER now uses sprintrc for
printing rc/errno.

* tests/xstatx.c: Include <errno.h>.
(main): Update PRINT_SYSCALL_FOOTER call convention.
* tests/fstatat.c (PRINT_SYSCALL_HEADER): Add errno saving.
(PRINT_SYSCALL_FOOTER): Restore errno.
* tests/fstatx.c: Likewise.
* tests/lstatx.c: Likewise.

8 years agoProvide a safe definition of O_ACCMODE
Dmitry V. Levin [Fri, 28 Oct 2016 02:19:58 +0000 (02:19 +0000)]
Provide a safe definition of O_ACCMODE

Some libcs e.g. musl are guilty of messing up with O_ACCMODE.

* open.c (O_ACCMODE): Redefine to 03.

8 years agoImplement dumping of mq_timedsend and mq_timedreceive syscalls
Eugene Syromyatnikov [Thu, 27 Oct 2016 08:09:07 +0000 (11:09 +0300)]
Implement dumping of mq_timedsend and mq_timedreceive syscalls

* syscall.c (dumpio): Add SEN_mq_timedreceive and SEN_mq_timedsend.

8 years agomq: print msg_prio as a pointer, not as an immediate value
Eugene Syromyatnikov [Thu, 27 Oct 2016 07:14:49 +0000 (10:14 +0300)]
mq: print msg_prio as a pointer, not as an immediate value

* mq.c (SYS_FUNC(mq_timedreceive)): Use printnum_int for printing
msg_prio argument.

8 years agomq: print msg payload only in case of successful mq_timedreceive call
Eugene Syromyatnikov [Thu, 27 Oct 2016 07:12:32 +0000 (10:12 +0300)]
mq: print msg payload only in case of successful mq_timedreceive call

Also, use u_rval for determining message size.

* mq.c (SYS_FUNC(mq_timedreceive)): Check for syserror and non-negative
u_rval before calling printstr on msg_ptr argument, or use printaddr otherwise;
provide u_rval as string size.