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

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