+;;; Handle some signals
+
+ WORD p_setup_signals,'[p_setup_signals]',dovariable
+ ;; Set up signal handling;
+ mov rdi,11
+ mov rsi,sigaction_data
+ mov rdx,0
+ sigsetsize = sigset.end - sigset.start
+ mov r10,sigsetsize
+ mov rax,13
+ syscall
+ ret
+
+signal_handler_SEGV_message:
+ STRING 10,'*** signal SEGV - restarting ***',10
+
+signal_handler_SEGV:
+ mov rdi,2
+ mov rsi,signal_handler_SEGV_message + 8
+ mov rdx,qword [signal_handler_SEGV_message]
+ mov rax,1
+ syscall
+ jmp p_quit_DFA
+
+signal_handler_SEGV_restorer:
+ mov rax,15
+ syscall
+
+sigaction_data:
+ dq signal_handler_SEGV ; void (*sa_handler)(int);
+ ;dq 0 ; void (*sa_sigaction)(int, siginfo_t *, void *);
+ dq 0x44000000 ; unsigned long sa_flags
+ dq 0 ;signal_handler_SEGV_restorer ; void (*sa_restorer)(void);
+sigset.start: ; sigset_t sa_mask;
+ rept 8 x {
+ db 0
+ }
+sigset.end:
+