mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 19:49:22 +02:00
* 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:
parent
3969c87bd5
commit
144f31c94f
@ -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';
|
||||||
|
Loading…
Reference in New Issue
Block a user