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

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