123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- ENTRY(sys_clone_wrapper)
- SAVE_CALLEE_SAVED_USER
- bl @sys_clone
- DISCARD_CALLEE_SAVED_USER
- GET_CURR_THR_INFO_FLAGS r10
- btst r10, TIF_SYSCALL_TRACE
- bnz tracesys_exit
- b .Lret_from_system_call
- END(sys_clone_wrapper)
- ENTRY(ret_from_fork)
-
-
-
- jl @schedule_tail
- ld r9, [sp, PT_status32]
- brne r9, 0, 1f
- jl.d [r14]
- mov r0, r13
- 1:
-
-
-
-
-
-
-
- b ret_from_exception
- END(ret_from_fork)
- ENTRY(instr_service)
- EXCEPTION_PROLOGUE
- lr r0, [efa]
- mov r1, sp
- FAKE_RET_FROM_EXCPN
- bl do_insterror_or_kprobe
- b ret_from_exception
- END(instr_service)
- ENTRY(EV_MachineCheck)
- EXCEPTION_PROLOGUE
- lr r2, [ecr]
- lr r0, [efa]
- mov r1, sp
-
-
- lr r3, [ARC_REG_PID]
- or r3, r3, MMU_ENABLE
- sr r3, [ARC_REG_PID]
- lsr r3, r2, 8
- bmsk r3, r3, 7
- brne r3, ECR_C_MCHK_DUP_TLB, 1f
- bl do_tlb_overlap_fault
- b ret_from_exception
- 1:
-
- SAVE_CALLEE_SAVED_USER
- GET_CURR_TASK_FIELD_PTR TASK_THREAD, r10
- st sp, [r10, THREAD_CALLEE_REG]
- j do_machine_check_fault
- END(EV_MachineCheck)
- ENTRY(EV_PrivilegeV)
- EXCEPTION_PROLOGUE
- lr r0, [efa]
- mov r1, sp
- FAKE_RET_FROM_EXCPN
- bl do_privilege_fault
- b ret_from_exception
- END(EV_PrivilegeV)
- ENTRY(EV_Extension)
- EXCEPTION_PROLOGUE
- lr r0, [efa]
- mov r1, sp
- FAKE_RET_FROM_EXCPN
- bl do_extension_fault
- b ret_from_exception
- END(EV_Extension)
- tracesys:
-
-
- lr r12, [efa]
- GET_CURR_TASK_FIELD_PTR TASK_THREAD, r11
- st r12, [r11, THREAD_FAULT_ADDR]
-
- mov r0, sp
- bl @syscall_trace_entry
-
- mov r8, r0
-
-
- cmp r8, NR_syscalls
- mov.hi r0, -ENOSYS
- bhi tracesys_exit
-
-
-
- ld r0, [sp, PT_r0]
- ld r1, [sp, PT_r1]
- ld r2, [sp, PT_r2]
- ld r3, [sp, PT_r3]
- ld r4, [sp, PT_r4]
- ld r5, [sp, PT_r5]
- ld r6, [sp, PT_r6]
- ld r7, [sp, PT_r7]
- ld.as r9, [sys_call_table, r8]
- jl [r9]
- tracesys_exit:
- st r0, [sp, PT_r0]
-
- bl @syscall_trace_exit
- b ret_from_exception
-
- trap_with_param:
-
- lr r0, [efa]
- mov r1, sp
-
-
- FAKE_RET_FROM_EXCPN
-
-
-
- SAVE_CALLEE_SAVED_USER
-
- GET_CURR_TASK_FIELD_PTR TASK_THREAD, r10
- st sp, [r10, THREAD_CALLEE_REG]
-
- bl do_non_swi_trap
-
- DISCARD_CALLEE_SAVED_USER
- b ret_from_exception
- ENTRY(EV_Trap)
- EXCEPTION_PROLOGUE
-
-
- bmsk.f 0, r9, 7
- bnz trap_with_param
-
-
- FAKE_RET_FROM_EXCPN
-
- GET_CURR_THR_INFO_FLAGS r10
- btst r10, TIF_SYSCALL_TRACE
- bnz tracesys
-
-
- cmp r8, NR_syscalls
- mov.hi r0, -ENOSYS
- bhi .Lret_from_system_call
-
- ld.as r9,[sys_call_table, r8]
- jl [r9]
- .Lret_from_system_call:
- st r0, [sp, PT_r0]
-
- END(EV_Trap)
- ;
- ENTRY(ret_from_exception)
-
- ld r8, [sp, PT_status32]
- bbit0 r8, STATUS_U_BIT, resume_kernel_mode
-
-
- resume_user_mode_begin:
-
-
-
- IRQ_DISABLE r10
-
- GET_CURR_THR_INFO_FLAGS r9
- and.f 0, r9, _TIF_WORK_MASK
- bz .Lrestore_regs
-
- bbit0 r9, TIF_NEED_RESCHED, .Lchk_pend_signals
- mov blink, resume_user_mode_begin
- j @schedule
- .Lchk_pend_signals:
- IRQ_ENABLE r10
-
- mov r0, sp
- GET_CURR_THR_INFO_FLAGS r9
- bbit0 r9, TIF_SIGPENDING, .Lchk_notify_resume
-
-
-
- ;
-
-
-
-
- ;
-
- SAVE_CALLEE_SAVED_USER
-
- GET_CURR_TASK_FIELD_PTR TASK_THREAD, r10
- st sp, [r10, THREAD_CALLEE_REG]
- bl @do_signal
-
-
- RESTORE_CALLEE_SAVED_USER
- b resume_user_mode_begin
-
- .Lchk_notify_resume:
- btst r9, TIF_NOTIFY_RESUME
- blnz @do_notify_resume
- b resume_user_mode_begin
-
- resume_kernel_mode:
-
-
-
- IRQ_DISABLE r9
-
- GET_CURR_THR_INFO_FROM_SP r10
- ld r8, [r10, THREAD_INFO_PREEMPT_COUNT]
- brne r8, 0, .Lrestore_regs
-
- ld r9, [r10, THREAD_INFO_FLAGS]
- bbit0 r9, TIF_NEED_RESCHED, .Lrestore_regs
-
- jl preempt_schedule_irq
-
- b .Lrestore_regs
|