73741d2e2ee0f9d446b0dc2fbc70be3f5b10521b |
|
13-Jun-2014 |
Dmitry V. Levin <ldv@altlinux.org> |
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.
/external/strace/unwind.c
|
9a349c7779c1c0da89b4eb2821c3b5e6de84adcf |
|
12-Jun-2014 |
Dmitry V. Levin <ldv@altlinux.org> |
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 "[".
/external/strace/unwind.c
|
2222b928c65b1259f27625d6e50627865fb75336 |
|
13-Jun-2014 |
Dmitry V. Levin <ldv@altlinux.org> |
unwind: remove unused field from mmap_cache_t * unwind.c (mmap_cache_t): Remove "deleted" field. (build_mmap_cache): Remove initialization of "deleted" field.
/external/strace/unwind.c
|
52840ede0c72d90b9dad3dc829ef4b4909d51ab6 |
|
06-Jun-2014 |
Dmitry V. Levin <ldv@altlinux.org> |
unwind: refactor stacktrace_walk * unwind.c (stacktrace_walk): Move stack frame printing code to separate function print_stack_frame.
/external/strace/unwind.c
|
806539c55c8697f7f0a4bfd95345f216797fe7e0 |
|
06-Jun-2014 |
Dmitry V. Levin <ldv@altlinux.org> |
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.
/external/strace/unwind.c
|
f1d73110a00122879a0fdb63bbeffc0bd161e857 |
|
10-Jun-2014 |
Luca Clementi <luca.clementi@gmail.com> |
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.
/external/strace/unwind.c
|
6555711a6ee9b63a5a9c5e3e530d066306c0760c |
|
05-Jun-2014 |
Dmitry V. Levin <ldv@altlinux.org> |
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.
/external/strace/unwind.c
|
c12eb1117c8d91773ea0c138eb220addec1448d0 |
|
05-Jun-2014 |
Dmitry V. Levin <ldv@altlinux.org> |
unwind: fix a bug in range updating of binary search * unwind.c (print_stacktrace): Fix another off-by-one error in binary search.
/external/strace/unwind.c
|
c903c822ee94478bff1732eb80744e201c074d26 |
|
05-Jun-2014 |
Dmitry V. Levin <ldv@altlinux.org> |
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.
/external/strace/unwind.c
|
e4113974893293c82f177fe4195cac0a5b70465a |
|
05-Jun-2014 |
Dmitry V. Levin <ldv@altlinux.org> |
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.
/external/strace/unwind.c
|
a0b4ee7b38e600f28e547585e754b7737b388d90 |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
b45b7faa1fc0373831fb00a3892de45b4df87232 |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
9bc6561588093a788c29f07579f9e4103864a752 |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
f8e39d7b7a9d581e634be59af73cf82cb566abf9 |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
4e121e5bb45f79ec61dc2c01c7625ccf215d8457 |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
2d534daaa66ddc6a0558717160f0e1b337f7b7c5 |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
6141392856a170c9297783e6bfbd9fd970f76fdf |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
7721499fc7ea15cbf2f7d4f89c9502e325b451fc |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
b65042fbdb576d13e9bb57c21a890539cab25c43 |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
b4a2de8efff1aaf45e9bc64fc731213a01cbdb53 |
|
16-Apr-2014 |
Masatake YAMATO <yamato@redhat.com> |
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>
/external/strace/unwind.c
|
327064b63722a4400058e0e7e9b39d9e34b14b57 |
|
23-Jul-2013 |
Luca Clementi <luca.clementi@gmail.com> |
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.
/external/strace/unwind.c
|