From 72ee29639c55b5942bc07c8ed0013005f8fc5a97 Mon Sep 17 00:00:00 2001 From: Petr Machata Date: Wed, 8 Apr 2015 07:14:10 -0400 Subject: [PATCH 2/2] Fix tracing multi-threaded processes without -f - In handle_syscall, we avoid touching stack of ignored processes. But in handle_sysret, we require a sysret-like stack entry even for ignored processes, even though we then go ahead to not act on that stack entry. Instead, for ignored processes, avoid looking at stack trace at all. --- handle_event.c | 10 +++++----- testsuite/ltrace.main/main-threaded.exp | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/handle_event.c b/handle_event.c index 6fa7e98..c2550ad 100644 --- a/handle_event.c +++ b/handle_event.c @@ -619,12 +619,12 @@ handle_x_sysret(Event *event, char *(*name_cb)(struct process *, int)) debug(DEBUG_FUNCTION, "handle_x_sysret(pid=%d, sysnum=%d)", event->proc->pid, event->e_un.sysnum); - unsigned d = event->proc->callstack_depth; - assert(d > 0); - struct callstack_element *elem = &event->proc->callstack[d - 1]; - assert(elem->is_syscall); - if (event->proc->state != STATE_IGNORED) { + unsigned d = event->proc->callstack_depth; + assert(d > 0); + struct callstack_element *elem = &event->proc->callstack[d - 1]; + assert(elem->is_syscall); + struct timedelta spent = calc_time_spent(elem->enter_time); if (options.syscalls) output_syscall_right(event->proc, diff --git a/testsuite/ltrace.main/main-threaded.exp b/testsuite/ltrace.main/main-threaded.exp index cead82d..aca7afd 100644 --- a/testsuite/ltrace.main/main-threaded.exp +++ b/testsuite/ltrace.main/main-threaded.exp @@ -60,5 +60,6 @@ set bin [ltraceCompile {} $libprint -lpthread [ltraceSource c { }]] ltraceMatch1 [ltraceRun -f -l libprint.so -- $bin] {print\(} == 30 +ltraceMatch1 [ltraceRun -L -- $bin] exited == 1 ltraceDone -- 2.1.0