]>
granicus.if.org Git - strace/log
Elvira Khabirova [Sun, 7 Jan 2018 02:38:45 +0000 (05:38 +0300)]
strace.c: rename set_sigaction to set_sighandler
Since set_sigaction() actually specifies sa_handler and not sa_sigaction,
rename set_sigaction() to set_sighandler() for future definition of
set_sigaction() function as specifying sa_sigaction.
* strace.c (set_sigaction): Rename to set_sighandler.
All callers updated.
Elvira Khabirova [Sun, 7 Jan 2018 02:38:44 +0000 (05:38 +0300)]
.gitignore: ignore "gnu" directory created by st_MPERS m4 macro
Elvira Khabirova [Sun, 7 Jan 2018 02:38:49 +0000 (05:38 +0300)]
Update .mailmap
* .mailmap (Elvira Khabirova): Add @altlinux.org.
Chen Jingpiao [Sat, 18 Nov 2017 15:48:52 +0000 (23:48 +0800)]
.mailmap: add canonical name for Chen Jingpiao
* .mailmap: Add canonical name for Chen Jingpiao.
Dmitry V. Levin [Sun, 7 Jan 2018 00:05:42 +0000 (00:05 +0000)]
personality.c: use sprintxval
* personality.c (SYS_FUNC(personality)): Use sprintxval instead of local
implementation.
Eugene Syromiatnikov [Sat, 5 Aug 2017 14:19:15 +0000 (16:19 +0200)]
xlat.c: add sprintxval for printing xval to string
* defs.h (sprintxval): New declaration.
(sprintxval): New function.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
desc.c: use xsnprintf instead of sprintf
* desc.c: Include "xstring.h".
(decode_select): Replace sprintf with xsnprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
xlat.c: use xsnprintf instead of sprintf
* xlat.c: Include "xstring.h".
(sprintflags): Replace sprintf with xsnprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
open.c: use xsnprintf instead of sprintf
* open.c: Include "xstring.h".
(sprint_open_modes): Replace sprintf with xsnprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
poll.c: use xs*printf instead of sprintf
* poll.c: Include "xstring.h".
(decode_poll_exiting): Replace sprintf with xsnprintf and xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
signal.c: use xs*printf instead of sprintf
* signal.c: Include "xstring.h".
(signame): Replace sprintf with xsprintf.
(sprintsigmask_n): Replace sprintf with xsnprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
print_timeval.c: use xsprintf instead of snprintf
* print_timeval.c: Include "xstring.h".
(sprint_timeval, sprint_timeval32): Replace snprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
print_timespec.c: use xsprintf instead of snprintf
* print_timespec.c: Include "xstring.h".
(sprint_timespec): Replace snprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
mmsghdr.c: use xsprintf instead of snprintf
* mmsghdr.c: Include "xstring.h".
(SYS_FUNC(recvmmsg)): Replace snprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
socketutils.c: use xsprintf instead of snprintf
* socketutils.c: Include "xstring.h".
(unix_parse_response): Replace snprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
alpha.c: use xsprintf instead of snprintf
* alpha.c: Include "xstring.h".
(decode_getxxid): Replace snprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
v4l2.c: use xsprintf instead of sprintf
* v4l2.c: Include "xstring.h".
(print_v4l2_create_buffers): Replace sprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
util.c: use x*sprintf instead of s*printf
* util.c: Include "xstring.h".
(sprinttime_ex): Replace snprintf with xsnprintf.
(getfdproto): Replace sprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
unwind.c: use xsprintf instead of sprintf
* unwind.c: Include "xstring.h".
(build_mmap_cache): Replace sprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
syscall.c: use xsprintf instead of sprintf
* syscall.c: Include "xstring.h".
(get_scno): Replace sprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
resource.c: use xsprintf instead of sprintf
* resource.c: Include "xstring.h".
(sprint_rlim64, sprint_rlim32): Replace sprintf with xsprintf.
Dmitry V. Levin [Sat, 6 Jan 2018 01:45:16 +0000 (01:45 +0000)]
pathtrace.c: use xsprintf instead of sprintf
* pathtrace.c: Include "xstring.h".
(getfdpath): Replace sprintf with xsprintf.
Eugene Syromyatnikov [Fri, 5 Jan 2018 20:03:21 +0000 (21:03 +0100)]
ldt.c: replace sprintf with xsprintf
* ldt.c: Include "xstring.h".
(SYS_FUNC(set_thread_area)): Replace sprintf with xsprintf.
Dmitry V. Levin [Fri, 5 Jan 2018 01:18:05 +0000 (01:18 +0000)]
strace.c: use xsprintf instead of sprintf
* strace.c: Include "xstring.h".
(strerror, newoutf, attach_tcb, print_debug_info): Replace sprintf
with xsprintf.
Eugene Syromyatnikov [Fri, 5 Jan 2018 02:51:19 +0000 (03:51 +0100)]
ioprio.c: use xsprintf instead of sprintf
* ioprio.c: Include "xstring.h".
(sprint_ioprio): Replace sprintf with xsprintf.
Eugene Syromyatnikov [Fri, 5 Jan 2018 01:18:05 +0000 (02:18 +0100)]
Introduce hardened xsprintf/xsnprintf macros
Let's try to future/fool-proof code a bit by introducing variants
of sprintf/snprintf that die if an overflow (or an error) occurs.
They are deemed to be the default choice for printing to some local
string buffer where no sensible error handling is implemented.
* xstring.h: New file.
* Makefile.am (strace_SOURCES): Add it.
Eugene Syromyatnikov [Fri, 5 Jan 2018 02:18:13 +0000 (03:18 +0100)]
count.c: use %9.u conversion specification
Instead of printing to a temporary string. This also fixes a subtle bug
when the output for a billion errors and more is cut and shown
incorrectly.
* count.c (struct call_counts): Change type of calls and errors fields
to unsigned int since they are used and printed as unsigned anyway.
(call_summary_pers): Remove error_str. Print cc->errors
and error_cum using %9.u conversion specification.
Eugene Syromyatnikov [Fri, 5 Jan 2018 02:00:45 +0000 (03:00 +0100)]
count.c: use personality_names in call_summary report caption
Otherwise the title is quite misleading for x32 personality.
* count.c (call_summary): Use personality_names.
Victor Krapivensky [Fri, 5 Jan 2018 01:57:52 +0000 (02:57 +0100)]
Move personality names to a global variable
This is a part of "Prepare for adding support for Lua scripting"
commit.
* defs.h (personality_names): New external constant declaration.
* syscall.c: (personality_names): New global variable.
(update_personality): Use personality_names for reporting personality
name.
Co-Authored-by: Eugene Syromyatnikov <evgsyr@gmail.com>
Lubomir Rintel [Wed, 22 Nov 2017 12:04:35 +0000 (13:04 +0100)]
strace.spec.in: include Bluetooth headers for AF_BLUETOOTH sockets decoding
* strace.spec.in (BuildRequires): Add pkgconfig(bluez).
Dmitry V. Levin [Thu, 4 Jan 2018 10:52:07 +0000 (10:52 +0000)]
Lift artificial limit on output file names in -ff mode
Starting with commit v4.5.19~88 strace imposed an artificial limit
on output file names in -ff mode, leading to the following absurd
behaviour:
$ strace -ff -o"$(perl -e 'print "/" x 510')/$PWD/log" /bin/true
strace: Can't fopen '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////.12345': Permission denied
* strace.c (newoutf): Raise buffer size to PATH_MAX.
(init) <followfork >= 2>: Check output file name prefix length.
* tests/options-syntax.test: Check it.
Dmitry V. Levin [Thu, 4 Jan 2018 00:23:04 +0000 (00:23 +0000)]
configure.ac: fix typo
* configure.ac: Replace CPPFALGS with CPPFLAGS.
Fixes: v4.20-85-gf9c8e8a ("unwind: demangle symbol names")
Eugene Syromiatnikov [Mon, 25 Dec 2017 22:52:48 +0000 (23:52 +0100)]
Change the first argument of upeek from pid to tcp
All users were changed automatically by:
for i in `git grep -l 'upeek(tcp->pid'`; do \
sed -i 's/upeek(tcp->pid/upeek(tcp/g' "$i"; \
done
* upeek.c (upeek): Change the first argument from pid_t pid to struct
tcb *tcp. Use tcp->pid instead of pid in the function's body.
* defs.h (upeek): Update declaration.
* linux/alpha/arch_getrval2.c: Pass tcp instead of tcp->pid to the
upeek calls.
* linux/alpha/arch_rt_sigframe.c: Likewise.
* linux/alpha/arch_sigreturn.c: Likewise.
* linux/alpha/get_scno.c: Likewise.
* linux/alpha/get_syscall_args.c: Likewise.
* linux/alpha/get_syscall_result.c: Likewise.
* linux/bfin/arch_rt_sigframe.c: Likewise.
* linux/bfin/get_scno.c: Likewise.
* linux/bfin/get_syscall_args.c: Likewise.
* linux/bfin/get_syscall_result.c: Likewise.
* linux/crisv10/arch_rt_sigframe.c: Likewise.
* linux/crisv10/get_scno.c: Likewise.
* linux/crisv10/get_syscall_args.c: Likewise.
* linux/crisv10/get_syscall_result.c: Likewise.
* linux/hppa/arch_rt_sigframe.c: Likewise.
* linux/hppa/get_scno.c: Likewise.
* linux/hppa/get_syscall_args.c: Likewise.
* linux/hppa/get_syscall_result.c: Likewise.
* linux/microblaze/arch_rt_sigframe.c: Likewise.
* linux/microblaze/arch_sigreturn.c: Likewise.
* linux/microblaze/get_scno.c: Likewise.
* linux/microblaze/get_syscall_args.c: Likewise.
* linux/microblaze/get_syscall_result.c: Likewise.
* linux/powerpc/getregs_old.c: Likewise.
* linux/sh/arch_getrval2.c: Likewise.
* linux/sh/arch_rt_sigframe.c: Likewise.
* linux/sh/get_scno.c: Likewise.
* linux/sh/get_syscall_args.c: Likewise.
* linux/sh/get_syscall_result.c: Likewise.
* linux/sh64/get_scno.c: Likewise.
* linux/sh64/get_syscall_args.c: Likewise.
* linux/sh64/get_syscall_result.c: Likewise.
* linux/xtensa/arch_rt_sigframe.c: Likewise.
* linux/xtensa/get_scno.c: Likewise.
* linux/xtensa/get_syscall_args.c: Likewise.
* linux/xtensa/get_syscall_result.c: Likewise.
* syscall.c: Likewise.
Eugene Syromiatnikov [Mon, 25 Dec 2017 22:49:40 +0000 (23:49 +0100)]
Change argument of getregs_old from pid to tcp
* linux/powerpc/getregs_old.c (getregs_old): Change the first argument
from pid_t pid to struct tcb *tcp. Replace all instances of pid with
tcp->pid.
* linux/x86_64/getregs_old.c (getregs_old): Likewise.
* linux/x86_64/getregs_old.h (getregs_old): Update declaration.
* syscall.c (get_regs) [HAVE_GETREGS_OLD]: Pass tcp to the getregs_old
call instead of tcp->pid.
Eugene Syromiatnikov [Mon, 25 Dec 2017 22:45:04 +0000 (23:45 +0100)]
Change the first argument of upoke from pid to tcp
Users were updated automatically by:
for i in `git grep -l 'upoke(tcp->pid'`; do \
sed -i 's/upoke(tcp->pid/upoke(tcp/g' "$i"; \
done
* upoke.c (upoke): Change the first argument from pid_t pid to struct
tcb *tcp. Use tcp->pid instead of pid in the function's body.
* defs.h (upoke): Update declaration.
* linux/alpha/set_error.c (arch_set_error, arch_set_success): Provide
tcp in the first argument of the upoke call instead of tcp->pid.
* linux/alpha/set_scno.c (arch_set_scno): Likewise.
* linux/bfin/set_error.c (arch_set_error, arch_set_success): Likewise.
* linux/bfin/set_scno.c (arch_set_scno): Likewise.
* linux/crisv10/set_error.c (arch_set_error, arch_set_success):
Likewise.
* linux/crisv10/set_scno.c (arch_set_scno): Likewise.
* linux/hppa/set_error.c (arch_set_error, arch_set_success): Likewise.
* linux/hppa/set_scno.c (arch_set_scno): Likewise.
* linux/i386/set_error.c (arch_set_error, arch_set_success): Likewise.
* linux/i386/set_scno.c (arch_set_scno): Likewise.
* linux/microblaze/set_error.c (arch_set_error, arch_set_success):
Likewise.
* linux/microblaze/set_scno.c (arch_set_scno): Likewise.
* linux/powerpc/set_error.c (arch_set_error, arch_set_success):
Likewise.
* linux/powerpc/set_scno.c (arch_set_scno): Likewise.
* linux/sh/set_error.c (arch_set_error, arch_set_success): Likewise.
* linux/sh/set_scno.c (arch_set_scno): Likewise.
* linux/sh64/set_error.c (arch_set_error, arch_set_success): Likewise.
* linux/sh64/set_scno.c (arch_set_scno): Likewise.
* linux/x86_64/set_error.c (arch_set_error, arch_set_success): Likewise.
* linux/x86_64/set_scno.c (arch_set_scno): Likewise.
* linux/xtensa/set_error.c (arch_set_error, arch_set_success): Likewise.
* linux/xtensa/set_scno.c (arch_set_scno): Likewise.
Eugene Syromiatnikov [Mon, 25 Dec 2017 22:39:40 +0000 (23:39 +0100)]
Move enum trace_event into a separate header
As it will have users outside strace.c in the future.
* trace_event.h (enum trace_event): Move it from...
* strace.c (enum trace_event): ...here.
(#include "trace_event.h"): New header, for enum trace_event.
* Makefile.am (strace_SOURCES): Add trace_event.h.
Eugene Syromyatnikov [Wed, 3 Jan 2018 16:36:25 +0000 (17:36 +0100)]
Call get_scno during startup_tcb only for forcibly attached processes
Otherwise it makes little sense on most arches to try to get syscall
number.
* defs.h (TCB_GRABBED): New tcb flag.
* strace.c (attach_tcb): Set TCB_GRABBED for the tcb.
(startup_tcb): Call get_scno() only if process is grabbed and its
registers may contain syscall number information.
Reported-by: Dmitry V. Levin <ldv@altlinux.org>
Closes: https://github.com/strace/strace/issues/22
Eugene Syromyatnikov [Mon, 1 Jan 2018 16:33:13 +0000 (17:33 +0100)]
strace.c: sort getopt switch branches alphabetically
There's no reason to have them out of order. This also (almost) matches
their order in the getopt call argument, introduced in
v4.20-64-g61c03be .
* strace.c (init): Sort branches in the getopt switch routine.
Eugene Syromyatnikov [Sun, 31 Dec 2017 16:57:33 +0000 (17:57 +0100)]
strace.c: check for (non)zero argc instead of argv[0]
Since we can never be sure that we have NULL behind the last entry of
the argv array.
* strace.c (init): Check for non-zero argc before/instead of argv[0].
Eugene Syromyatnikov [Tue, 26 Dec 2017 12:49:05 +0000 (13:49 +0100)]
strace.1: advertise strace-log-merge
In order to raise awareness about strace-log-merge, mention it in
SEE ALSO section and -ff option description.
* strace.1.in (.SS Filtering) <.TP .B \-ff>: Mention strace-log-merge.
(.SH "SEE ALSO"): Likewise.
Dmitry V. Levin [Fri, 29 Dec 2017 17:59:29 +0000 (17:59 +0000)]
unwind: demangle function arguments
* unwind.c (print_stack_frame): Specify demangling style.
* tests/strace-k.test (result): Update regexp.
* tests/strace-k-demangle.test (expected): Update expected output.
Dmitry V. Levin [Fri, 29 Dec 2017 15:20:21 +0000 (15:20 +0000)]
tests: check strace -k symbol names demangling
* tests/strace-k-demangle.test: New test.
* tests/stack-fcall-mangled.c: New file.
* tests/stack-fcall-mangled-0.c: Likewise.
* tests/stack-fcall-mangled-1.c: Likewise.
* tests/stack-fcall-mangled-2.c: Likewise.
* tests/stack-fcall-mangled-3.c: Likewise.
* tests/stack-fcall.h [MANGLE] (f0, f1, f2, f3): New macros.
* tests/.gitignore: Add stack-fcall-mangled.
* tests/Makefile.am (check_PROGRAMS): Likewise.
(stack_fcall_mangled_SOURCES): New variable.
(EXTRA_DIST): Add strace-k-demangle.test.
[USE_LIBUNWIND && USE_DEMANGLE] (LIBUNWIND_TESTS): Likewise.
Dmitry V. Levin [Fri, 29 Dec 2017 15:20:21 +0000 (15:20 +0000)]
tests: parametrize strace-k.test
Prepare for the check of strace -k symbol names demangling.
* tests/strace-k.test: Parametrize $test_prog and $expected.
* tests/stack-fcall.h: New file.
* tests/stack-fcall.c: Include "stack-fcall.h"
* tests/stack-fcall-0.c: Likewise.
* tests/stack-fcall-1.c: Likewise.
* tests/stack-fcall-2.c: Likewise.
* tests/stack-fcall-3.c: Likewise.
* tests/Makefile.am (EXTRA_DIST): Add stack-fcall.h.
Masatake YAMATO [Mon, 18 Dec 2017 04:24:55 +0000 (13:24 +0900)]
unwind: demangle symbol names
Implement demangling of C++ symbol names in stack trace
using cplus_demangle function from GNU libiberty library.
This is an example demangled stack trace output:
fstat(5, {st_mode=S_IFREG|0664, st_size=0, ...}) = 0
> /usr/lib64/libc-2.25.so(__fxstat64+0x12) [0xffd62]
> /usr/lib64/libc-2.25.so(_IO_file_doallocate+0x5f) [0x717ff]
> /usr/lib64/libc-2.25.so(_IO_doallocbuf+0x79) [0x81699]
> /usr/lib64/libc-2.25.so(_IO_file_overflow+0x198) [0x807b8]
> /usr/lib64/libc-2.25.so(_IO_file_xsputn+0xbd) [0x7ed5d]
> /usr/lib64/libc-2.25.so(fwrite_unlocked+0x60) [0x7d800]
> /usr/lib64/libleveldb.so.1.18(leveldb::EnvWrapper::StartThread+0x3b6) [0x48656]
> /usr/lib64/libleveldb.so.1.18(leveldb::log::Writer::EmitPhysicalRecord+0x89) [0x28bc9]
> /usr/lib64/libleveldb.so.1.18(leveldb::log::Writer::AddRecord+0x9e) [0x28d9e]
> /usr/lib64/libleveldb.so.1.18(leveldb::DBImpl::Write+0x208) [0x1ce18]
> /usr/lib64/libleveldb.so.1.18(leveldb::DB::Put+0x59) [0x192b9]
> /usr/lib64/libleveldb.so.1.18(leveldb::DBImpl::Put+0x1d) [0x1931d]
> /home/yamato/var/leveldb/doc/a.out(main+0x120) [0x1107]
> /usr/lib64/libc-2.25.so(__libc_start_main+0xea) [0x2088a]
> /home/yamato/var/leveldb/doc/a.out(_start+0x2a) [0xf3a]
* Makefile.am [USE_DEMANGLE] (strace_CPPFLAGS, strace_LDFLAGS,
libiberty_LDADD): Append libiberty_CPPFLAGS, strace_LDFLAGS, and
libiberty_LIBS, respectively.
* configure.ac: Add --with-libiberty option. Check cplus_demangle
support in libiberty.
* unwind.c [USE_DEMANGLE]: Include <demangle.h>.
(print_stack_frame) [USE_DEMANGLE]: Use cplus_demangle.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Masatake YAMATO [Mon, 18 Dec 2017 04:24:54 +0000 (13:24 +0900)]
Define macros for renaming xmalloc and xcalloc
I'm planning to link strace with libiberty for mangling C++
symbol names in stack trace enabled with -k option.
Both names, xmalloc and xcalloc, are already defined and used
in libiberty, and they conflict with functions in strace.
Rename xmalloc and xcalloc functions defined in strace
to strace_xmalloc and strace_xcalloc, respectively,
to avoid this conflict.
* xmalloc.h (xcalloc, xmalloc): New macros.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Dmitry V. Levin [Sun, 24 Dec 2017 18:49:26 +0000 (18:49 +0000)]
syscall: move a sparc specific include to an arch specific file
* syscall.c [SPARC64]: Do not include <asm/psrcompat.h>.
[SPARC]: Do not include <asm/psr.h>.
* linux/sparc/get_error.c: Include <asm/psr.h>.
Dmitry V. Levin [Sun, 24 Dec 2017 18:49:26 +0000 (18:49 +0000)]
syscall: move all ia64 specific includes to an arch specific file
* syscall.c [IA64]: Remove.
* linux/ia64/get_syscall_args.c: Include <asm/rse.h>.
Dmitry V. Levin [Sun, 24 Dec 2017 16:07:18 +0000 (16:07 +0000)]
syscall: simplify get_syscall_result
* syscall.c [ptrace_getregset_or_getregs] (get_syscall_result_regs):
Define to get_regs.
(get_syscall_result): Use get_syscall_result_regs unconditionally.
Dmitry V. Levin [Sun, 24 Dec 2017 16:07:18 +0000 (16:07 +0000)]
syscall: change get_regs argument type
This opens the way for future changes related to get_regs.
* syscall.c (get_regs): Change argument type from "pid_t"
to "struct tcb *", all callers changed.
Dmitry V. Levin [Sun, 24 Dec 2017 16:07:18 +0000 (16:07 +0000)]
syscall: move get_regs call from syscall_exiting_decode to get_syscall_result
This make the code less confusing and opens the way for future changes
related to get_regs.
* syscall.c (syscall_exiting_decode): Move get_regs invocation ...
(get_syscall_result) [ptrace_getregset_or_getregs]: ... here.
Dmitry V. Levin [Sun, 24 Dec 2017 15:07:10 +0000 (15:07 +0000)]
syscall: rework subcall decoding on mips o32
Move syscall subcall handling to the same switch statement that
handles ipc and socket subcalls.
* linux/mips/syscallent-o32.h [LINUX_MIPSO32] (SYS_syscall_subcall):
Define.
* syscall.c (decode_mips_subcall): Rename to decode_syscall_subcall,
conditionalize on SYS_syscall_subcall instead of LINUX_MIPSO32.
(syscall_entering_decode) [LINUX_MIPSO32]: Remove.
(syscall_entering_decode) [SYS_syscall_subcall]: Handle SEN_syscall
using decode_syscall_subcall.
Dmitry V. Levin [Sun, 24 Dec 2017 15:07:10 +0000 (15:07 +0000)]
syscall: tweak shuffle_scno ifdefery
* syscall.c (shuffle_scno): Check for ARM_FIRST_SHUFFLED_SYSCALL
instead of ARM || AARCH64. This does not result to any code change
but looks more comprehensible.
Dmitry V. Levin [Sun, 24 Dec 2017 12:40:00 +0000 (12:40 +0000)]
syscall: change get_regs to return an error code
* syscall.c (get_regs_error) [!ptrace_getregset_or_getregs]: Do not
define.
(clear_regs) [!ptrace_getregset_or_getregs]: Do not set get_regs_error.
(get_regs) [ptrace_getregset_or_getregs]: Return get_regs_error, all
callers changed to test get_regs return code instead of get_regs_error
static variable, which is now internally used by get_regs() and
clear_regs() only.
(USE_GET_SYSCALL_RESULT_REGS): Do not define.
Use "#ifndef ptrace_getregset_or_getregs"
instead of "#ifdef USE_GET_SYSCALL_RESULT_REGS".
Harsha Sharma [Sun, 24 Dec 2017 07:01:36 +0000 (12:31 +0530)]
tests: enhance run.sh usage error diagnostics
* tests/run.sh: Execute timeout command only when invoked with
an argument, otherwise print an error message.
Signed-off-by: Harsha Sharma <harshasharmaiitr@gmail.com>
Dmitry V. Levin [Sat, 23 Dec 2017 14:12:18 +0000 (14:12 +0000)]
tests: skip nsyscalls-d.test on mips o32
On mips o32, nsyscalls test is implemented using syscall #4000,
so nsyscalls-d cannot work there.
* tests/nsyscalls-d.test: Skip on mips o32.
Dmitry V. Levin [Sat, 23 Dec 2017 02:37:33 +0000 (02:37 +0000)]
Remove linux/ptp_clock.h
As linux kernel provides a compatible linux/ptp_clock.h header since
commit v3.8-rc1~139^2~514, there is no need for a local copy.
* linux/ptp_clock.h: Remove.
* Makefile.am (EXTRA_DIST): Remove it.
* configure.ac (AC_CHECK_TYPES): Check for struct ptp_sys_offset
in <linux/ptp_clock.h>.
* ioctl.c (ioctl_decode) <case '='>: Conditionalize
on [HAVE_STRUCT_PTP_SYS_OFFSET].
* ptp.c: Likewise.
Dmitry V. Levin [Sat, 23 Dec 2017 02:53:54 +0000 (02:53 +0000)]
Remove linux/ubi-user.h
As linux kernel provides a compatible mtd/ubi-user.h header since
commit v3.7-rc1~85^2~17, there is no need for a local copy.
* linux/ubi-user.h: Remove.
* Makefile.am (EXTRA_DIST): Remove it.
* configure.ac (AC_CHECK_MEMBERS): Check
for struct ubi_attach_req.max_beb_per1024 in <mtd/ubi-user.h>.
* ioctl.c (ioctl_decode) <case 'o', case 'O'>: Conditionalize
on HAVE_STRUCT_UBI_ATTACH_REQ_MAX_BEB_PER1024.
* ubi.c: Likewise.
Dmitry V. Levin [Sat, 23 Dec 2017 02:10:13 +0000 (02:10 +0000)]
Remove linux/mtd-abi.h
As linux kernel provides a compatible mtd/mtd-abi.h header since
commit v3.2-rc1~14^2~33, there is no need for a local copy.
* linux/mtd-abi.h: Remove.
* Makefile.am (EXTRA_DIST): Remove it.
* configure.ac (AC_CHECK_TYPES): Check for struct mtd_write_req
in <mtd/mtd-abi.h>.
* ioctl.c (ioctl_decode) <case 'M'>: Conditionalize
on [HAVE_STRUCT_MTD_WRITE_REQ].
* mtd.c: Likewise.
* tests/ioctl_mtd.c: Likewise.
* tests/ioctl.c (main): Likewise.
Dmitry V. Levin [Sat, 23 Dec 2017 01:51:29 +0000 (01:51 +0000)]
Remove linux/personality.h
* linux/personality.h: Remove.
* Makefile.am (EXTRA_DIST): Remove it.
* personality.c: Do not include <linux/personality.h>, include
"xlat/personality_flags.h" before "xlat/personality_types.h".
* xlat/personality_flags.in: Provide fallback definitions.
* xlat/personality_types.in: Likewise.
Dmitry V. Levin [Sat, 23 Dec 2017 01:26:17 +0000 (01:26 +0000)]
travis: switch from clang-3.8 to clang
As travis provides a relatively fresh clang by default nowadays,
it makes sense to use default clang in clang-based test builds.
* .travis.yml (matrix): Change clang-3.8 to clang.
Eugene Syromyatnikov [Thu, 21 Dec 2017 13:11:47 +0000 (14:11 +0100)]
strace.1.in: mention perf and ftrace in SEE ALSO
* strace.1.in (.SH SEE ALSO): Add references to perf-trace(1) and
trace-cmd(1).
Eugene Syromyatnikov [Thu, 21 Dec 2017 13:10:49 +0000 (14:10 +0100)]
strace.1.in: clarify -F option behaviour
* strace.1.in <.TP \-F>: Extend deprecation warning. Describe behaviour
of multiple instances of -F and interoperability of -F and -f.
Dmitry V. Levin [Wed, 20 Dec 2017 22:58:42 +0000 (22:58 +0000)]
tests: consistently use $STRACE_EXE instead of local alternatives
* tests/get_regs.test: Replace "${STRACE##* }" with "$STRACE_EXE".
* tests/options-syntax.test: Replace "$strace_exp" with "$STRACE_EXE".
* tests/syntax.sh: Likewise.
Eugene Syromyatnikov [Wed, 20 Dec 2017 15:25:20 +0000 (16:25 +0100)]
strace.c: inform the user about -F option obsolescence
* strace.c (init): Print an error message if the option is used.
Co-authored-by: Dmitry V. Levin <ldv@altlinux.org>
Eugene Syromyatnikov [Wed, 20 Dec 2017 14:45:55 +0000 (15:45 +0100)]
strace.c: sort option arguments alphabetically
Except for the ones that enabled by configure options.
While we are here, let's also change the indentation of while expression
continuation in order to separate it from the following switch clause.
* strace.c (init): Reorder options in getopt() call.
Eugene Syromiatnikov [Fri, 4 Aug 2017 07:38:50 +0000 (09:38 +0200)]
strace.c: use _exit() instead of exit() in child's die()
Let's keep child's death routine as minimalistic as possible for the
cases when vfork() is used instead of fork() on systems that lack MMU.
* strace.c (die) <!(strace_tracer_pid == getpid())>: Call _exit().
Harsha Sharma [Wed, 20 Dec 2017 17:33:01 +0000 (23:03 +0530)]
syscall: replace if (debug_flag) ... with debug_msg macro
* syscall.c (get_scno): Use debug_msg instead of
"if (debug_flag) error_msg".
Signed-off-by: Harsha Sharma <harshasharmaiitr@gmail.com>
Eugene Syromyatnikov [Wed, 20 Dec 2017 19:11:05 +0000 (20:11 +0100)]
tests: check (some) debugging output generated during nsyscalls test
* tests/nsyscalls-d.c: New file.
* tests/.gitignore: Add it.
* tests/nsyscalls-d.test: New test, variant of nsyscalls.test with debug
output check.
* tests/nsyscalls-nd.test: Likewise.
* tests/nsyscalls.c: Add expected debug output.
* tests/Makefile.am (check_PROGRAMS): Add nsyscalls-d.
(DECODER_TESTS): Add nsyscalls-d.test and nsyscalls-nd.test.
Eugene Syromiatnikov [Wed, 13 Dec 2017 12:52:59 +0000 (13:52 +0100)]
pathtrace.c: use xgrowarray
* defs.h <struct path_set>: Change type of num_selected field to size_t.
Add size field.
* pathtrace.c (storepath): Rewrite to utilise xgrowarray.
Dmitry V. Levin [Thu, 14 Dec 2017 00:05:04 +0000 (00:05 +0000)]
dyxlat: use xgrowarray
* dyxlat.c (dyxlat_alloc): Use xgrowarray instead of xcalloc.
(dyxlat_add_pair): Use xgrowarray instead of xreallocarray.
Dmitry V. Levin [Thu, 14 Dec 2017 00:05:04 +0000 (00:05 +0000)]
unwind: use xgrowarray
* unwind.c (get_symbol_name): Use xgrowarray instead of manual
dynamic array management using xreallocarray.
Eugene Syromiatnikov [Tue, 8 Aug 2017 14:37:39 +0000 (16:37 +0200)]
strace.c: use xgrowarray
* strace.c (tcbtabsize): Change type to size_t.
(expand_tcbtab): Rewrite in order to utilise xgrowarray
instead of manual dynamic array management.
Eugene Syromiatnikov [Tue, 8 Aug 2017 14:37:01 +0000 (16:37 +0200)]
unwind: use xgrowarray
* unwind.c (build_mmap_cache): Use xgrowarray instead of manual dynamic
array management.
Eugene Syromiatnikov [Tue, 8 Aug 2017 14:36:40 +0000 (16:36 +0200)]
xmalloc.c: introduce xgrowarray helper function
In order to simplify dynamic array management code.
* xmalloc.h (xgrowarray): New declaration.
* xmalloc.c (xgrowarray): New function.
Dmitry V. Levin [Wed, 13 Dec 2017 01:47:33 +0000 (01:47 +0000)]
tests: check error diagnostics when exec file name is too long
* tests/options-syntax.test: Check error diagnostics when
exec file name length equals to PATH_MAX.
Eugene Syromiatnikov [Fri, 4 Aug 2017 07:01:47 +0000 (09:01 +0200)]
strace.c: minor style fixes
* strace.c (test_ptrace_seize): Remove excess braces.
(init): Wrap overly long string literal. Add braces
to the else if branch.
Eugene Syromiatnikov [Fri, 4 Aug 2017 06:55:35 +0000 (08:55 +0200)]
strace.c: use *_func_* message printing macros where appropriate
In order to provide some additional bits of information in weird error
cases or just replace existing usages of __func__/literal function name.
* strace.c (detach): Use perror_func_msg() instead of perror_msg().
(startup_attach, open_dummy_desc, startup_child, test_ptrace_seize): Use
perror_func_msg_and_die() instead of perror_msg_and_die().
(test_ptrace_seize): Use error_func_msg_and_die() instead of
error_msg_and_die().
Eugene Syromiatnikov [Fri, 4 Aug 2017 06:44:01 +0000 (08:44 +0200)]
unwind.c: more verbose mapping overlapping diagnostic message
* unwind.c (build_mmap_cache): Change error_msg() to debug_msg(), add
information about region names and the respective start and end
addresses.
Eugene Syromiatnikov [Fri, 4 Aug 2017 06:43:16 +0000 (08:43 +0200)]
unwind.c: non-fatal handling of asprintf error
An error returned by asprintf is a poor excuse for dying.
* unwind.c (asprintf_error_str): New string constant.
(sprint_call_or_error): Replace error_msg_and_die() with
perror_func_msg() and usage of asprintf_error_str for a return value.
(queue_print): Free tmp->output line only if it is not
asprintf_error_str.
Eugene Syromiatnikov [Fri, 4 Aug 2017 06:41:49 +0000 (08:41 +0200)]
unwind.c: eliminate DPRINTF
Since DPRINTF is simply a macro that provides debugging information
along with some information about printing routine call site, now standard
debug_func_* macros are deemed to be a suitable replacement.
* unwind.c (DPRINTF): Remove.
(build_mmap_cache, delete_mmap_cache, unwind_cache_invalidate,
unwind_print_stacktrace, unwind_captiure_stacktrace): Replace
DPRINTF(fmt, str, ...) with debug_func_msg(fmt, ...)/
Eugene Syromiatnikov [Fri, 4 Aug 2017 06:11:02 +0000 (08:11 +0200)]
strace.c: replace if (debug_flag) ... with suitable debug printing macros
* strace.c (alloc_tcb, droptcb, detach, attach_tcb, test_ptrace_seize,
init, startup_tcb): Replace if (debug_flag) error_msg(...) occurrences
with debug_error_msg(...).
(attach_tcb): Replace if (debug_flag) perror_msg(...) with
debug_perror_msg(...).
(cleanup, startup_tcb): Replace if (debug_flag) error_msg(...)
occurrences with debug_func_msg() in attempt to provide additional
information.
Eugene Syromiatnikov [Fri, 4 Aug 2017 06:03:34 +0000 (08:03 +0200)]
error_prints.h: add *_func_* printing macros
In order to reduce boilerplate for the cases when __func__ is desired
to be printed.
* error_prints.h (error_func_msg, perror_func_msg, debug_func_msg,
debug_func_perror_msg, error_func_msg_and_die, perror_func_msg_and_die):
New macro definitions.
Eugene Syromiatnikov [Fri, 4 Aug 2017 06:03:03 +0000 (08:03 +0200)]
error_prints.h: add debug print macros
* defs.h (debug_flag): Move the declaration...
* error_prints.h (debug_flag): ... here.
(debug_msg, debug_perror_msg): New macro definitions.
Include <stdbool.h> for the debug_flag declaration.
Masatake YAMATO [Mon, 4 Dec 2017 13:08:17 +0000 (22:08 +0900)]
tests: check decoding of KVM ioctl commands
* tests/ioctl_kvm_run.c: New file.
* tests/ioctl_kvm_run.test: New test.
* tests/Makefile.am (DECODER_TESTS): Add ioctl_kvm_run.test.
* tests/pure_executables.list: Add ioctl_kvm_run.
* tests/.gitignore: Likewise.
Co-authored-by: Dmitry V. Levin <ldv@altlinux.org>
Masatake YAMATO [Mon, 4 Dec 2017 13:08:16 +0000 (22:08 +0900)]
kvm: decode the argument of KVM_{SET, GET}_SREGS ioctl command
* configure.ac (AC_CHECK_TYPES): Add struct kvm_sregs.
* kvm.c [HAVE_STRUCT_KVM_SREGS] (kvm_ioctl_decode_sregs): New function.
(kvm_ioctl) [HAVE_STRUCT_KVM_SREGS] <KVM_SET_SREGS, KVM_GET_SREGS>:
Use it.
* linux/arch_kvm.c (arch_print_kvm_sregs): New function.
* linux/x86_64/arch_kvm.c (PRINT_FIELD_KVM_SREGS_STRUCT): New macro.
(kvm_ioctl_decode_regs_dtable, kvm_ioctl_decode_regs_segment,
arch_print_kvm_sregs): New functions.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Masatake YAMATO [Mon, 4 Dec 2017 13:08:15 +0000 (22:08 +0900)]
kvm: decode the argument of KVM_{SET, GET}_REGS ioctl command
* configure.ac (AC_CHECK_TYPES): Add struct kvm_regs.
* linux/arck_kvm.c: New file.
* linux/x86_64/arch_kvm.c: Likewise.
* linux/i386/arch_kvm.c: Likewise.
* linux/x32/arch_kvm.c: Likewise.
* Makefile.am (EXTRA_DIST): Add them.
* kvm.c: Include "arch_kvm.c".
[HAVE_STRUCT_KVM_REGS] (kvm_ioctl_decode_regs): New function.
(kvm_ioctl) [HAVE_STRUCT_KVM_REGS] <KVM_SET_REGS, KVM_GET_REGS>: Use it.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Masatake YAMATO [Mon, 4 Dec 2017 13:08:14 +0000 (22:08 +0900)]
kvm: decode the argument of KVM_SET_USER_MEMORY_REGION ioctl command
* configure.ac (AC_CHECK_TYPES): Add struct kvm_userspace_memory_region.
* xlat/kvm_mem_flags.in: New file.
* kvm.c: Include print_fields.h.
[HAVE_STRUCT_KVM_USERSPACE_MEMORY_REGION]: Include xlat/kvm_mem_flags.h,
(kvm_ioctl_set_user_memory_region): New function.
(kvm_ioctl) [HAVE_STRUCT_KVM_USERSPACE_MEMORY_REGION]
<KVM_SET_USER_MEMORY_REGION>: Use it.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Eugene Syromyatnikov [Mon, 20 Nov 2017 01:48:09 +0000 (02:48 +0100)]
Add strace mascot
* strace.svg: New file.
Co-Authored-by: Vitaly Chaykovsky <mgspeker@gmail.com>
Dmitry V. Levin [Sun, 3 Dec 2017 00:25:43 +0000 (00:25 +0000)]
tests: robustify attach-p-cmd.test against buggy kernels
From time to time various kernels, old and new, just go nuts
and fail attach-p-cmd.test with the following diagnostics:
12345 --- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
-12345 chdir("attach-p-cmd.test -p") = -1 ENOENT (No such file or directory)
+12345 syscall_4294967295(0xffe60934, 0x1c0, 0xffe60934, 0x1, 0xffe609b4, 0xffe60a58) = -1 (errno 38)
+12345 chdir("attach-p-cmd.test -p") = -1 ENOSYS (Function not implemented)
Let's workaround this kernel madness by rewriting the test
without use of SIGALRM.
* tests/attach-p-cmd.h: New file.
* tests/Makefile.am (EXTRA_DIST): Add attach-p-cmd.h.
* tests/attach-p-cmd-cmd.c: Include "attach-p-cmd.h".
(write_pidfile, wait_for_peer_invocation): New functions.
(main): Use them.
* tests/attach-p-cmd-p.c: Include <time.h> and "attach-p-cmd.h".
(wait_for_peer_invocation, wait_for_peer_termination): New functions.
(main): Use them. Do not raise SIGALRM, use nanosleep after peer
termination.
Dmitry V. Levin [Sat, 2 Dec 2017 22:01:34 +0000 (22:01 +0000)]
tests: robustify ipc_msgbuf.test against broken libc
glibc between commits glibc-2.25~130 and glibc-2.26~740 had broken
msgctl(IPC_RMID) on hppa: this operation always failed with EINVAL
because of inappropriate use of IPC_64 flag. Similar issues were
fixed on other niche architectures. Let's workaround these issues
by skipping the test in case of msgctl(IPC_RMID) failure.
* tests/ipc_msgbuf.c (cleanup): Change return type to int,
return 77 in case of msgctl(IPC_RMID) failure.
(main): Explicitly invoke cleanup() at the end.
Masatake YAMATO [Fri, 1 Dec 2017 19:05:28 +0000 (04:05 +0900)]
kvm: decode the argument of KVM_CREATE_VCPU ioctl command
* kvm.c (kvm_ioctl_create_vcpu): New function.
(kvm_ioctl) <KVM_CREATE_VCPU>: Use it.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Masatake YAMATO [Fri, 1 Dec 2017 19:05:27 +0000 (04:05 +0900)]
kvm: handle KVM_CREATE_VM ioctl command
* kvm.c (kvm_ioctl): Handle KVM_CREATE_VM command.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Masatake YAMATO [Fri, 1 Dec 2017 19:05:26 +0000 (04:05 +0900)]
kvm: handle KVM_RUN, KVM_GET_VCPU_MMAP_SIZE, and KVM_GET_API_VERSION ioctl commands
* kvm.c (kvm_ioctl): Handle KVM_RUN, KVM_GET_VCPU_MMAP_SIZE,
and KVM_GET_API_VERSION commands.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Masatake YAMATO [Fri, 1 Dec 2017 19:05:25 +0000 (04:05 +0900)]
ioctl: add a stub for decoding kvm related ioctls
* kvm.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* configure.ac (AC_CHECK_HEADERS): Add linux/kvm.h.
* defs.h (kvm_ioctl): New prototype.
* ioctl.c (ioctl_decode) HAVE_LINUX_KVM_H]: Use kvm_ioctl.
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Eugene Syromyatnikov [Thu, 30 Nov 2017 01:14:14 +0000 (02:14 +0100)]
strace-log-merge: work around corner cases of strace -ttt parsing
Employing strace -ttt for the logs destined to be fed to
strace-log-merge is ultimately the best solution except for the logs
that pass the following dates:
Thu Jan 1 00:00:09 UTC 1970
Thu Jan 1 00:01:39 UTC 1970
Thu Jan 1 00:16:39 UTC 1970
Thu Jan 1 02:46:39 UTC 1970
Fri Jan 2 03:46:39 UTC 1970
Mon Jan 12 13:46:39 UTC 1970
Sun Apr 26 17:46:39 UTC 1970
Sat Mar 3 09:46:39 UTC 1973
Sun Sep 9 01:46:39 UTC 2001
Sat Nov 20 17:46:39 UTC 2286
Wed Nov 16 09:46:39 UTC 5138
Fri Sep 27 01:46:39 UTC 33658
Sun May 20 17:46:39 UTC 318857
Sat Nov 7 09:46:39 UTC
3170843
Sun Jul 5 01:46:39 UTC
31690708
Sat Jan 25 17:46:39 UTC
316889355
Let's lift this limitation.
* strace-log-merge: Generate numeric-only key for sorting, use sort -n
option.
Eugene Syromyatnikov [Wed, 29 Nov 2017 20:54:23 +0000 (21:54 +0100)]
debian: add strace-log-merge to the list of installed files
* debian/strace.install: Add strace-log-merge.
Eugene Syromyatnikov [Wed, 29 Nov 2017 20:52:02 +0000 (21:52 +0100)]
Add strace-log-merge man page
* strace-log-merge.1.in: New file.
* NEWS: Mention this.
* .gitignore: Add strace-log-merge.1.
* Makefile.am (man_MANS): Likewise.
* configure.ac (AC_CONFIG_FILES): Likewise.
* debian/strace.manpages: Likewise.
Eugene Syromyatnikov [Wed, 29 Nov 2017 20:38:27 +0000 (21:38 +0100)]
strace-log-merge: add copyright header
Dmitry V. Levin [Wed, 29 Nov 2017 03:52:27 +0000 (03:52 +0000)]
Add initial GitLab CI support
* .gitlab-ci.yml: New file.
* travis-build.sh: Print $CC -print-multi-lib. Print config.log
in case of configure failure.
* travis-install.sh: Check sudo availability. Install autoconf,
automake, file, gawk, gcc-multilib, git, gzip, make, and xz-utils
for all targets.
(musl-gcc): Install ca-certificates.
Dmitry V. Levin [Sat, 25 Nov 2017 01:55:44 +0000 (01:55 +0000)]
mpers: fix cross-compiling
In cross builds, a target version of readelf has to be used
instead of a native one.
* configure.ac (AC_CHECK_TOOL): Add readelf.
* Makefile.am (READELF): New variable.
(mpers-m%.stamp): Pass it to $(srcdir)/mpers.sh.
* m4/mpers.m4 (st_MPERS): Pass READELF environment variable
to $srcdir/mpers_test.sh.
* mpers.sh (READELF): New variable.
Use it instead of readelf.
* maint/ioctls_sym.sh: Likewise.
* NEWS: Mention this fix.
Reported-by: Rolf Eike Beer <eb@emlix.com>