fpc/rtl/dragonfly/x86_64/si_c.inc
marco 2a57956032 * dfly rtl dir from mantis #27091
git-svn-id: trunk@29214 -
2014-12-07 20:35:05 +00:00

93 lines
2.1 KiB
PHP

Type
TCleanup = procedure; cdecl;
var
environ : ppchar; cvar; public name '__environ';
progname: pchar = #0#0; cvar; public name '__progname';
dynamic : pchar; external name '_DYNAMIC'; // #pragma weak
procedure atexit(prc:TCleanup); cdecl external name 'atexit';
procedure cleanup(prc:TCleanup); cdecl external name 'cleanup';
procedure init_tls; cdecl; external name 'init_tls';
procedure fini; cdecl; external name '_fini';
procedure init; cdecl; external name '_init';
procedure libc_exit(exitcode:longint);cdecl; external name 'exit';
function main(nrarg:longint;pp:ppchar;env:ppchar):longint; cdecl; external name 'main';
{$ifdef gcrt}
procedure cmcleanup; cdecl; external name '_mcleanup';
procedure monstratup(p,p2:pointer); cdecl; external name 'monstartup';
var
eprol:longint; external name 'eprol';
etext:longint; external name 'etext';
{$endif}
procedure start(ap:ppchar;cleanup:TCleanup);
var argc: longint;
argv: ppchar;
env : ppchar;
s : pchar;
begin
argc:=plongint(ap)^;
argv:=ppchar(ap[1]);
env:= ppchar(ap[2+argc]);
environ:=env;
if (argc>0) and (argv[0]<>#0) Then
begin
progname:=argv[0];
s:=progname;
while s^<>#0 do
begin
if s^='/' then
progname:=@s[1];
inc(s);
end;
end;
if assigned(pchar(@dynamic)) then // I suspect this is a trick to find
// out runtime if we are shared
// linking, so the same code can be used
// for static and shared linking
atexit(cleanup)
else
init_tls;
{$ifdef GCRT}
atexit(@_mcleanup);
{$endif}
atexit(@fini);
{$ifdef GCRT}
monstartup(@eprol,@etext);
{$endif}
init;
{$ifdef GCRT}
asm
eprol:
end;
{$endif}
libc_exit(main(argc,argv,env)); // doesn't return
asm
{ We need this stuff to make gdb behave itself, otherwise
gdb will chokes with SIGILL when trying to debug apps.
}
.section ".note.ABI-tag", "a"
.align 4
.long 10
.long 4
.long 1
.asciz "DragonFly"
.align 4
.long 400000
.align 4
.section .note.GNU-stack,"",@progbits
end;
end;
begin
end.