From 381f2432432230c560a12748044a672957af580f Mon Sep 17 00:00:00 2001 From: olle Date: Thu, 28 Apr 2005 18:29:01 +0000 Subject: [PATCH] * Fixed bug in stack crawling routines for macos --- rtl/powerpc/powerpc.inc | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/rtl/powerpc/powerpc.inc b/rtl/powerpc/powerpc.inc index f739e2c32d..9dbbdec046 100644 --- a/rtl/powerpc/powerpc.inc +++ b/rtl/powerpc/powerpc.inc @@ -1038,33 +1038,32 @@ asm end; {NOTE: On MACOS, 68000 code might call powerpc code, through the MixedMode manager, -(even in the OS in system 9). The pointer to the switching stack frame is +(even in the OS in system 9). The pointer to the switching stack frame is then indicated by the first bit set to 1. This is checked below.} +{Both routines below assumes that framebp is a valid framepointer or nil.} + {$define FPC_SYSTEM_HAS_GET_CALLER_ADDR} function get_caller_addr(framebp:pointer):pointer;assembler;{$ifdef SYSTEMINLINE}inline;{$endif} nostackframe; asm cmplwi r3,0 - beq .Lcaller_addr_frame_null -{$ifdef MACOS} - rlwinm r4,r3,0,31,31 - cmpwi r4,0 - bne cr0,.Lcaller_addr_frame_null -{$endif MACOS} + beq .Lcaller_addr_invalid lwz r3,0(r3) cmplwi r3,0 - beq .Lcaller_addr_frame_null + beq .Lcaller_addr_invalid {$ifdef MACOS} - rlwinm r4,r3,0,31,31 - cmpwi r4,0 - bne cr0,.Lcaller_addr_frame_null + rlwinm r4,r3,0,31,31 + cmpwi r4,0 + bne cr0,.Lcaller_addr_invalid {$endif MACOS} {$ifdef FPC_ABI_AIX} lwz r3,8(r3) {$else FPC_ABI_AIX} lwz r3,4(r3) {$endif FPC_ABI_AIX} -.Lcaller_addr_frame_null: + blr +.Lcaller_addr_invalid: + li r3,0 end; @@ -1072,14 +1071,16 @@ end; function get_caller_frame(framebp:pointer):pointer;assembler;{$ifdef SYSTEMINLINE}inline;{$endif} nostackframe; asm cmplwi r3,0 - beq .Lcaller_frame_null + beq .Lcaller_frame_invalid + lwz r3,0(r3) {$ifdef MACOS} rlwinm r4,r3,0,31,31 cmpwi r4,0 - bne cr0,.Lcaller_frame_null + bne cr0,.Lcaller_frame_invalid {$endif MACOS} - lwz r3,0(r3) -.Lcaller_frame_null: + blr +.Lcaller_frame_invalid: + li r3,0 end; {$define FPC_SYSTEM_HAS_ABS_LONGINT} @@ -1156,7 +1157,10 @@ end; { $Log$ - Revision 1.75 2005-02-14 17:13:31 peter + Revision 1.76 2005-04-28 18:29:01 olle + * Fixed bug in stack crawling routines for macos + + Revision 1.75 2005/02/14 17:13:31 peter * truncate log Revision 1.74 2005/01/31 20:57:41 olle