Commit Graph

5450 Commits

Author SHA1 Message Date
6b4efe9f01 strace.c: refactor trace into two functions
This change decouples waiting for next event from reacting to it.  This
makes the control flow easier to understand, and serves as a preparation
for implementing a pull-style API for LuaJIT.

* strace.c (enum trace_event): New enum.
(trace): Split into ...
(next_event, dispatch_event): ... new functions.
(main): Use them.
2017-06-02 14:20:09 +00:00
a25d7521ef scno.am: include config.h before syscallent.h
This fixes generation of syscallent.i and subsequent scno.h files
on mips where syscallent.h checks macros defined in config.h.

* scno.am (syscallent.i): Add $(top_builddir)/config.h
to prerequisites, include it.
* NEWS: Mention this fix.

Reported-by: David Robins <dbrobins@i4031.net>
2017-05-30 22:44:47 +00:00
0bcfa7b5cb tests: check decoding of sigaction syscall
* tests/sigaction.c: New file.
* tests/gen_tests.in (sigaction): New entry.
* tests/pure_executables.list: Add sigaction.
* tests/.gitignore: Likewise.
2017-05-28 17:13:29 +00:00
7830648b9f tests: rename sigaction.test to rt_sigaction.test
* tests/sigaction.awk: Rename to rt_sigaction.awk.
* tests/sigaction.c: Rename to tests/rt_sigaction.c.
* tests/sigaction.test: Rename to tests/rt_sigaction.test.
* tests/.gitignore: Replace sigaction with rt_sigaction.
* tests/pure_executables.list: Likewise.
* tests/Makefile.am (DECODER_TESTS): Replace sigaction.test
with rt_sigaction.test.
(EXTRA_DIST): Replace sigaction.awk with rt_sigaction.awk.
2017-05-28 17:13:29 +00:00
5f27295dfd sparc: enhance decoding of signal number argument of sigaction syscall
On sparc, unlike all other architectures, old sigaction syscall takes
a negated signal number.

* signal.c (SYS_FUNC(sigaction)) [SPARC || SPARC64]: Enhance printing
of negative signal number argument.
2017-05-28 17:13:29 +00:00
5061dfccc6 signal: enhance printing of old_sigaction.mask
* signal.c (decode_old_sigaction): Print old_sigaction.mask
using tprint_old_sigmask_val.
2017-05-28 17:13:29 +00:00
a9cdd9f54c signal: limit scope of struct old_sigaction32 definition
* signal.c (struct old_sigaction32): Define only if [!current_wordsize].
2017-05-28 17:13:29 +00:00
337d3a10ce signal: fix decoding of struct old_sigaction on some architectures
On alpha, struct old_sigaction.sa_flags has a 32-bit type.

On mips, only first word of old_sigaction.sa_mask is read.

On all architectures except alpha and mips that have old sigaction
syscall, struct old_sigaction has sa_restorer field that has to be
decoded.

* signal.c (struct old_sigaction) [ALPHA]: Change sa_flags type
to unsigned int, add ATTRIBUTE_PACKED.
[MIPS]: Dhrink sa_mask array to 1 element.
[!ALPHA && !MIPS]: Define sa_restorer field unconditionally.
(struct old_sigaction32): Likewise.
(decode_old_sigaction) [!current_wordsize]: Initialize sa_restorer field
from old_sigaction32.sa_restorer unconditionally.
[!ALPHA && !MIPS]: Print old_sigaction.sa_restorer if SA_RESTORER flag
is set.
* NEWS: Mention this change.
2017-05-28 17:13:29 +00:00
a560ac718e xlat: rename SA_STACK to SA_ONSTACK
SA_ONSTACK is the standard name while its alias SA_STACK is not even
defined on many platforms.

* xlat/sigact_flags.in (SA_STACK): Rename to SA_ONSTACK.
2017-05-28 17:13:29 +00:00
221da524ad tests: check decoding of sigpending syscall
* tests/sigpending.c: New file.
* tests/gen_tests.in (sigpending): New entry.
* tests/pure_executables.list: Add sigpending.
* tests/.gitignore: Likewise.
2017-05-28 00:09:52 +00:00
6715387c5c tests: check decoding of sigprocmask syscall
* tests/sigprocmask.c: New file.
* tests/gen_tests.in (sigprocmask): New entry.
* tests/pure_executables.list: Add sigprocmask.
* tests/.gitignore: Likewise.
2017-05-28 00:09:45 +00:00
1570421357 alpha: rename sys_sigprocmask to sys_osf_sigprocmask
Parsers of sigprocmask and osf_sigprocmask syscalls are different
anyway, so rename the function to match the syscall name.

* signal.c [ALPHA] (SYS_FUNC(sigprocmask)): Rename
to SYS_FUNC(osf_sigprocmask).
* linux/alpha/syscallent.h: Update sys_func.
2017-05-28 00:09:32 +00:00
556edf91e3 Enable coverage when strace is self terminated by signal
The data collected by -fprofile-arcs during program run is saved
on program exit.  When program is terminated by signal, the data
is not saved.  However, libgcov provides an interface to dump
the data at runtime.

* m4/ax_code_coverage.m4 (AX_CODE_COVERAGE): Add -DENABLE_COVERAGE_GCOV
to CODE_COVERAGE_CPPFLAGS.
* strace.c [ENABLE_COVERAGE_GCOV] (__gcov_flush): New prototype.
(main) [ENABLE_COVERAGE_GCOV]: Call __gcov_flush() before raise()
and sigprocmask() calls that might cause program termination.
2017-05-27 18:58:31 +00:00
ae1b07bc2a tests: check termination signal forwarding
* tests/run_expect_termsig.c: New file.
* tests/unblock_reset_raise.c: Likewise.
* tests/termsig.test: New test.
* tests/.gitignore: Add run_expect_termsig and unblock_reset_raise.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(MISC_TESTS): Add termsig.test.
2017-05-27 17:59:44 +00:00
47b93f2a7a Fix termination signal forwarding
When traced command is terminated by a blocked signal, unblock
that signal to ensure strace termination with the same signal.

* strace.c (main): Unblock the signal raised for strace termination.
* NEWS: Mention this change.
2017-05-27 17:59:44 +00:00
e97a66faa1 Do not reset SIGCHLD handler in tracees to SIG_DFL
While strace resets SIGCHLD handler to the default action so that
waitpid definitely works without losing track of children, tracees
should not inherit this change.

* strace.c (struct exec_params): Add child_sa field.
(init): When setting SIGCHLD handler to SIG_DFL, save the old handler.
(exec_or_die): Restore SIGCHLD handler if it was different from SIG_DFL
at startup.
* NEWS: Mention this change.
2017-05-27 17:59:44 +00:00
e0fd7e7035 Refactor setting of signal handlers to reduce redundancy
* strace.c (set_sigaction): New function.
(init): Use it instead of sigaction with sigaddset.
2017-05-27 17:59:44 +00:00
2d2bc8fdc1 tests: check how signals are unblocked in interactive mode
* tests/block_reset_raise_run.c: New file.
* tests/interactive_block.test: New test.
* tests/.gitignore: Add block_reset_raise_run.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(MISC_TESTS): Add interactive_block.test.
2017-05-27 10:00:43 +00:00
f83b49b03a Fix unblocking of signals in interactive mode
In interactive mode (-I2), those signals that were blocked at startup
will remain blocked for the whole period of strace execution.

* strace.c (empty_set): Rename to start_set.  All users changed.
(init): Initialize start_set and blocked_set to the set of currently
blocked signals.
(startup_attach, trace): Use SIG_SETMASK instead of SIG_BLOCK.
* NEWS: Mention this change.
2017-05-27 10:00:43 +00:00
ab2efa7a54 Cleanup interactive check
* strace.c (init): Check for INTR_WHILE_WAIT mode the same way
as in other places.
2017-05-26 23:16:57 +00:00
ea64209ef7 tests: check decoding of signal syscall
* tests/signal.c: New file.
* tests/gen_tests.in (signal): New entry.
* tests/pure_executables.list: Add signal.
* tests/.gitignore: Likewise.
2017-05-26 20:42:13 +00:00
d86b6bc773 Unify capitalisation of (c) in copyright notices 2017-05-26 19:43:11 +00:00
b77b04744a Post-release administrivia
* NEWS: Add a header line for the next release.
* debian/changelog.in: Add a changelog entry for 4.17-1.
* strace.spec.in: Likewise.
2017-05-25 19:42:20 +00:00
23ed9034c8 Prepare for 4.17 release
* NEWS: Update for 4.17 release.
v4.17
2017-05-24 16:17:18 +00:00
050f9003e3 powerpc64, sparc, sparc64: wire up statx syscall
* linux/powerpc64/syscallent.h [383]: Add statx entry.
* linux/sparc/syscallent.h [360]: Likewise.
* linux/sparc64/syscallent.h [360]: Likewise.
2017-05-24 16:17:18 +00:00
3b97ee486b Fix compat personality support for sgetmask syscall
* signal.c (SYS_FUNC(sgetmask)): Replace sprintsigmask_val
with sprint_old_sigmask_val.
* tests/sxetmask.c (main): Check decoding of signal mask containing
RT signals.
2017-05-23 23:20:18 +00:00
ba0bd3f1ec Fix decoding of sgetmask and ssetmask syscalls
Old ssetmask syscall takes an argument and returns a value of type int.
Old sgetmask syscall may return an error.

* signal.c (SYS_FUNC(ssetmask)): Explicitly convert the argument
and return value to unsigned int, print it using sprint_old_sigmask_val.
(SYS_FUNC(sgetmask)): Do not print the mask in case of syserror.
* tests/sxetmask.c: New file.
* tests/gen_tests.in (sxetmask): New entry.
* tests/pure_executables.list: Add sxetmask.
* tests/.gitignore: Likewise.
* NEWS: Mention this fix.
2017-05-22 17:33:51 +00:00
9d095c7860 Add copyright headers 2017-05-22 17:33:51 +00:00
c2930b90ae Add scripts for automating copyright notices update
* maint/update_copyright_years.awk: New file.
* maint/update_copyright_years.sh: Likewise.

Co-authored-by: Elvira Khabirova <lineprinter0@gmail.com>
2017-05-22 19:30:30 +02:00
e83c44c28e Fix typos in copyright notices 2017-05-22 19:11:06 +02:00
032f0667ba unwind.c: remove non-ASCII character from comment 2017-05-22 19:11:06 +02:00
2a2347b5bd Rename sys_sig[gs]etmask to sys_s[gs]etmask to match syscall names
* signal.c (SYS_FUNC(sigsetmask)): Rename to SYS_FUNC(ssetmask).
(SYS_FUNC(siggetmask)): Rename to SYS_FUNC(sgetmask).
* linux/arm/syscallent.h (sgetmask, ssetmask): Update sys_func.
* linux/bfin/syscallent.h: Likewise.
* linux/crisv10/syscallent.h: Likewise.
* linux/hppa/syscallent.h: Likewise.
* linux/i386/syscallent.h: Likewise.
* linux/m68k/syscallent.h: Likewise.
* linux/microblaze/syscallent.h: Likewise.
* linux/mips/syscallent-o32.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/powerpc64/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
2017-05-21 17:51:01 +00:00
95ccc828fe tests: enhance sigsuspend.test
* tests/sigsuspend.c (sigtxt): New variable.
(main): Change signal masks to contain all signals except USR1 and USR2.
2017-05-21 14:37:48 +00:00
eb446e3cd8 Fix compat personality support for old sigsuspend syscall
* signal.c (sprint_old_sigmask_val): New function.
(tprint_old_sigmask_val): New macro.
(SYS_FUNC(sigsuspend)): Use it.
2017-05-20 20:17:59 +00:00
d70a3112a0 Move errnoent.sh, signalent.sh, and syscallent.sh to maint subdirectory
Also do not include them into release tarballs.  These files are
intended for developers who are expected to use a git repository.

* errnoent.sh: Move to maint subdirectory.
* signalent.sh: Likewise.
* syscallent.sh: Likewise.
* HACKING-scripts: Update.
* Makefile.am (EXTRA_DIST): Remove errnoent.sh, signalent.sh,
and syscallent.sh.
2017-05-16 02:11:35 +00:00
30dc3ce6bc Do not include maint subdirectory into release tarballs
These files are intended for developers who are expected to use
a git repository.

* Makefile.am (EXTRA_DIST): Remove maint/ioctls_gen.sh,
maint/ioctls_hex.sh, maint/ioctls_sym.sh, and maint/print_ioctlent.c.
2017-05-16 02:11:35 +00:00
83435b8ab6 linux/ia64/syscallent.h: remove tabulation, add spaces in file comment 2017-05-01 19:19:10 +00:00
27710b7348 linux/mtd-abi.h: remove non-ASCII character from file comment 2017-05-01 19:19:09 +00:00
d852b31a8b alpha, cris, mips, ppc, sh, sparc: fix decoding of sigsuspend syscall
On some architectures old sigsuspend syscall takes the signal mask from
the 3rd argument, on some from the 1st.  And, if it wasn't peculiar
enough, the signal mask is passed by value on all architectures except
mips where it's passed by reference.

* signal.c (SYS_FUNC(sigsuspend)): Take the signal mask from the last
argument.
* linux/alpha/syscallent.h (sigsuspend): Set nargs to 1.
* linux/crisv10/syscallent.h: Likewise.
* linux/mips/syscallent-o32.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/powerpc64/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* tests/sigsuspend.c: New file.
* tests/gen_tests.in (sigsuspend): New entry.
* tests/pure_executables.list: Add sigsuspend.
* tests/.gitignore: Likewise.
* NEWS: Mention this fix.
2017-05-01 14:49:26 +00:00
d5959c52ab tests: raise default timeout for individual tests
Recently added tests based on pure_executables.list are quite slow
by their nature, the one minute default timeout is no longer enough
for some of not so fast architectures.

* tests/init.sh (TIMEOUT_DURATION): Raise from 60 to 120.
2017-05-01 14:49:26 +00:00
b0ef7be9a0 Update NEWS 2017-05-01 14:49:26 +00:00
eeca4bdd5d Update TCP_* constants
* xlat/socktcpoptions.in: Add TCP_FASTOPEN_CONNECT introduced
by linux kernel commit v4.11-rc1~124^2~321^2.
2017-04-29 00:37:07 +00:00
23790eef0c Update AF_* constants
* xlat/addrfams.in: Add AF_SMC introduced by linux kernel
commit v4.11-rc1~94^2~43^2~13.
2017-04-28 23:34:56 +00:00
ab25ab1f43 tests: enhance madvise decoder check
* tests/mmap.c (main): Remove madvise check.
* tests/madvise.c: New file.
* tests/gen_tests.in (madvise): New entry.
* tests/.gitignore: Add madvise.
* tests/pure_executables.list: Likewise.
2017-04-27 23:16:33 +00:00
bfcf14b7d1 tests: add -etrace=?... test
Check for some architecture-specific syscalls which are not present
on most architectures.

* gen_tests.in: Add trace_question test.
* tests/trace_question.in: New file.
* tests/Makefile.am (EXTRA_DIST): Add it.
2017-04-25 14:35:47 +00:00
df490b89d1 tests: add more information to generated header comments
* tests/gen_tests.sh: Update header comment with the source string
used for test generation.
2017-04-25 14:35:47 +00:00
b97ac5df12 tests: move generated common header comment into a variable
* tests/gen_tests.sh: Move generated file header comment
into a variable, use it in all cases.
2017-04-25 14:35:47 +00:00
e399ea2f7d tests: use TAIL_ALLOC_OBJECT_CONST_PTR in v4l2 test
* tests/ioctl_v4l2.c (main): Use TAIL_ALLOC_OBJECT_CONST_PTR.
2017-04-25 14:35:47 +00:00
bc8eab0142 tests: Check decoding of VIDIOC_G/S_TUNER's arg
* tests/ioctl_v4l2.c (main): Add checks for VIDIOC_G/S_TUNER's arg.

Signed-off-by: Edgar Kaziahmedov <edos@linux.com>
2017-04-25 14:35:47 +00:00
99bade9917 v4l2: Add decoding for VIDIOC_G/S_TUNER's arg
* v4l2.c: Include "xlat/v4l2_tuner_types.h", "xlat/v4l2_tuner_capabilities.h",
"xlat/v4l2_tuner_rxsubchanses.h", and "xlat/v4l2_tuner_audmodes.h".
(print_v4l2_tuner): New function. Add decoding for VIDIOC_G/S_TUNER's arg.
(v4l2_ioctl): Add new cases for decoding VIDIOC_G/S_TUNER's arg.
* xlat/v4l2_tuner_types.in: Add V4L2_TUNER_RADIO and
V4L2_TUNER_ANALOG_TV introduced by linux kernel commit
2.5.46~39^2~23^2~4.
Add V4L2_TUNER_DIGITAL_TV introduced by linux kernel
commit v2.6.11-rc4~55^2~20.
Add V4L2_TUNER_ADC and V4L2_TUNER_RF introduced by linux kernel commit
v3.15-rc1~85^2~215.
Add V4L2_TUNER_SDR introduced by linux kernel commit v4.4-rc1~118^2~17
(as the replacement of V4L2_TUNER_ADC).
* xlat/v4l2_tuner_capabilities.in: Add V4L2_TUNER_CAP_LOW,
V4L2_TUNER_CAP_NORM, V4L2_TUNER_CAP_STEREO, V4L2_TUNER_CAP_LANG2,
V4L2_TUNER_CAP_SAP, and V4L2_TUNER_CAP_LANG1 introduced by linux kernel
commit 2.5.46~39^2~23^2~4.
Add V4L2_TUNER_CAP_HWSEEK_BOUNDED and V4L2_TUNER_CAP_HWSEEK_WRAP
introduced by linux kernel commit v3.6-rc1~28^2~306.
Add V4L2_TUNER_CAP_RDS introduced by linux commit v2.6.32-rc1~679^2~189.
Add V4L2_TUNER_CAP_RDS_BLOCK_IO and V4L2_TUNER_CAP_RDS_CONTROLS
introduced by linux kernel commit v2.6.37-rc1~64^2~110.
Add V4L2_TUNER_CAP_FREQ_BANDS introduced by linux kernel commit
v3.6-rc1~28^2~46.
Add V4L2_TUNER_CAP_HWSEEK_PROG_LIM introduced by linux kernel commit
v3.6-rc1~28^2~40.
Add V4L2_TUNER_CAP_1HZ introduced by linux kernel commit
v3.15-rc1~85^2~214.
* xlat/v4l2_tuner_audmodes.in: Add V4L2_TUNER_MODE_MONO,
V4L2_TUNER_MODE_STEREO, V4L2_TUNER_MODE_LANG2, V4L2_TUNER_MODE_SAP, and
V4L2_TUNER_MODE_LANG1 introduced by linux kernel commit
2.5.46~39^2~23^2~4.
Add V4L2_TUNER_MODE_LANG1_LANG2 introduced by linux kernel commit
v2.6.17-rc1~739^2~9.
* xlat/v4l2_tuner_rxsubchanses.in: Add V4L2_TUNER_SUB_MONO,
V4L2_TUNER_SUB_STEREO, V4L2_TUNER_SUB_LANG2, V4L2_TUNER_SUB_SAP, and
V4L2_TUNER_SUB_LANG1 introduced by linux kernel commit
2.5.46~39^2~23^2~4.
Add V4L2_TUNER_SUB_RDS introduced by linux kernel commit
v2.6.32-rc1~679^2~189.

Signed-off-by: Edgar Kaziahmedov <edos@linux.com>
2017-04-25 14:35:47 +00:00