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

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