[PATCH 6/6] x86_64: Trace RBP chain on kernel stack only if unwind() fails

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



- unwind() logic attempts to collect all the callee-saved registers including
RBP. So, RBP chain tracing is necessary only if this unwind() logic doesn't
succeed.

- Also, verify whether a given task is not active. This is because for active
tasks, RBP saved on the corresponding kernel stacks could be modified.

Signed-off-by: HATAYAMA Daisuke <d.hatayama@xxxxxxxxxxxxxx>
---
 src/libgcore/gcore_x86.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/libgcore/gcore_x86.c b/src/libgcore/gcore_x86.c
index 8c129d3..871a9db 100644
--- a/src/libgcore/gcore_x86.c
+++ b/src/libgcore/gcore_x86.c
@@ -1258,7 +1258,7 @@ static inline void restore_rest(ulong task, struct pt_regs *regs,
 	 * could trace the value of bp until its value became a
 	 * user-space address. See comments of restore_frame_pointer.
 	 */
-	if (machdep->flags & FRAMEPOINTER) {
+	else if ((machdep->flags & FRAMEPOINTER) && !is_task_active(task)) {
 		regs->rbp = restore_frame_pointer(task);
 	}
 }
-- 
1.7.4


--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility


[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux