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

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