* call the exit() routine from the C libraries in the FPC haltproc on OpenBSD

x86_64, libc startup code

git-svn-id: trunk@41743 -
This commit is contained in:
nickysn 2019-03-19 17:27:11 +00:00
parent 3969c87bd5
commit 144f31c94f

View File

@ -29,6 +29,7 @@ var
function atexit(proc: TCdeclProcedure): cint; cdecl; external name 'atexit'; function atexit(proc: TCdeclProcedure): cint; cdecl; external name 'atexit';
procedure monstartup(lowpc, highpc: u_long); cdecl; external name 'monstartup';} procedure monstartup(lowpc, highpc: u_long); cdecl; external name 'monstartup';}
procedure __init; cdecl; external name '__init'; 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); forward; procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); forward;
@ -46,7 +47,7 @@ procedure _FPC_proc_start; assembler; nostackframe; public name '_start'; public
jmp _FPC_proc___start jmp _FPC_proc___start
end; end;
procedure _FPC_proc_haltproc; forward; procedure _FPC_proc_haltproc; noreturn; forward;
function _strrchr(str: PChar; character: LongInt): PChar; forward; function _strrchr(str: PChar; character: LongInt): PChar; forward;
procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); public name '___start'; procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, para2, para3: QWord); public name '___start';
@ -82,23 +83,9 @@ procedure _FPC_proc___start(argc: LongInt; argv: PPChar; envp: Pointer; para1, p
end; end;
end; end;
procedure _FPC_proc_haltproc; assembler; nostackframe; public name '_haltproc'; procedure _FPC_proc_haltproc; noreturn; public name '_haltproc';
asm begin
movq $1,%rax c_exit(operatingsystem_result);
movl operatingsystem_result(%rip),%ebx
pushq %rbx
call .Lactualsyscall
addq $8,%rsp
jmp _FPC_proc_haltproc
.Lactualsyscall:
int $0x80
jb .LErrorcode
xor %rbx,%rbx
ret
.LErrorcode:
movq %rax,%rbx
movq $-1,%rax
end; end;
function _strrchr(str: PChar; character: LongInt): PChar; public name '_strrchr'; function _strrchr(str: PChar; character: LongInt): PChar; public name '_strrchr';