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)
{