From c87d34624eb5f524ff93969d354805cc41fd3220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Sun, 12 Oct 2008 21:23:04 +0000 Subject: [PATCH] Fix identifying iframes in stack_traces. What you get copying ppc code without trying to understand :) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28007 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/arch/m68k/arch_debug.cpp | 4 ++-- src/system/kernel/arch/m68k/arch_exceptions.S | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/arch/m68k/arch_debug.cpp b/src/system/kernel/arch/m68k/arch_debug.cpp index 0352b22370..a692cf3e58 100644 --- a/src/system/kernel/arch/m68k/arch_debug.cpp +++ b/src/system/kernel/arch/m68k/arch_debug.cpp @@ -194,7 +194,7 @@ return 0; // see if the frame pointer matches the iframe struct iframe *frame = NULL; for (i = 0; i < frameStack->index; i++) { - if (framePointer == (((addr_t)frameStack->frames[i] - 8) & ~0xf)) { + if (framePointer == (addr_t)frameStack->frames[i]) { // it's an iframe frame = frameStack->frames[i]; break; @@ -324,7 +324,7 @@ arch_debug_get_stack_trace(addr_t* returnAddresses, int32 maxCount, // see if the frame pointer matches the iframe struct iframe *frame = NULL; for (i = 0; i < frameStack->index; i++) { - if (framePointer == (((addr_t)frameStack->frames[i] - 8) & ~0xf)) { + if (framePointer == (addr_t)frameStack->frames[i]) { // it's an iframe frame = frameStack->frames[i]; break; diff --git a/src/system/kernel/arch/m68k/arch_exceptions.S b/src/system/kernel/arch/m68k/arch_exceptions.S index ee918f4d81..8314328a76 100644 --- a/src/system/kernel/arch/m68k/arch_exceptions.S +++ b/src/system/kernel/arch/m68k/arch_exceptions.S @@ -108,6 +108,7 @@ null_sav_1: sub.l #IFRAME_fpu-IFRAME_fp,%sp null_sav_2: + move.l %sp,%fp /* have stack_trace() find the iframe */ move.l %sp,-(%sp) /* push address of iframe */ bsr m68k_exception_entry /* call C entry */ add.l #4,%sp