* updated the asm parts of the i386 OpenBSD startup code as well

git-svn-id: trunk@42080 -
This commit is contained in:
nickysn 2019-05-15 17:16:21 +00:00
parent 806b65da6b
commit e0b523ef14
4 changed files with 34 additions and 30 deletions

View File

@ -42,15 +42,16 @@ ___fpc_brk_addr:
.globl _start
_start:
__start:
pushl %ebx #ps_strings
pushl %ecx # obj
pushl %edx # cleanup
movl 12(%esp),%eax
leal 20(%esp,%eax,4),%ecx
leal 16(%esp),%edx
movl %esp,%ebp
andl $~15,%esp
pushl %edx
movl 0(%ebp),%eax
leal 8(%ebp,%eax,4),%ecx
leal 4(%ebp),%edx
pushl %ecx
pushl %edx
pushl %eax
xorl %ebp,%ebp
call ___start
#NO_APP

View File

@ -19,25 +19,26 @@
procedure __init; cdecl; external name '__init';
procedure c_exit(exit_code: cint); cdecl; noreturn; external name 'exit';
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl; forward;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl; forward;
procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public name '__start';
asm
pushl %ebx { ps_strings }
pushl %ecx { obj }
pushl %edx { cleanup }
movl 12(%esp),%eax
leal 20(%esp,%eax,4),%ecx
leal 16(%esp),%edx
movl %esp,%ebp
andl $0xFFFFFFF0,%esp
pushl %edx
movl 0(%ebp),%eax
leal 8(%ebp,%eax,4),%ecx
leal 4(%ebp),%edx
pushl %ecx
pushl %edx
pushl %eax
xorl %ebp,%ebp
call _FPC_proc___start
end;
function _strrchr(str: PChar; character: LongInt): PChar; forward;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl;
var
I: SizeUInt;
begin

View File

@ -26,25 +26,26 @@ procedure _monstartup(lowpc, highpc: u_long); cdecl; external name '_monstartup'
procedure __init; cdecl; external name '__init';
procedure c_exit(exit_code: cint); cdecl; noreturn; external name 'exit';
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl; forward;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl; forward;
procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public name '__start';
asm
pushl %ebx { ps_strings }
pushl %ecx { obj }
pushl %edx { cleanup }
movl 12(%esp),%eax
leal 20(%esp,%eax,4),%ecx
leal 16(%esp),%edx
movl %esp,%ebp
andl $0xFFFFFFF0,%esp
pushl %edx
movl 0(%ebp),%eax
leal 8(%ebp,%eax,4),%ecx
leal 4(%ebp),%edx
pushl %ecx
pushl %edx
pushl %eax
xorl %ebp,%ebp
call _FPC_proc___start
end;
function _strrchr(str: PChar; character: LongInt): PChar; forward;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl;
var
I: SizeUInt;
begin

View File

@ -16,26 +16,27 @@
{$asmmode att}
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl; forward;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl; forward;
procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public name '__start';
asm
pushl %ebx { ps_strings }
pushl %ecx { obj }
pushl %edx { cleanup }
movl 12(%esp),%eax
leal 20(%esp,%eax,4),%ecx
leal 16(%esp),%edx
movl %esp,%ebp
andl $0xFFFFFFF0,%esp
pushl %edx
movl 0(%ebp),%eax
leal 8(%ebp,%eax,4),%ecx
leal 4(%ebp),%edx
pushl %ecx
pushl %edx
pushl %eax
xorl %ebp,%ebp
call _FPC_proc___start
end;
procedure _FPC_proc_haltproc; cdecl; noreturn; forward;
function _strrchr(str: PChar; character: LongInt): PChar; forward;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); cdecl;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; cleanup: TCdeclProcedure); cdecl;
var
I: SizeUInt;
begin