movl $(__USER_DS), %edx; \
movl %edx, %ds; \
movl %edx, %es; \
- movl $11,%eax; \
+ pushl $11; \
call do_exit; \
.previous; \
.section __ex_table,"a";\
.previous
+
+ENTRY(lcall7)
+ pushfl # We get a different stack layout with call
+ # gates, which has to be cleaned up later..
+ pushl %eax
+ SAVE_ALL
+ movl %esp, %ebp
+ pushl %ebp
+ pushl $0x7
+do_lcall:
+ movl EIP(%ebp), %eax # due to call gates, this is eflags, not eip..
+ movl CS(%ebp), %edx # this is eip..
+ movl EFLAGS(%ebp), %ecx # and this is cs..
+ movl %eax,EFLAGS(%ebp) #
+ movl %edx,EIP(%ebp) # Now we move them to their "normal" places
+ movl %ecx,CS(%ebp) #
+ GET_THREAD_INFO_WITH_ESP(%ebp) # GET_THREAD_INFO
+ movl TI_exec_domain(%ebp), %edx # Get the execution domain
+ call *EXEC_DOMAIN_handler(%edx) # Call the handler for the domain
+ addl $4, %esp
+ popl %eax
+ jmp resume_userspace
+
+ENTRY(lcall27)
+ pushfl # We get a different stack layout with call
+ # gates, which has to be cleaned up later..
+ pushl %eax
+ SAVE_ALL
+ movl %esp, %ebp
+ pushl %ebp
+ pushl $0x27
+ jmp do_lcall
+
+
ENTRY(ret_from_fork)
pushl %eax
call schedule_tail
movl $PREEMPT_ACTIVE,TI_preempt_count(%ebp)
sti
call schedule
- cli
movl $0,TI_preempt_count(%ebp)
+ cli
jmp need_resched
#endif
ALIGN
work_notifysig_v86:
- pushl %ecx # save ti_flags for do_notify_resume
- call save_v86_state # %eax contains pt_regs pointer
+ pushl %ecx
+ call save_v86_state
popl %ecx
movl %eax, %esp
xorl %edx, %edx
ALIGN
common_interrupt:
SAVE_ALL
- movl %esp,%eax
call do_IRQ
jmp ret_from_intr
ENTRY(name) \
pushl $nr-256; \
SAVE_ALL \
- movl %esp,%eax; \
- call smp_/**/name; \
+ call smp_/**/name; \
jmp ret_from_intr;
/* The include is where all of the SMP etc. interrupts come from */
pushl %ebx
cld
movl %es, %ecx
+ movl ORIG_EAX(%esp), %esi # get the error code
movl ES(%esp), %edi # get the function address
- movl ORIG_EAX(%esp), %edx # get the error code
movl %eax, ORIG_EAX(%esp)
movl %ecx, ES(%esp)
- movl $(__USER_DS), %ecx
- movl %ecx, %ds
- movl %ecx, %es
- movl %esp,%eax # pt_regs pointer
+ movl %esp, %edx
+ pushl %esi # push the error code
+ pushl %edx # push the pt_regs pointer
+ movl $(__USER_DS), %edx
+ movl %edx, %ds
+ movl %edx, %es
call *%edi
+ addl $8, %esp
jmp ret_from_exception
ENTRY(coprocessor_error)
debug_stack_correct:
pushl $-1 # mark this as an int
SAVE_ALL
- xorl %edx,%edx # error code 0
- movl %esp,%eax # pt_regs pointer
+ movl %esp,%edx
+ pushl $0
+ pushl %edx
call do_debug
+ addl $8,%esp
testl %eax,%eax
jnz restore_all
jmp ret_from_exception
nmi_stack_correct:
pushl %eax
SAVE_ALL
- xorl %edx,%edx # zero error code
- movl %esp,%eax # pt_regs pointer
+ movl %esp, %edx
+ pushl $0
+ pushl %edx
call do_nmi
+ addl $8, %esp
RESTORE_ALL
nmi_stack_fixup:
ENTRY(int3)
pushl $-1 # mark this as an int
SAVE_ALL
- xorl %edx,%edx # zero error code
- movl %esp,%eax # pt_regs pointer
+ movl %esp,%edx
+ pushl $0
+ pushl %edx
call do_int3
+ addl $8,%esp
testl %eax,%eax
jnz restore_all
jmp ret_from_exception
.long sys_mq_getsetattr
.long sys_kexec_load
.long sys_waitid
- .long sys_ni_syscall /* 285 */ /* available */
- .long sys_add_key
- .long sys_request_key
- .long sys_keyctl
+#ifdef USE_IOPRIO_SYSCALLS
+ .long sys_ioprio_set /* 285 */
+ .long sys_ioprio_get
+#endif
syscall_table_size=(.-sys_call_table)