1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 #include <linux/threads.h>
  10 
  11 #include <asm/asmmacro.h>
  12 #include <asm/processor.h>
  13 #include <asm/ptrace.h>
  14 
  15 GLOBAL_ENTRY(mca_handler_bhhook)
  16         invala                          
  17         cover
  18         ;;
  19         clrrrb
  20         ;;                                              
  21         alloc   r16=ar.pfs,0,2,3,0      
  22         mov     ar.rsc=0
  23         mov     r13=IA64_KR(CURRENT)    
  24         ;;
  25         mov     r2=r13
  26         ;;
  27         addl    r22=IA64_RBS_OFFSET,r2
  28         ;;
  29         mov     ar.bspstore=r22
  30         addl    sp=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2
  31         ;;
  32         adds    r2=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
  33         ;;
  34         st1     [r2]=r0         
  35         mov     loc0=r16
  36         movl    loc1=mca_handler_bh     
  37         ;;
  38         mov     out0=r8                 
  39         mov     out1=r9                 
  40         mov     out2=r10                
  41         mov     b6=loc1
  42         ;;
  43         mov     loc1=rp
  44         ssm     psr.ic
  45         ;;
  46         srlz.i
  47         ;;
  48         ssm     psr.i
  49         br.call.sptk.many rp=b6         
  50         ;;
  51         mov     ar.pfs=loc0
  52         mov     rp=loc1
  53         ;;
  54         mov     r8=r0
  55         br.ret.sptk.many rp
  56 END(mca_handler_bhhook)