[PATCH 3/3] Unwind x86_64 stack using CONFIG_FRAME_POINTER

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

 




Index: crash-4.0-8.9/extensions/local.c
===================================================================
--- crash-4.0-8.9.orig/extensions/local.c	2009-05-25 07:43:59.000000000 +0530
+++ crash-4.0-8.9/extensions/local.c	2009-05-25 08:23:29.000000000 +0530
@@ -54,6 +54,7 @@
 static ulong fetch_register_x86_64(int reg);
 static int assign_register_x86_64(int reg, ulong value);
 static int display_registers_x86_64(void);
+static int unwind_x86_64();
 
 /* Dwarf routines */
 static void print_function_variables();
@@ -333,7 +334,11 @@
 		{
 		case STACK_UNWIND_UP:
 			local->flags = STACK_UNWIND_UP;
- 			unwind_dw_up(local->pc);
+ 			#ifdef X86_64
+				unwind_x86_64();	
+			#elif PPC64
+				unwind_dw_up(locddal->pc);	
+			#endif
 			break;
 		case STACK_UNWIND_DOWN:
 			local->flags = STACK_UNWIND_DOWN;
@@ -361,6 +366,19 @@
 	}
 }
 
+static int
+unwind_x86_64()
+{
+	ulong rbp;
+	struct pt_regs_x86_64 *pt_regs;
+	pt_regs = (struct pt_regs_x86_64 *)local->regs;
+	rbp = pt_regs->bp;
+	pt_regs->sp = rbp + 2*sizeof(ulong);
+	read_vmcore(rbp + sizeof(ulong), sizeof(ulong), &pt_regs->ip);
+	read_vmcore(rbp, sizeof(ulong), &pt_regs->bp);
+	local->pc = pt_regs->ip;
+	return 0;
+}
 static int 
 str_to_option(char *str)
 {
--
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