]> granicus.if.org Git - strace/log
strace
10 years agoset_ptracer_any: add a little documentation
Mike Frysinger [Mon, 11 Aug 2014 05:31:09 +0000 (01:31 -0400)]
set_ptracer_any: add a little documentation

This way I don't have to keep reading up on these options and wondering
why the code isn't aborting when the call fails.

* tests/set_ptracer_any.c (main): Note prctl failures are ok.

10 years agosignal: fix thinko in sa_restorer
Mike Frysinger [Sun, 10 Aug 2014 02:12:55 +0000 (22:12 -0400)]
signal: fix thinko in sa_restorer

Previous commit here re-added the bugs trying to be fixed due to a
logic thinko.  The patches were tested in isolation and hand merged
later.  Oops.

* signal.c (struct new_sigaction): Change || to &&.

10 years agosigaction test: support arches w/out SA_RESTORER and swapped args
Mike Frysinger [Sat, 9 Aug 2014 13:32:20 +0000 (09:32 -0400)]
sigaction test: support arches w/out SA_RESTORER and swapped args

Running Linux 3.15 (sparc64) and glibc 2.17 (sparc32) triggers a
rt_sigaction call that does not use SA_RESTORER and has an order
where it inserts a restorer and a size.  The current tests don't
support that ordering, so add another regex.

* tests/sigaction.awk: Support no SA_RESTORER and swapped args.

10 years agoalpha/sparc: fix arg count for rt_sigaction
Mike Frysinger [Sat, 9 Aug 2014 13:21:37 +0000 (09:21 -0400)]
alpha/sparc: fix arg count for rt_sigaction

Both these arches have a rt_sigaction syscall that takes 5 args, not 4.

* linux/alpha/syscallent.h (rt_sigaction): Change nargs to 5.
* linux/sparc/syscallent.h (rt_sigaction): Change nargs to 5.

10 years agohppa: fix sigaction decoding
Mike Frysinger [Sat, 9 Aug 2014 13:04:18 +0000 (09:04 -0400)]
hppa: fix sigaction decoding

Since the rt_sigaction syscall on hppa doesn't have a sa_restorer,
do not include it in the kernel struct.

We also have to undefine SA_RESTORER so that code doesn't try to
use it.  The headers will export this, but the syscall doesn't
actually respect it.

* signal.c (SA_RESTORER): Undefine when HPPA is defined.
(struct new_sigaction): Disable sa_restorer on hppa.

10 years agoalpha: fix sigaction decoding
Mike Frysinger [Sat, 9 Aug 2014 12:52:04 +0000 (08:52 -0400)]
alpha: fix sigaction decoding

Since the rt_sigaction syscall on alpha doesn't have a sa_restorer,
do not include it in the kernel struct.

* signal.c (struct new_sigaction): Disable sa_restorer on alpha.

10 years agoPrepare for -yy option support
Dmitry V. Levin [Fri, 8 Aug 2014 23:38:26 +0000 (23:38 +0000)]
Prepare for -yy option support

* defs.h (show_fd_path): Change type to unsigned int.
* strace.c (show_fd_path): Likewise.
(init): Handle repeated -y option.

10 years agoFix preadv/pwritev offset decoding on ILP32 architectures
Dmitry V. Levin [Thu, 7 Aug 2014 11:42:46 +0000 (11:42 +0000)]
Fix preadv/pwritev offset decoding on ILP32 architectures

This fixes regression introduced by the previous commit.

* io.c (print_llu_from_low_high_val) [SIZEOF_LONG != SIZEOF_LONG_LONG]:
Cast argument to unsigned long before casting it to unsigned long long.

10 years agoFix preadv/pwritev offset decoding on bigendian architectures
Dmitry V. Levin [Thu, 7 Aug 2014 00:07:28 +0000 (00:07 +0000)]
Fix preadv/pwritev offset decoding on bigendian architectures

This partially reverts commit 7845a42b39e59e904d01e75e21f7bc7eb6462560.

* util.c (printllval): Remove align argument.
* defs.h (printllval): Update prototype.
(printllval_aligned, printllval_unaligned): Remove.
* file.c (sys_readahead, sys_truncate64, sys_ftruncate64, sys_fadvise64,
sys_fadvise64_64, sys_sync_file_range, sys_sync_file_range2,
sys_fallocate): Replace printllval_aligned call with printllval.
* io.c (sys_pread, sys_pwrite): Likewise.
(print_llu_from_low_high_val): New function.
(sys_preadv, sys_pwritev): Use it instead of printllval_unaligned.

10 years agoDecode file descriptors returned by accept and accept4 syscalls
Dmitry V. Levin [Wed, 6 Aug 2014 16:46:13 +0000 (16:46 +0000)]
Decode file descriptors returned by accept and accept4 syscalls

* net.c (do_accept): Rename to do_sockname.
(sys_accept, sys_accept4): Update callers, return RVAL_FD.
(sys_getsockname, sys_getpeername): Call do_sockname directly.
* tests/net-fd.test: Update.

10 years agox32: update io_{setup,submit} syscalls
Mike Frysinger [Fri, 1 Aug 2014 11:00:24 +0000 (07:00 -0400)]
x32: update io_{setup,submit} syscalls

Starting in 3.16, these two syscalls have gotten their own entry
point for x32.  See linux 7fd44dacdd803c0bbf38bf478d51d280902bb0f1.

* linux/x32/syscallent.h: Change existing io_{setup,submit} to 64bit,
and add new entry points for x32 specifically.

10 years agoxtensa: sort values in struct_user_offsets
Max Filippov [Wed, 18 Jun 2014 02:04:06 +0000 (06:04 +0400)]
xtensa: sort values in struct_user_offsets

Otherwise ptrace syscall argument decoding is wrong:
  ptrace(PTRACE_PEEKUSER, 296, syscall_nr, [0x4048eb]) = 0
  ptrace(PTRACE_PEEKUSER, 296, syscall_nr, [0x3fa6cd30]) = 0
  ptrace(PTRACE_PEEKUSER, 296, syscall_nr, [0x8040676d]) = 0
instead of
  ptrace(PTRACE_PEEKUSER, 296, pc, [0x4048eb]) = 0
  ptrace(PTRACE_PEEKUSER, 296, a1, [0x3fa6cd30]) = 0
  ptrace(PTRACE_PEEKUSER, 296, a0, [0x8040676d]) = 0

* process.c (struct_user_offsets) [XTENSA]: Sort values.

10 years agoDocument -k option as experimental
Dmitry V. Levin [Wed, 18 Jun 2014 15:34:27 +0000 (15:34 +0000)]
Document -k option as experimental

strace -k does not produce a reliable output on all supported
configurations yet, even basic strace-k.test is known to fail
on some of them.

* strace.c (usage): Document -k option as experimental.
* strace.1: Likewise.
* NEWS: Likewise.

10 years agotests: robustify -k test
Dmitry V. Levin [Mon, 16 Jun 2014 21:45:52 +0000 (21:45 +0000)]
tests: robustify -k test

Split stack-fcall.c into several compilation units so that intermediate
function calls would not be optimized out by compiler.

* tests/stack-fcall.c: Move intermediate functions to ...
* tests/stack-fcall-*.c: ... new files.
* tests/Makefile.am (stack_fcall_SOURCES): Add stack-fcall-*.c.

10 years agotests: enhance -k test
Dmitry V. Levin [Fri, 13 Jun 2014 15:07:24 +0000 (15:07 +0000)]
tests: enhance -k test

Add two more function calls to the stack.  Suggested by Masatake YAMATO.

* tests/stack-fcall.c (f1): Rename to f3.
(f1, f2): New functions.
* tests/strace-k.test: Update.

10 years agounwind: ignore memory mappings that have no PROT_EXEC bit set
Dmitry V. Levin [Fri, 13 Jun 2014 14:50:24 +0000 (18:50 +0400)]
unwind: ignore memory mappings that have no PROT_EXEC bit set

* unwind.c (build_mmap_cache): For each memory mapping being scanned,
save its PROT_EXEC bit and skip the mapping if it is not set.

10 years agounwind: cleanup build_mmap_cache
Dmitry V. Levin [Thu, 12 Jun 2014 14:01:45 +0000 (18:01 +0400)]
unwind: cleanup build_mmap_cache

* unwind.c (build_mmap_cache): Move local variables to the code branch
where they are used.  Check return code of sscanf and strdup.  Do not
treat unusual memory mappings as fatal errors.  Do not skip memory
mappings with path names starting with "[".

10 years agounwind: remove unused field from mmap_cache_t
Dmitry V. Levin [Fri, 13 Jun 2014 14:20:08 +0000 (18:20 +0400)]
unwind: remove unused field from mmap_cache_t

* unwind.c (mmap_cache_t): Remove "deleted" field.
(build_mmap_cache): Remove initialization of "deleted" field.

10 years agounwind: refactor stacktrace_walk
Dmitry V. Levin [Thu, 5 Jun 2014 22:28:57 +0000 (22:28 +0000)]
unwind: refactor stacktrace_walk

* unwind.c (stacktrace_walk): Move stack frame printing code
to separate function print_stack_frame.

10 years agounwind: constify binary_filename and symbol_name functions arguments
Dmitry V. Levin [Thu, 5 Jun 2014 22:37:09 +0000 (22:37 +0000)]
unwind: constify binary_filename and symbol_name functions arguments

* unwind.c (call_action_fn, print_call_cb, sprint_call_or_error,
queue_put, queue_put_call): Add const qualifier to binary_filename and
symbol_name arguments.

10 years agounwind: disable stack trace with multiple personalities
Luca Clementi [Tue, 10 Jun 2014 05:05:38 +0000 (22:05 -0700)]
unwind: disable stack trace with multiple personalities

* unwind.c (unwind_cache_invalidate, unwind_print_stacktrace,
unwind_capture_stacktrace): Disable stack tracing of non-default
personality processes.

10 years agounwind: rename function_off_set to function_offset
Dmitry V. Levin [Thu, 5 Jun 2014 21:44:40 +0000 (21:44 +0000)]
unwind: rename function_off_set to function_offset

* unwind.c (call_action_fn, stacktrace_walk, STACK_ENTRY_SYMBOL_FMT,
print_call_cb, sprint_call_or_error, queue_put, queue_put_call):
Rename function_off_set to function_offset.

10 years agounwind: fix a bug in range updating of binary search
Dmitry V. Levin [Thu, 5 Jun 2014 21:40:43 +0000 (21:40 +0000)]
unwind: fix a bug in range updating of binary search

* unwind.c (print_stacktrace): Fix another off-by-one error in binary search.

10 years agounwind: use fopen64 instead of fopen
Dmitry V. Levin [Thu, 5 Jun 2014 15:12:42 +0000 (15:12 +0000)]
unwind: use fopen64 instead of fopen

* unwind.c (fopen_for_input): Define to fopen64 iff
[_LARGEFILE64_SOURCE && HAVE_FOPEN64], otherwise define it to fopen.
(build_mmap_cache): Use fopen_for_input instead of fopen.

10 years agounwind: fix build on 32-bit architectures
Dmitry V. Levin [Thu, 5 Jun 2014 14:37:04 +0000 (14:37 +0000)]
unwind: fix build on 32-bit architectures

Fix compilation warnings in unwind.c on 32-bit architectures.
On some architectures getuid is actually getuid32, so change the test
to use getpid instead of getuid.

* unwind.c (STACK_ENTRY_SYMBOL_FMT): Explicitly cast function_off_set
to unsigned long.
(queue_put_error): Change the 3rd argument's type to unsigned long.
* tests/stack-fcall.c (f1): Use getpid instead of getuid.
* tests/strace-k.test: Likewise.

10 years agotests: robustify -w option test
Dmitry V. Levin [Thu, 5 Jun 2014 14:53:06 +0000 (14:53 +0000)]
tests: robustify -w option test

* tests/count.test: Allow nanosleep to spend a bit less time than 1 second.

10 years agoFix delete_module decoding
Dmitry V. Levin [Wed, 4 Jun 2014 15:51:55 +0000 (15:51 +0000)]
Fix delete_module decoding

* xlat/delete_module_flags.in: New file.
* file.c (sys_delete_module): Move ...
* bjm.c (sys_delete_module): ... to here.
Decode 1st argument using printstr instead of printpath.
* NEWS: Mention it.

10 years agoDecode paths associated with file descriptors returned by syscalls
Zubin Mithra [Wed, 4 Jun 2014 03:00:41 +0000 (08:30 +0530)]
Decode paths associated with file descriptors returned by syscalls

* defs.h (RVAL_FD): New macro.
(RVAL_MASK, RVAL_STR, RVAL_NONE): Update.
* desc.c (sys_dup, sys_delete_module): New functions.
(do_dup2, decode_open, sys_creat): Change return value to RVAL_FD.
* linux/dummy.h (sys_delete_module, sys_dup): Remove.
* linux/syscall.h (sys_delete_module, sys_dup): New prototypes.
* syscall.c (trace_syscall_exiting): Handle RVAL_FD.

Signed-off-by: Zubin Mithra <zubin.mithra@gmail.com>
10 years agoNEWS: Prepare for 4.9 release
Dmitry V. Levin [Tue, 3 Jun 2014 13:31:37 +0000 (13:31 +0000)]
NEWS: Prepare for 4.9 release

10 years agoWarn about flags that have no effect with -c
Dmitry V. Levin [Tue, 3 Jun 2014 13:20:05 +0000 (13:20 +0000)]
Warn about flags that have no effect with -c

* strace.c (init): Issue a warning if -i, -k, -r, -t, -T, or -y is used
along with -c.
This fixes Debian bug #443895.

10 years agodebian: enable security hardening features
Dmitry V. Levin [Tue, 3 Jun 2014 12:56:42 +0000 (12:56 +0000)]
debian: enable security hardening features

* debian/rules: Follow the advice in https://wiki.debian.org/Hardening
and enable maximum hardening as for programs that handle untrusted data.
Patch by Markus <waldeck@gmx.de>.

10 years agodebian: update control file
Dmitry V. Levin [Tue, 3 Jun 2014 12:16:53 +0000 (12:16 +0000)]
debian: update control file

* debian/control (strace64): Fix a typo in package description.
Patch by Pascal De Vuyst <pascal.devuyst@gmail.com>.
(strace, strace-udeb): Add x32 to architecture list.
Patch by Guillaume Morin <guillaume@morinfr.org>.
(strace, strace-udeb): Add or1k to architecture list.
Patch by Christian Svensson <debian@cmd.nu>.
(strace, strace-udeb): Add arm64 to architecture list,
and remove defunct arm.
Patch by Wookey <wookey@debian.org>.

This fixes Debian bugs: #697625, #727018, #742235, #749956.

10 years agomanpage: minor corrections
Dmitry V. Levin [Tue, 3 Jun 2014 12:03:41 +0000 (12:03 +0000)]
manpage: minor corrections

$ groff -ww -mandoc -z strace.1
strace.1:65: warning: macro `IX' not defined

* strace.1: define IX macro as empty for groff.
Change remaining '-' as minus to '\-'.
Have two word spaces after a full stop as an end of sentence.
Use extra space ('\,' or '\/') between roman and italic characters.
Based on patch by Bjarni Ingi Gislason <bjarniig@rhi.hi.is>.
This fixes Debian bug #725987.

10 years agounwind: tests: add a test for -k option
Masatake YAMATO [Wed, 14 May 2014 04:16:29 +0000 (13:16 +0900)]
unwind: tests: add a test for -k option

* tests/stack-fcall.c: New test target.
* tests/strace-k.test: New test driver.
* tests/Makefile.am (check_PROGRAMS): Add stack-fcall.
(TESTS): Add strace-k.test.
* tests/.gitignore: Add stack-fcall.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
10 years agounwind: move stacktrace capturing and mmap cache invalidating to trace_syscall_entering
Masatake YAMATO [Wed, 16 Apr 2014 06:33:35 +0000 (15:33 +0900)]
unwind: move stacktrace capturing and mmap cache invalidating to trace_syscall_entering

Instead of handling stacktrace capturing and mmap cache invalidating in
sys_* functions, handle them uniformly in trace_syscall_entering using
new flags introduced by previous two commits.

The patch is simpler than its older version(v3).  The value of
hide_log_until_execve is just ignored.  I found the value is nothing
to do with this patch.  unwind_cache_invalidate is mentioned only
once in trace_syscall_exiting.
Both are suggested by Dmitry Levin.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: add SE and SI flags to syscall entries for all architectures
Dmitry V. Levin [Mon, 12 May 2014 14:37:50 +0000 (14:37 +0000)]
unwind: add SE and SI flags to syscall entries for all architectures

Add SE flag to execve, exit, and exit_group syscall entries.
Add SI flag to brk, execve, mmap, mprotect, mremap, munmap,
remap_file_pages, shmat, and shmdt syscall entries.

10 years agounwind: introduce markers specifying the needs of special care in unwinding
Masatake YAMATO [Wed, 16 Apr 2014 06:33:11 +0000 (15:33 +0900)]
unwind: introduce markers specifying the needs of special care in unwinding

Some system calls require capturing the stack trace before they are
processed in kernel.  Typical one is execve.  Some system calls require
invalidating mmap cache after they are processed in kernel.

In current implementation these requirements are handled directly by
appropriate syscall handlers.  However, it is difficult to keep the
source code maintainable using this approach to cover all system calls
which have such requirements.

A more generic way to implement this is to flag all syscalls that
require special processing, and handle these flags right in
trace_syscall_entering instead of changing syscall handlers.

This patch just defines new flags: STACKTRACE_INVALIDATE_CACHE and
STACKTRACE_CAPTURE_ON_ENTER.

The names of macros are suggested by Dmitry Levin.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: enable dwarf cache of libunwind
Masatake YAMATO [Wed, 16 Apr 2014 06:33:10 +0000 (15:33 +0900)]
unwind: enable dwarf cache of libunwind

Here is the benchmark of the dwarf cache.

Target program:

    #include <sched.h>
    int main(void)
    {
      unsigned int max = 0x6fff, i;
      for (i = 0; i < max; i++)
sched_yield();
      return 0;
    }

Command line:

./strace -o /dev/null -k a.out

With the dwarf cache:

    real 0m12.081s
    user 0m3.858s
    sys  0m8.194s

Without the dwarf cache:

    real 0m22.326s
    user 0m5.218s
    sys 0m16.952s

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: report expected backtracing error
Masatake YAMATO [Wed, 16 Apr 2014 06:33:09 +0000 (15:33 +0900)]
unwind: report expected backtracing error

When a file mmap'ed to the target process is unlink'ed, backtracing the
stack would fail.  Current implementation reports it as
"backtracing_error".  To avoid confusion, the message is changed to
"expected_backtracing_error".

Here is the reproducer:

  $ cat ./p-deleted.c
  #include <unistd.h>

  int main(int argc, char **argv) {
    return unlink(argv[0]) < 0;
  }

  $ strace -e unlink -k ./p-deleted
  unlink("./p-deleted")                   = 0
   > /usr/lib64/libc-2.18.so(unlink+0x7) [0xe7f17]
   > /home/yamato/var/strace/t_unwind/p-deleted (deleted)(+0x0) [0x575]
   > /usr/lib64/libc-2.18.so(__libc_start_main+0xf5) [0x21d65]
   > backtracing_error [0x7ffff1365590]
  +++ exited with 0 +++

p-deleted is deleted therefore backtracing_error is reported.  This
patch records the deleted marker when making mmap cache and refers the
recorded information in the case "backtracing_error" to switch the
message.

Here is the output of this patch:

  $ strace -e unlink -k ./p-deleted
  unlink("./p-deleted")                   = 0
   > /usr/lib64/libc-2.18.so(unlink+0x7) [0xe7f17]
   > /home/yamato/var/strace/t_unwind/p-deleted (deleted)(+0x0) [0x575]
   > /usr/lib64/libc-2.18.so(__libc_start_main+0xf5) [0x21d65]
   > expected_backtracing_error [0x7ffff1365590]
  +++ exited with 0 +++

This solution is not perfect: if a file is unlink'ed after making the
mmap cache and before unwinding, strace cannot have a chance to record
the deleted marker.

In this version of patch, hardcoded magic number used in comparing "(delete)"
string is replaced with strlen as suggested by Dmitry Levin.

In old version of patch, the deleted entry was thrown away from mmap
cache to avoid to report "backtracing_error".  In this patch I keep it,
and just switch the error message.
Inspired by the review comment from Dmitry Levin.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: call unwind_tcb_fin before printing detached message
Masatake YAMATO [Wed, 16 Apr 2014 06:33:08 +0000 (15:33 +0900)]
unwind: call unwind_tcb_fin before printing detached message

captured stacktrace is printed in unwind_tcb_fin if tcp->queue is not
empty.  This should happen before printing detached message, so
unwind_tcb_fin is moved to the top of droptcb.

This is implicitly suggested by Dmitry Levin in patch review process.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: implement automatic mmap cache invalidation
Masatake YAMATO [Wed, 16 Apr 2014 06:33:07 +0000 (15:33 +0900)]
unwind: implement automatic mmap cache invalidation

A mmap cache belonging to a tcb was updated when a system call which
changed the memory mapping was called.  This implementation was assumed
the mapping was changed only by the tcb.  However, this assumption is
incorrect if the target application is multi-threaded; more than two
tcbs can shared the same memory mapping and a tcb can modify it without
being noticed by the others.

This change introduces a global integer variable mmap_cache_generation,
and mmap_cache_generation field to struct tcb.  The variable
is incremented each time a process enters a syscall that can modify its
memory mapping.  Each tcb records the value of this variable at the
moment if  building its mmap cache.  Every mmap cache associated with
the given tcb can be validated by comparing its mmap_cache_generation
field with the variable mmap_cache_generation.

This implementation is inefficient.  If strace attaches two processes
which don't share the memory mapping, rebuilding mmap cache of a tcb
triggered by another tcb's mmap system call is not necessary.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: introduce queue_t for capturing stacktrace
Masatake YAMATO [Wed, 16 Apr 2014 06:33:06 +0000 (15:33 +0900)]
unwind: introduce queue_t for capturing stacktrace

This is the second step for splitting capturing from printing.

New `queue' field is added to tcb.  Captured stacktrace is stored here.
The field is initialized/finalized at unwind_tcb_init/unwind_tcb_fin.

New API function unwind_capture_stacktrace is added.  This function
captures the currest stack using stracktrace_walker and records it in
tcb.  It's printing is delayed to the next call of
unwind_print_stacktrace.

unwind_print_stacktrace is extended.  Now it checks queue field of
the given tcb at the start of function.  If the function finds a
captured stack trace, the latter is printed using stracktrace_walker.

Currently unwind_capture_stacktrace invocations are added directly to
handlers of mmap, munmap, mprotect, and execve.

Here is the difference of output with/without patch:

(without patch)
  execve("./test-fork", ["./test-fork"], [/* 56 vars */]) = 0
   > /usr/lib64/ld-2.18.so(check_one_fd.part.0+0x82) [0x11f0]

(with patch)
  execve("./test-fork", ["./test-fork"], [/* 54 vars */]) = 0
   > /usr/lib64/libc-2.18.so(execve+0x7) [0xbcd27]
   > /home/yamato/var/strace/strace(exec_or_die+0x10c) [0x26ac]
   > /home/yamato/var/strace/strace(startup_child+0x346) [0x134f6]
   > /home/yamato/var/strace/strace(init+0x89f) [0x13dff]
   > /home/yamato/var/strace/strace(main+0xa) [0x26ca]
   > /usr/lib64/libc-2.18.so(__libc_start_main+0xf5) [0x21d65]
   > /home/yamato/var/strace/strace(_start+0x29) [0x2799]

In older version output lines of captured elements were built when
printing.  In this version they are built when capturing the stack.
As result, unneeded dynamic memory allocations are avoided.
Suggested by Luca Clementi.

In older version the combination of snprintf and realloc were used.
In this version they are replaced with asprintf.
Suggested by Dmitry Levin.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: introduce own debug macro
Masatake YAMATO [Wed, 16 Apr 2014 06:33:05 +0000 (15:33 +0900)]
unwind: introduce own debug macro

* unwind.c (DPRINTF): New macro, to be utilized in debugging cache
management code.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: introduce stacktrace_walker
Masatake YAMATO [Wed, 16 Apr 2014 06:33:04 +0000 (15:33 +0900)]
unwind: introduce stacktrace_walker

In current implementation, the stack trace is captured and printed at
the same time, in trace_syscall_exiting.  This approach cannot
provide user expected information when a system call changes the
memory mapping.  In such cases, the stack trace should be captured on
entering syscall and printed on exiting.

As the initial step for splitting capturing from printing, this change
introduces stacktrace_walker utility function.  It can be used both for
capturing in trace_syscall_entering and printing in
trace_syscall_exiting.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: give all exported functions "unwind_" prefix
Masatake YAMATO [Wed, 16 Apr 2014 06:33:02 +0000 (15:33 +0900)]
unwind: give all exported functions "unwind_" prefix

* unwind.c (init_unwind_addr_space): Rename to unwind_init.
(init_libunwind_ui): Rename to unwind_tcb_init.
(free_libunwind_ui): Rename to unwind_tcb_fin.
(delete_mmap_cache): Rename to unwind_cache_invalidate.
(print_stacktrace): Rename to unwind_print_stacktrace.
* defs.h: Update prototypes.
* mem.c: All callers updated.
* process.c: Likewise.
* strace.c: Likewise.
* syscall.c: Likewise.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: delete mmap cache in free_libunwind_ui
Masatake YAMATO [Wed, 16 Apr 2014 06:33:01 +0000 (15:33 +0900)]
unwind: delete mmap cache in free_libunwind_ui

free_libunwind_ui is expected to release all unwind related resources
attached to tcp.

* strace.c (droptcb): Move delete_mmap_cache call ...
* unwind.c (free_libunwind_ui): ... to here.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: make alloc_mmap_cache function local
Masatake YAMATO [Wed, 16 Apr 2014 06:33:00 +0000 (15:33 +0900)]
unwind: make alloc_mmap_cache function local

* defs.h (alloc_mmap_cache): Remove.
* unwind.c (alloc_mmap_cache): Add static qualifier.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
10 years agounwind: fix a bug in range updating of binary search
Masatake YAMATO [Wed, 16 Apr 2014 06:32:59 +0000 (15:32 +0900)]
unwind: fix a bug in range updating of binary search

* unwind.c (print_stacktrace): Fix off-by-one error in binary search.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Signed-off-by: Luca Clementi <luca.clementi@gmail.com>
10 years agoAdd -k option to print stack trace after each syscall
Luca Clementi [Tue, 23 Jul 2013 07:11:35 +0000 (00:11 -0700)]
Add -k option to print stack trace after each syscall

Print the stack trace of the traced process after each system call when
-k option is specified.  It is implemented using libunwind to unwind the
stack and to obtain the function name pointed by the IP.

Based on the code that was originally taken from strace-plus
of Philip J. Guo.

* configure.ac: Add --with-libunwind option.  Check libunwind support.
* Makefile.am: Add libunwind support.
* defs.h (struct tcb) [USE_LIBUNWIND]: Append libunwind specific fields.
[USE_LIBUNWIND] (stack_trace_enabled, alloc_mmap_cache,
delete_mmap_cache, print_stacktrace): New prototypes.
* mem.c (print_mmap, sys_munmap, sys_mprotect): Add libunwind support.
* process.c (sys_execve): Likewise.
* strace.c (usage, alloctcb, droptcb, init): Likewise.
* syscall.c (trace_syscall_exiting): Likewise.
* unwind.c: New file.
* strace.1: Document -k option.

10 years agosysctl: update CTL_*, KERN_*, NET_*, and VM_* constants
Dmitry V. Levin [Sat, 26 Apr 2014 13:54:12 +0000 (13:54 +0000)]
sysctl: update CTL_*, KERN_*, NET_*, and VM_* constants

* configure.ac (AC_CHECK_DECLS): Add CTL_*, KERN_*, NET_*, and
VM_* constants.
* system.c (CTL_PROC, CTL_CPU): Remove definitions.
* xlat/sysctl_*.in: Update.

10 years agoCheck for constants used by waitid function
Dmitry V. Levin [Sat, 26 Apr 2014 15:22:08 +0000 (15:22 +0000)]
Check for constants used by waitid function

* configure.ac (AC_CHECK_DECLS): Add P_* constants.

10 years agoCheck for LO_FLAGS_READ_ONLY constant
Dmitry V. Levin [Sat, 26 Apr 2014 14:12:33 +0000 (14:12 +0000)]
Check for LO_FLAGS_READ_ONLY constant

* configure.ac (AC_CHECK_DECLS): Add LO_FLAGS_READ_ONLY.

10 years agoCompress blank lines
Dmitry V. Levin [Sat, 26 Apr 2014 18:10:19 +0000 (18:10 +0000)]
Compress blank lines

Suppress empty lines left after automated xlat conversion.

10 years agoxlat: cleanup the aftermath of automatic conversion
Dmitry V. Levin [Sat, 26 Apr 2014 15:35:02 +0000 (15:35 +0000)]
xlat: cleanup the aftermath of automatic conversion

10 years agoGenerate xlat/*.in files
Dmitry V. Levin [Fri, 25 Apr 2014 23:30:54 +0000 (23:30 +0000)]
Generate xlat/*.in files

Automatically convert xlat structures from *.c files to xlat/*.in files
using "./generate_xlat_in.sh *.c" command.

10 years agoRename several xlat structures to avoid collisions
Dmitry V. Levin [Fri, 25 Apr 2014 23:39:20 +0000 (23:39 +0000)]
Rename several xlat structures to avoid collisions

* bjm.c (which): Rename to qm_which.
* ipc.c (msg_flags): Rename to ipc_msg_flags.
* time.c (which): Rename to itimer_which.

10 years agoEnhance xlat generator
Dmitry V. Levin [Fri, 25 Apr 2014 23:04:13 +0000 (23:04 +0000)]
Enhance xlat generator

* xlat/gen.sh: Define all xlat structs not declared in defs.h as static.
Some symbolic constants are not macros, extend #ifdef check to cover
symbolic constants checked by AC_CHECK_DECLS.
Handle complex symbolic constants in SYMBOL|... form.
Handle symbolic constants in 1<<SYMBOL form.
Handle numeric constants.
Implement #unconditional directive that turns off preprocessor checks.
Implement #unterminated directive that turns off adding XLAT_END.

10 years agoUse bootstrap script consistently
Dmitry V. Levin [Fri, 25 Apr 2014 22:52:06 +0000 (22:52 +0000)]
Use bootstrap script consistently

Now that ./xlat/gen.sh has to be run before autoreconf,
replace all autoreconf calls with ./bootstrap call.

* bootstrap: Forward arguments to autoreconf.
* build_static_example.sh: Replace autoreconf call with bootstrap call.
* make-dist: Likewise.
* qemu_multiarch_testing/README: Likewise.

10 years agoImplement xlat generator
Mike Frysinger [Sun, 16 Feb 2014 06:59:20 +0000 (01:59 -0500)]
Implement xlat generator

* bootstrap: New file.
* xlat/gen.sh: Likewise.
* Makefile.am: Include xlat/Makemodule.am
(EXTRA_DIST): Add $(XLAT_INPUT_FILES), $(XLAT_HEADER_FILES), and
xlat/gen.sh.

10 years agotests: fix SCM_RIGHTS test for big-endian systems
Dmitry V. Levin [Fri, 30 May 2014 15:18:00 +0000 (15:18 +0000)]
tests: fix SCM_RIGHTS test for big-endian systems

* tests/scm_rights.c (main): Send zero integer to avoid issues with
endianness.
* tests/scm_rights-fd.test: Update grep patterns.

10 years agoDecode file descriptors passed via SCM_RIGHTS control messages
Dmitry V. Levin [Thu, 29 May 2014 21:35:34 +0000 (21:35 +0000)]
Decode file descriptors passed via SCM_RIGHTS control messages

* net.c (printcmsghdr): Print descriptors from SCM_RIGHTS control
messages using printfd.
* tests/scm_rights.c: New file.
* tests/scm_rights-fd.test: New test.
* tests/Makefile.am (check_PROGRAMS): Add scm_rights.
(TESTS): Add scm_rights-fd.test.
* tests/.gitignore: Add scm_rights and uio.

10 years agotests: add a test for -c and -w options
Dmitry V. Levin [Thu, 29 May 2014 21:14:14 +0000 (21:14 +0000)]
tests: add a test for -c and -w options

* tests/count.test: New test.
* tests/Makefile.am (TESTS): Add it.

10 years agoOptionally produce stats on syscall latency
Mark Hills [Wed, 28 May 2014 16:52:40 +0000 (17:52 +0100)]
Optionally produce stats on syscall latency

Time spent in system time is not useful where a syscall depends on some
non-CPU resource, eg. typically open() or stat() to a network drive.

This patch adds a new flag (-w) to produce a summary of the time
difference between beginning and end of the system call (ie. latency)

This functionality has been useful to profile slow processes that
are not CPU-bound.

Signed-off-by: Mark Hills <mark.hills@framestore.com>
10 years agoConstify count_syscall function
Dmitry V. Levin [Thu, 29 May 2014 18:10:00 +0000 (18:10 +0000)]
Constify count_syscall function

* count.c (count_syscall): Add const qualifier to timeval argument and
rename it.  Store the wall clock time spent while in syscall in separate
timeval variable.
* defs.h (count_syscall): Update prototype.
* syscall.c (trace_syscall_exiting): Update count_syscall invocation.

10 years agoConstify tv_* functions
Dmitry V. Levin [Thu, 29 May 2014 17:59:01 +0000 (17:59 +0000)]
Constify tv_* functions

* defs.h (tv_nz, tv_cmp, tv_float, tv_add, tv_sub, tv_mul, tv_div): Add
const qualifier to read only arguments.
* util.c (tv_nz, tv_cmp, tv_float, tv_add, tv_sub, tv_mul, tv_div):
Likewise.

10 years agoUse printstr for sethostname, setdomainname, and gethostname decoding
Dmitry V. Levin [Wed, 28 May 2014 16:38:44 +0000 (16:38 +0000)]
Use printstr for sethostname, setdomainname, and gethostname decoding

The argument passed to sethostname and setdomainname syscalls, as well
as the string returned by gethostname syscall, is not a pathname, so
printpathn is not the right method for its decoding.

* process.c (sys_sethostname, sys_setdomainname): Decode 1st argument
using printstr instead of printpathn.
[ALPHA] (sys_gethostname): Likewise.

10 years agoFix {get,set}rlimit decoding with unreliable SIZEOF_RLIM_T
James Hogan [Fri, 2 May 2014 13:15:41 +0000 (14:15 +0100)]
Fix {get,set}rlimit decoding with unreliable SIZEOF_RLIM_T

When strace is built with large file support definitions in CFLAGS (as
may be provided by buildroot) the C library headers may expose a 64-bit
rlim_t even though the struct rlimit fields used by the system call
interface are only 32-bit.  The SIZEOF_RLIM_T will then be 8 which
results in bad decoding of the getrlimit and setrlimit syscalls.

This is fixed by replacing unreliable SIZEOF_RLIM_T based checks with
checks for current_wordsize.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
10 years agoEnhance setns syscall decoding
Masatake YAMATO [Tue, 13 May 2014 16:46:04 +0000 (01:46 +0900)]
Enhance setns syscall decoding

* process.c (sys_setns): New function.
Decode the 2nd syscall argument using clone_flags.
* linux/syscall.h (sys_setns): New prototype.
* linux/dummy.h (sys_setns): Remove.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
10 years agomips: fix syscall entries that should have TP flag set
Dmitry V. Levin [Tue, 29 Apr 2014 18:15:43 +0000 (18:15 +0000)]
mips: fix syscall entries that should have TP flag set

10 years agoxtensa: fix unshare syscall entry
Dmitry V. Levin [Tue, 29 Apr 2014 18:15:43 +0000 (18:15 +0000)]
xtensa: fix unshare syscall entry

10 years agoalpha, hppa, mips n64: fix waitid syscall entry
Dmitry V. Levin [Tue, 29 Apr 2014 18:15:43 +0000 (18:15 +0000)]
alpha, hppa, mips n64: fix waitid syscall entry

10 years agoAdd TM flag to shmat and shmdt syscall entries
Dmitry V. Levin [Tue, 29 Apr 2014 18:15:43 +0000 (18:15 +0000)]
Add TM flag to shmat and shmdt syscall entries

10 years agoAlias sys_vfork to sys_fork
Dmitry V. Levin [Mon, 12 May 2014 13:43:10 +0000 (13:43 +0000)]
Alias sys_vfork to sys_fork

* process.c (sys_vfork): Remove.
* linux/syscall.h (sys_vfork): Likewise.
* linux/dummy.h (sys_vfork): Alias to sys_fork.
* linux/alpha/syscallent.h: Fix vfork entry.
* util.c (setbpt): Do not check for sys_vfork.
* syscall.c (syscall_fixup_for_fork_exec): Likewise.

10 years agoepoll_ctl: fix EPOLL_CTL_DEL argument decoding
Dmitry V. Levin [Thu, 17 Apr 2014 14:33:59 +0000 (14:33 +0000)]
epoll_ctl: fix EPOLL_CTL_DEL argument decoding

* desc.c (sys_epoll_ctl): Do not parse the event structure for
EPOLL_CTL_DEL operation.

Reported-by: Марк Коренберг <socketpair@gmail.com>
10 years agoUpdate CLOCK_* constants
Dmitry V. Levin [Thu, 17 Apr 2014 14:01:42 +0000 (14:01 +0000)]
Update CLOCK_* constants

* time.c (clocknames): Add CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
CLOCK_BOOTTIME_ALARM, CLOCK_SGI_CYCLE, and CLOCK_TAI.
Fixes RH#1088455.

10 years agoFix preadv/pwritev offset decoding
Dmitry V. Levin [Thu, 17 Apr 2014 13:32:47 +0000 (13:32 +0000)]
Fix preadv/pwritev offset decoding

* util.c (printllval): Add align argument.
* defs.h (printllval): Update prototype.
(printllval_aligned, printllval_unaligned): New macros.
* file.c (sys_readahead, sys_truncate64, sys_ftruncate64, sys_fadvise64,
sys_fadvise64_64, sys_sync_file_range, sys_sync_file_range2,
sys_fallocate): Replace printllval call with printllval_aligned.
* io.c (sys_pread, sys_pwrite): Likewise.
(sys_preadv, sys_pwritev): Replace printllval call with
printllval_unaligned.
* linux/arm/syscallent.h: Set the number of preadv and pwritev
arguments to 5.
* linux/mips/syscallent-o32.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/xtensa/syscallent.h: Likewise.

Reported-by: Dima Kogan <dima@secretsauce.net>
10 years agotests: add a test for pread/pwrite and preadv/pwritev offset decoding
Dmitry V. Levin [Wed, 16 Apr 2014 23:28:29 +0000 (23:28 +0000)]
tests: add a test for pread/pwrite and preadv/pwritev offset decoding

* tests/uio.c: New file.
* tests/uio.test: New test.
* tests/Makefile.am (check_PROGRAMS): Add uio.
(uio_CFLAGS): Define.
(TESTS): Add uio.test.

10 years agoRefactor LDT decoding
Dmitry V. Levin [Thu, 10 Apr 2014 14:10:17 +0000 (14:10 +0000)]
Refactor LDT decoding

* configure.ac (AC_CHECK_TYPES): Remove struct user_desc.
* ldt.c: New file.
* Makefile.am (strace_SOURCES): Add ldt.c.
* mem.c: Do not include <asm/ldt.h>.
(print_ldt_entry): Remove.
(sys_modify_ldt, sys_set_thread_area, sys_get_thread_area): Move...
* ldt.c: ... here.
* process.c: Do not include <asm/ldt.h>.
(sys_clone) [I386 || X86_64 || X32]: Use print_user_desc.

10 years agoMake int3 example in comments more cut-n-pastable
Denys Vlasenko [Thu, 10 Apr 2014 07:57:17 +0000 (09:57 +0200)]
Make int3 example in comments more cut-n-pastable

I found that I use it quite often. Lets make it so that
after cut-n-pasting it into a file, there is no need
to edit the result (e.g. no need to remove C comment
chars from every line.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
10 years agomips: enable decoding of set_thread_area
Dmitry V. Levin [Wed, 9 Apr 2014 13:14:44 +0000 (13:14 +0000)]
mips: enable decoding of set_thread_area

* linux/dummy.h [MIPS]: Do not redirect sys_set_thread_area to printargs.
* mem.c [MIPS] (sys_set_thread_area): Define.

10 years agox86_64, x32: enable decoding of modify_ldt, get_thread_area, and set_thread_area
Dmitry V. Levin [Wed, 9 Apr 2014 12:46:05 +0000 (12:46 +0000)]
x86_64, x32: enable decoding of modify_ldt, get_thread_area, and set_thread_area

* linux/dummy.h [X86_64 || X32]: Do not redirect sys_modify_ldt,
sys_get_thread_area, and sys_set_thread_area to printargs.

10 years agox32: decode clone LDT user_desc entries for x86 processes
Dmitry V. Levin [Wed, 9 Apr 2014 12:30:38 +0000 (12:30 +0000)]
x32: decode clone LDT user_desc entries for x86 processes

* mem.c [X32]: Include asm/ldt.h.
[X32] (print_ldt_entry, sys_modify_ldt, sys_set_thread_area,
sys_get_thread_area): Define.
* process.c [X32]: Include asm/ldt.h.
(sys_clone) [X32]: Decode LDT entry if current_personality == 1.

10 years agox86-64: decode clone LDT user_desc entries for x86 processes
Elliott Hughes [Sat, 5 Apr 2014 18:56:17 +0000 (11:56 -0700)]
x86-64: decode clone LDT user_desc entries for x86 processes

* mem.c [X86_64]: Include asm/ldt.h.
[X86_64] (print_ldt_entry, sys_modify_ldt, sys_set_thread_area,
sys_get_thread_area): Define.
* process.c [X86_64]: Include asm/ldt.h.
(sys_clone) [X86_64]: Decode LDT entry if current_personality == 1.

Signed-off-by: Elliott Hughes <enh@google.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
10 years agox32: fix clone(2) argument order for x86 processes
Dmitry V. Levin [Wed, 9 Apr 2014 12:34:58 +0000 (12:34 +0000)]
x32: fix clone(2) argument order for x86 processes

Apply the same fix that was made for x86_64.

* process.c [X32] (ARG_CTID, ARG_TLS): Take current
personality into account.

10 years agox86-64: fix clone(2) argument order for x86 processes
Elliott Hughes [Sat, 5 Apr 2014 18:56:17 +0000 (11:56 -0700)]
x86-64: fix clone(2) argument order for x86 processes

Without this patch, strace claims that parent_tidptr == tls, which is
clearly wrong.  It is expected that parent_tidptr == child_tidptr.

* process.c [X86_64] (ARG_CTID, ARG_TLS): Take current
personality into account.

Signed-off-by: Elliott Hughes <enh@google.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
10 years agoaarch64: Fix decoding of arm struct stat64
Elliott Hughes [Fri, 4 Apr 2014 00:50:14 +0000 (17:50 -0700)]
aarch64: Fix decoding of arm struct stat64

We need to handle this situation more like x86-64.  32-bit arm and i386
actually have a common struct stat64, except the arm one must not be
packed.  Additionally, on aarch64 the 32-bit personality is personality 0.

Signed-off-by: Elliott Hughes <enh@google.com>
10 years agoARM EABI: disable OABI support by default
Dmitry V. Levin [Tue, 18 Mar 2014 23:37:43 +0000 (23:37 +0000)]
ARM EABI: disable OABI support by default

OABI is rarely used in ARM EABI systems nowadays, so disable its support
by default.  Add --enable-arm-oabi option to enable ARM OABI support.

* configure.ac: New option --enable-arm-oabi.
* syscall.c (get_scno) [ARM]: Check ENABLE_ARM_OABI macro defined by
configure instead of undocumented STRACE_KNOWS_ONLY_EABI macro.

10 years agoFix stat decoding for LP64 bionic
Elliott Hughes [Wed, 12 Mar 2014 17:31:04 +0000 (10:31 -0700)]
Fix stat decoding for LP64 bionic

Patch fb642bb6d63f7ffe2228bf48a6008bc8f56f67ff fixed building with
HAVE_STAT64 for aarch64 with uapi kernel headers but not x86_64.
The workaround needed to be applied to all LP64 architectures, not
just aarch64.  This patch fixes that and adds an explanatory comment.

Signed-off-by: Elliott Hughes <enh@google.com>
10 years agoDecode protocol argument for PF_NETLINK sockets
Masatake YAMATO [Tue, 11 Mar 2014 14:37:37 +0000 (23:37 +0900)]
Decode protocol argument for PF_NETLINK sockets

* net.c (protocols): Rename to inet_protocols.
[PF_NETLINK] (netlink_protocols): New xlat structure.
(sys_socket): Rename protocols to inet_protocols.
[PF_NETLINK]: Decode protocol argument using netlink_protocols.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
Acked-by: Mike Frysinger <vapier@gentoo.org>
10 years agoCleanup socketpair decoding
Dmitry V. Levin [Tue, 11 Mar 2014 22:50:39 +0000 (22:50 +0000)]
Cleanup socketpair decoding

The only supported domain for socketpair syscall is AF_UNIX, so
no decoding related to other domains is required for socketpair.

* net.c (sys_socketpair): Remove support for PF_INET and PF_IPX domains,
print the protocol argument as is.

10 years agoprintsiginfo: add SIGSYS decoding
Dmitry V. Levin [Tue, 11 Mar 2014 22:18:40 +0000 (22:18 +0000)]
printsiginfo: add SIGSYS decoding

* configure.ac (AC_CHECK_MEMBERS): Check for siginfo_t.si_syscall.
* signal.c (SYS_SECCOMP): Define if not yet defined.
(sigsys_codes): new xlat structure.
(printsiginfo): Decode SIGSYS.

10 years agoUpdate siginfo codes
Dmitry V. Levin [Tue, 11 Mar 2014 01:57:02 +0000 (01:57 +0000)]
Update siginfo codes

* signal.c (siginfo_codes): Add SI_DETHREAD.

10 years agoFactor out printing of si_pid and si_uid members of siginfo_t
Dmitry V. Levin [Tue, 11 Mar 2014 00:05:19 +0000 (00:05 +0000)]
Factor out printing of si_pid and si_uid members of siginfo_t

* signal.c (printsigsource): New function.
(printsiginfo): Use it.

10 years agoImprove SI_TIMER decoding
Elliott Hughes [Mon, 10 Mar 2014 19:27:22 +0000 (19:27 +0000)]
Improve SI_TIMER decoding

Decode siginfo_t more clearly for si_code SI_TIMER.
The 'pid' is actually a POSIX timer id, and the 'uid' is actually the
overrun.
Also factor out the si_value dumping so it's the same for every si_code.

Signed-off-by: Elliott Hughes <enh@google.com>
10 years agoaarch64: fix decoding of arm syscall numbers
Elliott Hughes [Mon, 3 Mar 2014 23:45:26 +0000 (23:45 +0000)]
aarch64: fix decoding of arm syscall numbers

If an aarch64 strace is tracing a process using the arm personality, it
also needs to call the shuffle_scno function for the ARM-specific
syscalls.

* syscall.c (shuffle_scno): Define on AARCH64.
(get_scno) [AARCH64]: Call shuffle_scno when the tracee is in 32-bit mode.

Signed-off-by: Elliott Hughes <enh@google.com>
10 years agoFix fcntl decoding
Dmitry V. Levin [Mon, 3 Mar 2014 23:09:47 +0000 (23:09 +0000)]
Fix fcntl decoding

Assume that F_SETLK64, F_SETLKW64, and F_GETLK64 are either defined or
not defined altogether.
Do not assume that sizeof(off_t) < sizeof(long long) when F_SETLK64 is
undefined.

This change fixes build with musl libc on x86.

* configure.ac: Define SIZEOF_OFF_T.
* desc.c (USE_PRINTFLOCK64): New macro.
(struct flock64, printflock64): Do not define on X32.
(printflock): Replace X32 specific workaround with SIZEOF_OFF_T check.
Fix printing off_t members of struct flock.
(sys_fcntl): Use USE_PRINTFLOCK64.

10 years agosys_fcntl: remove F_FREESP and F_FREESP64 support
Dmitry V. Levin [Sat, 1 Mar 2014 21:17:17 +0000 (21:17 +0000)]
sys_fcntl: remove F_FREESP and F_FREESP64 support

F_FREESP and F_FREESP64 fcntl commands are not available in Linux
and therefore the code implementing their decoding is useless.
Besides that, F_FREESP64 decoding is too complicated to support.

* desc.c (fcntlcmds): Remove F_FREESP and F_FREESP64.
Remove F_FREESP64 from the check whether to define struct flock64.
(sys_fcntl): Remove F_FREESP and F_FREESP64 support.

10 years agoAdd multi-personality support to struct old_sigaction decoding
Elliott Hughes [Fri, 28 Feb 2014 23:21:35 +0000 (23:21 +0000)]
Add multi-personality support to struct old_sigaction decoding

struct sigaction is another structure that contains members
whose size differs between 32-bit and 64-bit personalities.

* signal.c [HAVE_SIGACTION] (old_sigaction32): New structure.
[HAVE_SIGACTION] (decode_old_sigaction): Decode 32-bit struct
old_sigaction on a 64-bit host.

Signed-off-by: Elliott Hughes <enh@google.com>
10 years agoFix decoding of arm struct stat64 by aarch64 strace.
Elliott Hughes [Fri, 28 Feb 2014 23:16:32 +0000 (23:16 +0000)]
Fix decoding of arm struct stat64 by aarch64 strace.

aarch64's uapi header files have a struct stat but no struct stat64.
To correctly decode a 32-bit process' s struct stat64 we need
HAVE_STAT64, but then the build fails because there is no struct stat64.
Luckily, the aarch64 struct stat is structurally equivalent to the arm
struct stat64, so we can just reuse that.

* file.c [AARCH64] (stat64): Define to stat.

Signed-off-by: Elliott Hughes <enh@google.com>
10 years agoRemove obsolete ioctlsort.c
Dmitry V. Levin [Fri, 28 Feb 2014 22:44:43 +0000 (22:44 +0000)]
Remove obsolete ioctlsort.c

The generic version of ioctlsort.c became obsolete after commit
v4.6-240-g5afdf12 that removed its last non-Linux users.

* ioctlsort.c: Remove.
* Makefile.am (EXTRA_DIST): Remove ioctlsort.c.

Reported-by: Elliott Hughes <enh@google.com>