1
0
mirror of https://github.com/cc65/cc65.git synced 2024-10-31 20:06:11 +00:00
cc65/libsrc/common/raise.s
cuz 722581ecee Reset signal handler to SIG_DFL on a call to raise()
git-svn-id: svn://svn.cc65.org/cc65/trunk@2018 b7a2c559-68d2-44c3-8de9-860c34a00d81
2003-03-14 00:08:35 +00:00

55 lines
1.2 KiB
ArmAsm

;
; Ullrich von Bassewitz, 2003-03-14
;
; int __fastcall__ raise (int sig);
;
.import jmpvec
.include "signal.inc"
;----------------------------------------------------------------------------
; int __fastcall__ raise (int sig);
_raise:
cpx #0
bne invalidsig
cmp #SIGCOUNT
bcs invalidsig
; Save the signal number low byte, then setup the function vector
pha
asl a
tax
lda sigtable,x
sta jmpvec+1
lda sigtable+1,x
sta jmpvec+2
; Reset the signal handler to SIG_DFL (I don't like this because it may
; introduce race conditions, but it's the simplest way to satisfy the
; standard).
lda #<__sig_dfl
sta sigtable,x
lda #>__sig_dfl
sta sigtable+1,x
; Restore the signal number and call the function
pla ; Low byte
ldx #0 ; High byte
jsr jmpvec ; Call signal function
; raise() returns zero on success and any other value on failure
lda #0
tax
invalidsig:
rts