mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-05 13:18:25 +02:00
71 lines
1.6 KiB
ObjectPascal
71 lines
1.6 KiB
ObjectPascal
{
|
|
This file is part of the Free Pascal run time library.
|
|
Copyright (c) 2021 by Free Pascal development team
|
|
|
|
This file implements the startup code for WebAssembly programs that
|
|
don't link to the C library.
|
|
|
|
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_prc;
|
|
|
|
{$if defined(FPC_WASM_BRANCHFUL_EXCEPTIONS) or defined(FPC_WASM_NATIVE_EXCEPTIONS)}
|
|
{$MODESWITCH EXCEPTIONS}
|
|
{$endif}
|
|
|
|
interface
|
|
|
|
procedure _start;
|
|
|
|
implementation
|
|
|
|
procedure PASCALMAIN; external 'PASCALMAIN';
|
|
|
|
{$if defined(FPC_WASM_BRANCHFUL_EXCEPTIONS) or defined(FPC_WASM_NATIVE_EXCEPTIONS)}
|
|
Procedure DoUnHandledException; external name 'FPC_DOUNHANDLEDEXCEPTION';
|
|
|
|
procedure _start_pascal;
|
|
begin
|
|
try
|
|
PASCALMAIN;
|
|
except
|
|
DoUnhandledException;
|
|
end;
|
|
end;
|
|
{$else}
|
|
procedure _start_pascal;
|
|
begin
|
|
PASCALMAIN;
|
|
end;
|
|
{$endif}
|
|
|
|
procedure SetInitialHeapBlockStart(p: Pointer); external name 'FPC_WASM_SETINITIALHEAPBLOCKSTART';
|
|
|
|
{ TODO: remove this, when calling SetInitialHeapBlockStart works directly from within inline asm }
|
|
procedure SetInitialHeapBlockStart2(p: Pointer);
|
|
begin
|
|
SetInitialHeapBlockStart(p);
|
|
end;
|
|
|
|
procedure _start; assembler; nostackframe;
|
|
asm
|
|
global.get $__stack_pointer
|
|
call $SetInitialHeapBlockStart2
|
|
|
|
call $_start_pascal
|
|
end;
|
|
|
|
exports
|
|
_start,
|
|
_start name '_start_promising' promising;
|
|
|
|
end.
|