mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 04:48:07 +02:00
haiku: pascal sysinit code for haiku, will be needed for x86_64, nice to have for i386
git-svn-id: trunk@40754 -
This commit is contained in:
parent
2f7fe0e737
commit
efba70f82b
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -9411,6 +9411,8 @@ rtl/haiku/pthread.inc svneol=native#text/plain
|
||||
rtl/haiku/ptypes.inc svneol=native#text/plain
|
||||
rtl/haiku/rtldefs.inc svneol=native#text/plain
|
||||
rtl/haiku/settimeo.inc svneol=native#text/plain
|
||||
rtl/haiku/si_c.pp svneol=native#text/plain
|
||||
rtl/haiku/si_dllc.pp svneol=native#text/plain
|
||||
rtl/haiku/signal.inc svneol=native#text/plain
|
||||
rtl/haiku/suuid.inc svneol=native#text/plain
|
||||
rtl/haiku/syscall.inc svneol=native#text/plain
|
||||
|
68
rtl/haiku/si_c.pp
Normal file
68
rtl/haiku/si_c.pp
Normal file
@ -0,0 +1,68 @@
|
||||
{
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 2019 by the Free Pascal development team
|
||||
|
||||
System Entry point for Haiku, linked-against-libc version
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
unit si_c;
|
||||
|
||||
interface
|
||||
|
||||
implementation
|
||||
|
||||
{ Bindings to RTL }
|
||||
var
|
||||
argc: longint; public name 'operatingsystem_parameter_argc';
|
||||
argv: pointer; public name 'operatingsystem_parameter_argv';
|
||||
envp: pointer; public name 'operatingsystem_parameter_envp';
|
||||
|
||||
procedure PascalMain; external name 'PASCALMAIN';
|
||||
|
||||
{ Bindings to libroot/libc }
|
||||
const
|
||||
libc = 'root';
|
||||
|
||||
var
|
||||
argv_save: pointer; external name 'argv_save';
|
||||
main_thread_id: ptruint; external name '__main_thread_id';
|
||||
|
||||
function find_thread(name: pchar): ptruint; cdecl; external libc name 'find_thread';
|
||||
procedure _init_c_library_(argc: longint; argv: ppchar; env: ppchar); cdecl; external libc name '_init_c_library_';
|
||||
procedure _call_init_routines_; cdecl; external libc name '_call_init_routines_';
|
||||
procedure __exit(status: longint); cdecl; external libc name 'exit';
|
||||
|
||||
|
||||
function _FPC_proc_start(_argc: longint; _argv: pointer; _envp: pointer): longint; cdecl; public name '_start';
|
||||
begin
|
||||
argc:=_argc;
|
||||
argv:=_argv;
|
||||
envp:=_envp;
|
||||
|
||||
argv_save:=_argv;
|
||||
main_thread_id:=find_thread(nil);
|
||||
|
||||
{ This is actually only needed for BeOS R5 compatibility,
|
||||
they're empty stubs in Haiku, according to the C code (KB) }
|
||||
_init_c_library_(_argc,_argv,_envp);
|
||||
_call_init_routines_;
|
||||
|
||||
PascalMain;
|
||||
end;
|
||||
|
||||
procedure _FPC_proc_halt(_ExitCode: longint); cdecl; public name '_haltproc';
|
||||
begin
|
||||
{ call C exit code }
|
||||
__exit(_ExitCode);
|
||||
end;
|
||||
|
||||
|
||||
end.
|
59
rtl/haiku/si_dllc.pp
Normal file
59
rtl/haiku/si_dllc.pp
Normal file
@ -0,0 +1,59 @@
|
||||
{
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 2019 by the Free Pascal development team
|
||||
|
||||
System Entry point for Haiku shared libraries,
|
||||
linked-against-libc version
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
unit si_dllc;
|
||||
|
||||
interface
|
||||
|
||||
implementation
|
||||
|
||||
{ Bindings to RTL }
|
||||
var
|
||||
argc: longint; public name 'operatingsystem_parameter_argc';
|
||||
argv: pointer; public name 'operatingsystem_parameter_argv';
|
||||
envp: pointer; public name 'operatingsystem_parameter_envp';
|
||||
|
||||
|
||||
procedure PascalMain; external name 'PASCALMAIN';
|
||||
|
||||
{ Bindings to libroot/libc }
|
||||
const
|
||||
libc = 'root';
|
||||
|
||||
var
|
||||
__libc_argc: longint; external libc name '__libc_argc';
|
||||
__libc_argv: pointer; external libc name '__libc_argv';
|
||||
environ: pointer; external libc name 'environ';
|
||||
|
||||
procedure __exit(status: longint); cdecl; external libc name 'exit';
|
||||
|
||||
procedure _FPC_shared_lib_start; cdecl; public name 'initialize_after';
|
||||
begin
|
||||
argc:=__libc_argc;
|
||||
argv:=__libc_argv;
|
||||
envp:=environ;
|
||||
|
||||
PascalMain;
|
||||
end;
|
||||
|
||||
procedure _FPC_shared_lib_halt(_ExitCode: longint); cdecl; public name '_haltproc';
|
||||
begin
|
||||
{ call C exit code }
|
||||
__exit(_ExitCode);
|
||||
end;
|
||||
|
||||
|
||||
end.
|
Loading…
Reference in New Issue
Block a user