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 -
This commit is contained in:
Károly Balogh 2021-04-14 14:59:08 +00:00
parent 1e527e7a1e
commit 8f61df817a
3 changed files with 25 additions and 3 deletions

View File

@ -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';

View File

@ -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;

View File

@ -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}