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

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