Blame SOURCES/ltrace-0.7.91-multithread-no-f-2.patch

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