1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- {
- This file is part of the Free Pascal run time library.
- Copyright (c) 2017-2018 by Jonas Maebe,
- member of the Free Pascal development team
- This file contains support for Itanium psABI EH
- 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.
- **********************************************************************}
- {$packrecords c}
- const
- FPC_URC_NO_REASON = FPC_Unwind_Reason_Code(0);
- FPC_URC_OK = FPC_URC_NO_REASON;
- FPC_URC_FOREIGN_EXCEPTION_CAUGHT = FPC_Unwind_Reason_Code(1);
- {$ifndef __ARM_EABI_UNWINDER__}
- FPC_URC_FATAL_PHASE2_ERROR = FPC_Unwind_Reason_Code(2);
- FPC_URC_FATAL_PHASE1_ERROR = FPC_Unwind_Reason_Code(3);
- FPC_URC_NORMAL_STOP = FPC_Unwind_Reason_Code(4);
- FPC_URC_END_OF_STACK = FPC_Unwind_Reason_Code(5);
- {$endif not __ARM_EABI_UNWINDER__}
- FPC_URC_HANDLER_FOUND = FPC_Unwind_Reason_Code(6);
- FPC_URC_INSTALL_CONTEXT = FPC_Unwind_Reason_Code(7);
- FPC_URC_CONTINUE_UNWIND = FPC_Unwind_Reason_Code(8);
- {$ifdef __ARM_EABI_UNWINDER__}
- FPC_URC_FAILURE = FPC_Unwind_Reason_Code(9);
- {$endif __ARM_EABI_UNWINDER__}
- {$ifdef __ARM_EABI_UNWINDER__}
- const
- FPC_US_VIRTUAL_UNWIND_FRAME = FPC_Unwind_State(0);
- FPC_US_UNWIND_FRAME_STARTING = FPC_Unwind_State(1);
- FPC_US_UNWIND_FRAME_RESUME = FPC_Unwind_State(2);
- FPC_US_FORCE_UNWIND = FPC_Unwind_State(8);
- FPC_US_ACTION_MASK = FPC_Unwind_State(3);
- {$endif}
- const
- FPC_UA_SEARCH_PHASE = FPC_Unwind_Action(1);
- FPC_UA_CLEANUP_PHASE = FPC_Unwind_Action(2);
- FPC_UA_HANDLER_FRAME = FPC_Unwind_Action(4);
- FPC_UA_FORCE_UNWIND = FPC_Unwind_Action(8);
- FPC_UA_END_OF_STACK = FPC_Unwind_Action(16);
- type
- PFPC_Unwind_Context = ^FPC_Unwind_Context;
- FPC_Unwind_Context = record
- end;
- function _Unwind_RaiseException(exception_object: PFPC_Unwind_Exception): FPC_Unwind_Reason_Code; cdecl; external;
- procedure _Unwind_Resume(exception_object: PFPC_Unwind_Exception); compilerproc; cdecl; external;
- type
- TFPC_psabieh_exceptionClass = record
- case byte of
- 0: (u: qword); {cuint64}
- 1: (a: array[0..7] of AnsiChar);
- end;
- {$push}
- {$j-}
- const
- FPC_psabieh_exceptionClass_ID: TFPC_psabieh_exceptionClass =
- (a: 'FPC1PAS'#0);
- {$pop}
- {$ifdef __ARM_EABI_UNWINDER__}
- function _FPC_psabieh_personality_v0(state: FPC_Unwind_State; libunwind_exception: PFPC_Unwind_Exception; context: PFPC_Unwind_Context): FPC_Unwind_Reason_Code; cdecl; public;
- {$else}
- function _FPC_psabieh_personality_v0(version: longint; actions: FPC_Unwind_Action; exceptionClass: qword; libunwind_exception: PFPC_Unwind_Exception; context: PFPC_Unwind_Context): FPC_Unwind_Reason_Code; cdecl; public;
- {$endif}
- function FPC_psabi_begin_catch(exc:PFPC_Unwind_Exception): pointer; compilerproc;
- procedure FPC_psabi_end_catch; cdecl; compilerproc;
- { llvm cannot create a catch/cleanup block if there is no call inside the
- try block to a routine that can raise an exception. Hence, we will call
- a dummy routine that llvm cannot analyse for such try blocks }
- procedure FPC_DummyPotentialRaise;
- {$packrecords default}
|