Blame SOURCES/ltrace-0.7.91-ppc64-fork.patch

2e4be5
From 35742523e3daa0e59de0c1c3fdd8e5ff52891967 Mon Sep 17 00:00:00 2001
2e4be5
From: Petr Machata <pmachata@redhat.com>
2e4be5
Date: Thu, 9 Jan 2014 23:41:50 +0100
2e4be5
Subject: [PATCH] Fix a problem in tracing across fork on PPC64
2e4be5
2e4be5
In order to avoid single-stepping through large portions of the
2e4be5
dynamic linker, ltrace remembers at which address the instruction that
2e4be5
resolved a PLT slot is.  It then puts a breakpoint to this address so
2e4be5
that it can fast-forward to that address next time it needs to catch a
2e4be5
PLT slot being resolved.
2e4be5
2e4be5
When a process is cloned, the pointer to this breakpoint is simply
2e4be5
copied over to the new process, instead of being looked up in the new
2e4be5
process structures.  This patches fixes this.
2e4be5
---
2e4be5
 sysdeps/linux-gnu/ppc/plt.c |   14 +++++++++++++-
2e4be5
 1 files changed, 13 insertions(+), 1 deletions(-)
2e4be5
2e4be5
diff --git a/sysdeps/linux-gnu/ppc/plt.c b/sysdeps/linux-gnu/ppc/plt.c
2e4be5
index 3ec1397..8715da6 100644
2e4be5
--- a/sysdeps/linux-gnu/ppc/plt.c
2e4be5
+++ b/sysdeps/linux-gnu/ppc/plt.c
2e4be5
@@ -1,6 +1,6 @@
2e4be5
 /*
2e4be5
  * This file is part of ltrace.
2e4be5
- * Copyright (C) 2012,2013 Petr Machata, Red Hat Inc.
2e4be5
+ * Copyright (C) 2012,2013,2014 Petr Machata, Red Hat Inc.
2e4be5
  * Copyright (C) 2004,2008,2009 Juan Cespedes
2e4be5
  * Copyright (C) 2006 Paul Gilliam
2e4be5
  *
2e4be5
@@ -1157,6 +1157,18 @@ int
2e4be5
 arch_process_clone(struct process *retp, struct process *proc)
2e4be5
 {
2e4be5
 	retp->arch = proc->arch;
2e4be5
+
2e4be5
+	if (retp->arch.dl_plt_update_bp != NULL) {
2e4be5
+		/* Point it to the corresponding breakpoint in RETP.
2e4be5
+		 * It must be there, this part of PROC has already
2e4be5
+		 * been cloned to RETP.  */
2e4be5
+		retp->arch.dl_plt_update_bp
2e4be5
+			= address2bpstruct(retp,
2e4be5
+					   retp->arch.dl_plt_update_bp->addr);
2e4be5
+
2e4be5
+		assert(retp->arch.dl_plt_update_bp != NULL);
2e4be5
+	}
2e4be5
+
2e4be5
 	return 0;
2e4be5
 }
2e4be5
 
2e4be5
-- 
2e4be5
1.7.6.5
2e4be5