فهرست منبع

atari: implemented stacktop for working stacktraces, implemented stacksize dependent stackmargin, and a system specific backtracestr. however, offs display still doesn't work properly, due to a linker issue (reported)

git-svn-id: trunk@49203 -
Károly Balogh 4 سال پیش
والد
کامیت
8f61df817a
3فایلهای تغییر یافته به همراه25 افزوده شده و 3 حذف شده
  1. 1 1
      rtl/atari/si_prc.pp
  2. 19 0
      rtl/atari/sysos.inc
  3. 5 2
      rtl/atari/system.pp

+ 1 - 1
rtl/atari/si_prc.pp

@@ -24,7 +24,7 @@ implementation
 var
   procdesc: PPD; public name '__base';
   tpasize: longint;
-  stacktop: pointer;
+  stacktop: pointer; public name '__stktop';
   stklen: longint; external name '__stklen';
 
 

+ 19 - 0
rtl/atari/sysos.inc

@@ -42,3 +42,22 @@ begin
       end;
     end;
 end;
+
+var
+  stackpointer_on_entry: pointer; external name '__stktop';
+
+function StackTop: Pointer;
+begin
+  StackTop:=stackpointer_on_entry;
+end;
+
+var
+  basepage: PPD; external name '__base';
+
+function SysBackTraceStr (Addr: CodePointer): ShortString;
+begin
+  if (addr<basepage^.p_tbase) or (addr>pointer(basepage^.p_tbase+basepage^.p_tlen)) then
+    SysBackTraceStr:='  Addr $'+hexstr(addr)
+  else
+    SysBackTraceStr:='  Offs $'+hexstr(pointer(addr-basepage^.p_tbase));
+end;

+ 5 - 2
rtl/atari/system.pp

@@ -76,6 +76,9 @@ var
 
   implementation
 
+    {$define FPC_SYSTEM_HAS_STACKTOP}
+    {$define FPC_SYSTEM_HAS_BACKTRACESTR}
+
     {$if defined(FPUSOFT)}
 
     {$define fpc_softfpu_implementation}
@@ -104,8 +107,6 @@ var
     {$endif FPC_ATARI_USE_TINYHEAP}
     {$i syspara.inc}
 
-  var
-    basepage: PPD; external name '__base';
 
 
   function GetProcessID:SizeUInt;
@@ -160,6 +161,8 @@ end;
 
 begin
   StackLength := CheckInitialStkLen (InitialStkLen);
+  StackBottom := StackTop - StackLength;
+  StackMargin := min(align(StackLength div 20,2),STACK_MARGIN_MAX);
 { Initialize ExitProc }
   ExitProc:=Nil;
 {$ifndef FPC_ATARI_USE_TINYHEAP}