1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- {$define CRT_IRELOC_RELA}
- procedure init_tls; cdecl; external name 'init_tls';
- function cmain(nrarg:longint;pp:PPAnsiChar;env:PPAnsiChar):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}
- {$i ignore_init.inc}
- procedure start(ap:PPAnsiChar;cleanup:TCleanupProc);
- var argc: longint;
- argv: PPAnsiChar;
- env : PPAnsiChar;
- s : PAnsiChar;
- begin
- argc:=pptrint(ap)^;
- argv:=PPAnsiChar(ap[1]);
- env:= PPAnsiChar(ap[2+argc]);
- environ:=env;
- handle_argv(argc,argv,env);
- if assigned(PAnsiChar(@_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
- begin
- process_irelocs();
- init_tls;
- end;
- {$ifdef GCRT}
- atexit(@cmcleanup);
- {$endif}
- atexit(@_fini);
- {$ifdef GCRT}
- monstartup(@eprol,@etext);
- asm
- eprol:
- end;
- {$endif}
- handle_static_init(argc, argv, env);
- libc_exit(cmain(argc,argv,env)); // doesn't return
- end;
- begin
- end.
|