home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / unixlib36d / src / sys / s / _signal < prev    next >
Text File  |  1994-02-26  |  7KB  |  238 lines

  1. ;       /* _signal.s (c) Copyright 1990 H.Rogers */
  2.  
  3.         GET     @.src.sys.s.asm_dec
  4.  
  5.         AREA    |C$$code|,CODE,READONLY
  6.  
  7.         IMPORT  |__raise|
  8.  
  9.         EXPORT  raise
  10.         NAME    raise
  11. raise
  12.         CMP     a1,#0
  13.         MOVEQS  pc,lr
  14.         STMFD   sp,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,lr,pc}
  15.         SUB     sp,sp,#64
  16.         SUB     ip,pc,#4
  17.         MOV     a4,lr
  18.         ADD     a3,sp,#64
  19.         ORR     a2,fp,#&80000000        ; for __backtrace()
  20.         STMFD   sp!,{a2,a3,a4,ip}       ; create signal frame
  21.         ADD     fp,sp,#12
  22.         MOV     v1,sp
  23.         BL      |__raise|
  24.         ADD     sp,v1,#16               ; skip signal frame
  25.         LDMFD   sp,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,pc}^
  26.  
  27.         IMPORT  |__backtrace|
  28.  
  29.         EXPORT  |__core|
  30.         NAME    __core
  31. |__core|
  32.         MOV     a1,fp
  33.         B       |__backtrace|
  34.  
  35.  
  36.         AREA    |C$$wrcode|,CODE
  37.  
  38.         EXPORT  |__h_sigill|
  39.         NAME    __h_sigill
  40. |__h_sigill|
  41.         STR     lr,[pc,#|__cbreg|-.-8+60]
  42.         ADR     lr,|__cbreg|
  43.         STMIA   lr,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,lr}^
  44.         MOV     a1,#4                   ; SIGILL = 4
  45.         STR     a1,[pc,#|__cba1|-.-8]
  46.         B       |__h_cback|
  47.  
  48.         EXPORT  |__h_sigbus|
  49.         NAME    __h_sigbus
  50. |__h_sigbus|
  51.         SUB     lr,lr,#4
  52.         STR     lr,[pc,#|__cbreg|-.-8+60]
  53.         ADR     lr,|__cbreg|
  54.         STMIA   lr,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,lr}^
  55.         MOV     a1,#10                  ; SIGBUS = 10
  56.         STR     a1,[pc,#|__cba1|-.-8]
  57.         B       |__h_cback|
  58.  
  59.         EXPORT  |__h_sigsegv0|
  60.         NAME    __h_sigsegv0
  61. |__h_sigsegv0|
  62.         SUB     lr,lr,#4
  63.         STR     lr,[pc,#|__cbreg|-.-8+60]
  64.         ADR     lr,|__cbreg|
  65.         STMIA   lr,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,lr}^
  66.         MOV     a1,#11                  ; SIGSEGV = 11
  67.         STR     a1,[pc,#|__cba1|-.-8]
  68.         B       |__h_cback|
  69.  
  70.         EXPORT  |__h_sigsegv1|  ; FIXME need to undo any writebacked LDM/STMs
  71.         NAME    __h_sigsegv1
  72. |__h_sigsegv1|
  73.         SUB     lr,lr,#8
  74.         STR     lr,[pc,#|__cbreg|-.-8+60]
  75.         ADR     lr,|__cbreg|
  76.         STMIA   lr,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,lr}^
  77.         MOV     a1,#11                  ; SIGSEGV = 11
  78.         STR     a1,[pc,#|__cba1|-.-8]
  79.         B       |__h_cback|
  80.  
  81.         EXPORT  |__h_errbuf|
  82. |__h_errbuf|
  83.         DCD     0
  84.         EXPORT  |__h_error|
  85.         NAME    __h_error
  86. |__h_error|
  87.         ADR     lr,|__cbreg|
  88.         STMIA   lr,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,lr}^
  89.  
  90.         LDR     a3,[pc,#|__h_errbuf|-.-8]
  91.  
  92.         LDR     a1,[pc,#errno_ptr-.-8]
  93.         MOV     a2,#36                  ; EOS = 36
  94.         STR     a2,[a1,#0]
  95.         LDR     a1,[pc,#sys_errlist_ptr-.-8]
  96.         ADD     a2,a3,#8
  97.         STR     a2,[a1,#144]            ; (EOS<<2) = 144
  98.  
  99.         LDR     a2,[a3,#0]
  100.         STR     a2,[pc,#|__cbreg|-.-8+60]
  101.         MOV     a2,#2
  102.         STR     a2,[pc,#|__cbflg|-.-8]  ; set __cbflg bit 1
  103.         LDR     a2,[a3,#4]
  104.         TST     a2,#&80000000
  105.         BNE     |__h_emt|
  106.         MOV     a1,#20                  ; SIGERR = 20
  107.         STR     a1,[pc,#|__cba1|-.-8]
  108.         B       |__h_cback|
  109. |__h_emt|
  110.         BIC     a2,a2,#&80000000
  111.         MOV     a2,a2,LSR #8
  112.         CMP     a2,#&0002
  113.         MOVEQ   a1,#8                   ; SIGFPE = 8
  114.         MOVNE   a1,#7                   ; SIGEMT = 7
  115.         STR     a1,[pc,#|__cba1|-.-8]
  116.         B       |__h_cback|
  117.         IMPORT  |__errno|
  118. errno_ptr
  119.         DCD     |__errno|
  120.         IMPORT  sys_errlist
  121. sys_errlist_ptr
  122.         DCD     sys_errlist
  123.  
  124.         EXPORT  |__h_sigint|
  125.         NAME    __h_sigint
  126. |__h_sigint|
  127.         TST     fp,#64                  ; Escape condition?
  128.         MOVEQS  pc,lr
  129.         MOV     ip,#2                   ; SIGINT = 2
  130.         STR     ip,[pc,#|__cba1|-.-8]
  131.         MOV     ip,#1                   ; set CallBack
  132.         STR     ip,[pc,#|__cbflg|-.-8]  ; set __cbflg bit 0
  133.         MOVS    pc,lr
  134.  
  135.         EXPORT  |__h_event|
  136.         NAME    __h_event
  137. |__h_event|
  138.         MOVS    pc,lr
  139.  
  140.         EXPORT  |__h_sigsys|
  141.         NAME    __h_sigsys
  142. |__h_sigsys|
  143.         ADR     ip,|__cbreg|
  144.         STMIA   ip,{lr}
  145.         MOV     ip,#12                  ; SIGSYS = 12
  146.         STR     ip,[pc,#|__cba1|-.-8]
  147.         ORR     ip,pc,#3                ; SVC mode
  148.         TEQP    ip,#0
  149.         MOVNV   ip,ip
  150.         STMFD   sp!,{lr}
  151.         SWI     &2001b                  ; OS_SetCallBack
  152.         LDMFD   sp!,{lr}
  153.         ADR     ip,|__cbreg|
  154.         LDMIA   ip,{pc}^
  155.  
  156.         EXPORT  |__h_sigalrm|
  157.         NAME    __h_sigalrm
  158. |__h_sigalrm|
  159.         ADR     ip,|__cbreg|
  160.         STMIA   ip,{lr}
  161.         MOV     ip,#14                  ; SIGALRM = 14
  162.         STR     ip,[pc,#|__cba1|-.-8]
  163.         ORR     ip,pc,#3                ; SVC mode
  164.         TEQP    ip,#0
  165.         MOVNV   ip,ip
  166.         STMFD   sp!,{lr}
  167.         SWI     &2001b                  ; OS_SetCallBack
  168.         LDMFD   sp!,{lr}
  169.         ADR     ip,|__cbreg|
  170.         LDMIA   ip,{pc}^
  171.  
  172.         EXPORT  |__h_cback|
  173.         NAME    __h_cback
  174. |__h_cback|
  175.         ORR     lr,pc,#&0c000000        ; USR mode IntOff
  176.         MOVS    pc,lr
  177.         MOVNV   a1,a1
  178.         ADR     lr,|__cbreg|            ; load USR reg.s
  179.         LDMIA   lr,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,lr}
  180.         SUB     sp,sp,#4
  181.         STMFD   sp!,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,lr}
  182.  
  183.         LDR     a4,[pc,#|__cbreg|-.-8+60]
  184.         STR     a4,[sp,#60]             ; saved USR pc
  185.  
  186.         LDR     a1,[pc,#|__cbflg|-.-8]
  187.         ANDS    a1,a1,#2                ; check __cbflg bit 1
  188.         SUBNE   a4,a4,#4
  189.  
  190.         MOV     a3,lr                   ; saved USR lr
  191.         ADD     a2,sp,#64               ; saved USR sp
  192.         ORR     a1,fp,#&80000000        ; saved USR fp | 0x80000000
  193.         STMFD   sp!,{a1,a2,a3,a4}       ; create signal frame
  194.         ADD     fp,sp,#12
  195.         SWI     &20013                  ; OS_IntOn
  196.  
  197.         LDR     a1,[pc,#|__cbflg|-.-8]  ; check __cbflg bit 0
  198.         ANDS    a1,a1,#1
  199.         BEQ     |__h_cback_l1|
  200.  
  201.         MOV     a1,#&7c                 ; clear Escape condition
  202.         SWI     &20006
  203.  
  204. |__h_cback_l1|
  205.         MOV     a1,#0
  206.         STR     a1,[pc,#|__cbflg|-.-8]
  207.         LDR     a1,[pc,#|__cba1|-.-8]
  208.         MOV     v1,sp
  209.         BL      |__raise|
  210.         ADD     sp,v1,#16               ; skip signal frame
  211.         LDMFD   sp,{a1,a2,a3,a4,v1,v2,v3,v4,v5,v6,sl,fp,ip,sp,lr,pc}^
  212.  
  213.         EXPORT  |__cbreg|
  214. |__cbreg|
  215.         %       64
  216.  
  217.                 ; bit 0 Escape condition flag
  218.                 ; bit 1 no re-execute inst. flag
  219. |__cbflg|
  220.         DCD     0
  221.  
  222. |__cba1|
  223.         DCD     0
  224.  
  225.  
  226.         IMPORT  |_exit|
  227.  
  228.         EXPORT  |__h_exit|
  229.         NAME    __h_exit
  230. |__h_exit|
  231.         ORR     lr,pc,#&0c000000        ; USR mode IntOff
  232.         MOVS    pc,lr
  233.         MOVNV   a1,a1
  234.         MOV     a1,#0
  235.         B       |_exit|
  236.  
  237.         END
  238.