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