Add sigaction registering
This commit is contained in:
parent
540c840d87
commit
868ddc81f1
1 changed files with 55 additions and 3 deletions
58
wtfstopw.asm
58
wtfstopw.asm
|
@ -37,6 +37,25 @@ section .data
|
|||
%define %1.tv_nsec %1+TIMESPEC_STRUC.tv_nsec
|
||||
%endmacro
|
||||
|
||||
STRUC SIGACTION_STRUC
|
||||
.sa_handler: resq 1
|
||||
.sa_flags: resq 1
|
||||
.sa_restorer: resq 1
|
||||
.sa_mask: resb 128
|
||||
ENDSTRUC
|
||||
|
||||
|
||||
sigaction: ISTRUC SIGACTION_STRUC
|
||||
at SIGACTION_STRUC.sa_handler, dq 0
|
||||
at SIGACTION_STRUC.sa_flags, dq 0
|
||||
at SIGACTION_STRUC.sa_restorer, dq 0
|
||||
at SIGACTION_STRUC.sa_mask, times 128 db 0
|
||||
IEND
|
||||
%define sigaction.sa_handler sigaction+SIGACTION_STRUC.sa_handler
|
||||
%define sigaction.sa_flags sigaction+SIGACTION_STRUC.sa_flags
|
||||
%define sigaction.sa_restorer sigaction+SIGACTION_STRUC.sa_restorer
|
||||
%define sigaction.sa_mask sigaction+SIGACTION_STRUC.sa_mask
|
||||
|
||||
TIMESPEC ts_start
|
||||
TIMESPEC ts_cur
|
||||
|
||||
|
@ -44,7 +63,6 @@ section .data
|
|||
tv_sleep_s dd 0,0
|
||||
tv_sleep_us dd 10000000,0
|
||||
|
||||
|
||||
;; 1/2s sleep
|
||||
;ts_sleep:
|
||||
; tv_sleep_s dq 0
|
||||
|
@ -64,11 +82,10 @@ section .data
|
|||
nl: db 0x0A
|
||||
buf: db 0
|
||||
|
||||
|
||||
dbgmsg: db "SigINT", 0xa
|
||||
|
||||
section .text
|
||||
global _start
|
||||
|
||||
_start:
|
||||
|
||||
; set stdin non blocking
|
||||
|
@ -86,6 +103,24 @@ syscall
|
|||
cmp rax, 0
|
||||
jne fault
|
||||
|
||||
; preparing SIGINT catch
|
||||
mov rax, lap_handler
|
||||
mov qword [sigaction.sa_handler], rax
|
||||
mov eax, 0x10000000 ; SA_RESTART
|
||||
or eax, 0x04000000 ; SA_RESTORER
|
||||
mov dword [sigaction.sa_flags], eax
|
||||
mov rax, sig_restorer
|
||||
mov qword [sigaction.sa_restorer], rax
|
||||
|
||||
mov rax, 13 ; sys_rt_sigaction
|
||||
mov rdi, 2 ; SIGINT
|
||||
mov rsi, sigaction
|
||||
mov rdx, 0 ; NULL
|
||||
mov r10, 8 ; sig_size
|
||||
syscall
|
||||
cmp rax, 0
|
||||
jne fault
|
||||
|
||||
mov rax, 228 ; clock_gettime
|
||||
mov rdi, 0 ; CLOCK_REALTIME
|
||||
mov rsi, ts_start
|
||||
|
@ -257,4 +292,21 @@ newline_exit:
|
|||
syscall
|
||||
jmp exit
|
||||
|
||||
lap_handler:
|
||||
pop r8
|
||||
|
||||
mov rax, 1
|
||||
mov rdi, 1
|
||||
mov rsi, dbgmsg
|
||||
mov rdx, 7
|
||||
syscall
|
||||
|
||||
push r8 ; push back ret addr
|
||||
ret
|
||||
|
||||
sig_restorer:
|
||||
mov rax, 15 ; sys_rt_sigreturn
|
||||
xor rdi, rdi
|
||||
syscall
|
||||
|
||||
.end:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue