瀏覽代碼

Use two parameter versions of get_caller_frame and get_caller_addr to get correct results for MIPS

git-svn-id: trunk@21843 -
pierre 13 年之前
父節點
當前提交
bc1ecc2e94
共有 1 個文件被更改,包括 6 次插入3 次删除
  1. 6 3
      rtl/inc/except.inc

+ 6 - 3
rtl/inc/except.inc

@@ -102,6 +102,7 @@ var
   frames      : PPointer;
   frames      : PPointer;
   prev_frame,
   prev_frame,
   curr_frame,
   curr_frame,
+  curr_addr,
   caller_frame,
   caller_frame,
   caller_addr : Pointer;
   caller_addr : Pointer;
 begin
 begin
@@ -119,15 +120,16 @@ begin
 
 
   { Backtrace }
   { Backtrace }
   curr_frame:=AFrame;
   curr_frame:=AFrame;
-  prev_frame:=get_frame;
+  curr_addr:=AnAddr;
+  prev_frame:=get_caller_frame(curr_addr, curr_frame);
   frames:=nil;
   frames:=nil;
   framebufsize:=0;
   framebufsize:=0;
   framecount:=0;
   framecount:=0;
   while (framecount<RaiseMaxFrameCount) and (curr_frame > prev_frame) and
   while (framecount<RaiseMaxFrameCount) and (curr_frame > prev_frame) and
         (curr_frame<(StackBottom + StackLength)) do
         (curr_frame<(StackBottom + StackLength)) do
    Begin
    Begin
-     caller_addr := get_caller_addr(curr_frame);
-     caller_frame := get_caller_frame(curr_frame);
+     caller_addr := get_caller_addr(curr_frame, curr_addr);
+     caller_frame := get_caller_frame(curr_frame, curr_addr);
      if (caller_addr=nil) or
      if (caller_addr=nil) or
         (caller_frame=nil) then
         (caller_frame=nil) then
        break;
        break;
@@ -139,6 +141,7 @@ begin
      frames[framecount]:=caller_addr;
      frames[framecount]:=caller_addr;
      inc(framecount);
      inc(framecount);
      prev_frame:=curr_frame;
      prev_frame:=curr_frame;
+     curr_addr:=caller_addr;
      curr_frame:=caller_frame;
      curr_frame:=caller_frame;
    End;
    End;
   NewObj^.framecount:=framecount;
   NewObj^.framecount:=framecount;