patch-2.3.43 linux/arch/ia64/ia32/ia32_entry.S
Next file: linux/arch/ia64/ia32/ia32_signal.c
Previous file: linux/arch/ia64/ia32/binfmt_elf32.c
Back to the patch index
Back to the overall index
- Lines: 256
- Date:
Sun Feb 6 18:42:40 2000
- Orig file:
v2.3.42/linux/arch/ia64/ia32/ia32_entry.S
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.3.42/linux/arch/ia64/ia32/ia32_entry.S linux/arch/ia64/ia32/ia32_entry.S
@@ -0,0 +1,255 @@
+#include <asm/offsets.h>
+#include <asm/signal.h>
+
+ .global ia32_ret_from_syscall
+ .proc ia64_ret_from_syscall
+ia32_ret_from_syscall:
+ cmp.ge p6,p7=r8,r0 // syscall executed successfully?
+ adds r2=IA64_PT_REGS_R8_OFFSET+16,sp // r2 = &pt_regs.r8
+ ;;
+ st8 [r2]=r8 // store return value in slot for r8
+ br.cond.sptk.few ia64_leave_kernel
+
+ //
+ // Invoke a system call, but do some tracing before and after the call.
+ // We MUST preserve the current register frame throughout this routine
+ // because some system calls (such as ia64_execve) directly
+ // manipulate ar.pfs.
+ //
+ // Input:
+ // r15 = syscall number
+ // b6 = syscall entry point
+ //
+ .global ia32_trace_syscall
+ .proc ia32_trace_syscall
+ia32_trace_syscall:
+ br.call.sptk.few rp=invoke_syscall_trace // give parent a chance to catch syscall args
+.Lret4: br.call.sptk.few rp=b6 // do the syscall
+.Lret5: cmp.lt p6,p0=r8,r0 // syscall failed?
+ adds r2=IA64_PT_REGS_R8_OFFSET+16,sp // r2 = &pt_regs.r8
+ ;;
+ st8.spill [r2]=r8 // store return value in slot for r8
+ br.call.sptk.few rp=invoke_syscall_trace // give parent a chance to catch return value
+.Lret6: br.cond.sptk.many ia64_leave_kernel // rp MUST be != ia64_leave_kernel!
+
+ .endp ia32_trace_syscall
+
+ .align 16
+ .global sys32_fork
+ .proc sys32_fork
+sys32_fork:
+ alloc r16=ar.pfs,2,2,3,0;;
+ movl r28=1f
+ mov loc1=rp
+ br.cond.sptk.many save_switch_stack
+1:
+ mov loc0=r16 // save ar.pfs across do_fork
+ adds out2=IA64_SWITCH_STACK_SIZE+16,sp
+ adds r2=IA64_SWITCH_STACK_SIZE+IA64_PT_REGS_R12_OFFSET+16,sp
+ mov out0=SIGCHLD // out0 = clone_flags
+ ;;
+ ld8 out1=[r2] // fetch usp from pt_regs.r12
+ br.call.sptk.few rp=do_fork
+.ret1:
+ mov ar.pfs=loc0
+ adds sp=IA64_SWITCH_STACK_SIZE,sp // pop the switch stack
+ mov rp=loc1
+ ;;
+ br.ret.sptk.many rp
+ .endp sys32_fork
+
+ .rodata
+ .align 8
+ .globl ia32_syscall_table
+ia32_syscall_table:
+ data8 sys_ni_syscall /* 0 - old "setup(" system call*/
+ data8 sys_exit
+ data8 sys32_fork
+ data8 sys_read
+ data8 sys_write
+ data8 sys_open /* 5 */
+ data8 sys_close
+ data8 sys32_waitpid
+ data8 sys_creat
+ data8 sys_link
+ data8 sys_unlink /* 10 */
+ data8 sys32_execve
+ data8 sys_chdir
+ data8 sys_ni_syscall /* sys_time is not supported on ia64 */
+ data8 sys_mknod
+ data8 sys_chmod /* 15 */
+ data8 sys_lchown
+ data8 sys_ni_syscall /* old break syscall holder */
+ data8 sys_ni_syscall
+ data8 sys_lseek
+ data8 sys_getpid /* 20 */
+ data8 sys_mount
+ data8 sys_oldumount
+ data8 sys_setuid
+ data8 sys_getuid
+ data8 sys_ni_syscall /* sys_stime is not supported on IA64 */ /* 25 */
+ data8 sys_ptrace
+ data8 sys32_alarm
+ data8 sys_ni_syscall
+ data8 sys_ni_syscall
+ data8 sys_ni_syscall /* 30 */
+ data8 sys_ni_syscall /* old stty syscall holder */
+ data8 sys_ni_syscall /* old gtty syscall holder */
+ data8 sys_access
+ data8 sys_nice
+ data8 sys_ni_syscall /* 35 */ /* old ftime syscall holder */
+ data8 sys_sync
+ data8 sys_kill
+ data8 sys_rename
+ data8 sys_mkdir
+ data8 sys_rmdir /* 40 */
+ data8 sys_dup
+ data8 sys32_pipe
+ data8 sys_times
+ data8 sys_ni_syscall /* old prof syscall holder */
+ data8 sys_brk /* 45 */
+ data8 sys_setgid
+ data8 sys_getgid
+ data8 sys_ni_syscall
+ data8 sys_geteuid
+ data8 sys_getegid /* 50 */
+ data8 sys_acct
+ data8 sys_umount /* recycled never used phys( */
+ data8 sys_ni_syscall /* old lock syscall holder */
+ data8 sys_ioctl
+ data8 sys_fcntl /* 55 */
+ data8 sys_ni_syscall /* old mpx syscall holder */
+ data8 sys_setpgid
+ data8 sys_ni_syscall /* old ulimit syscall holder */
+ data8 sys_ni_syscall
+ data8 sys_umask /* 60 */
+ data8 sys_chroot
+ data8 sys_ustat
+ data8 sys_dup2
+ data8 sys_getppid
+ data8 sys_getpgrp /* 65 */
+ data8 sys_setsid
+ data8 sys_ni_syscall
+ data8 sys_ni_syscall
+ data8 sys_ni_syscall
+ data8 sys_setreuid /* 70 */
+ data8 sys_setregid
+ data8 sys_ni_syscall
+ data8 sys_sigpending
+ data8 sys_sethostname
+ data8 sys32_setrlimit /* 75 */
+ data8 sys32_getrlimit
+ data8 sys_getrusage
+ data8 sys32_gettimeofday
+ data8 sys32_settimeofday
+ data8 sys_getgroups /* 80 */
+ data8 sys_setgroups
+ data8 sys_ni_syscall
+ data8 sys_symlink
+ data8 sys_ni_syscall
+ data8 sys_readlink /* 85 */
+ data8 sys_uselib
+ data8 sys_swapon
+ data8 sys_reboot
+ data8 sys32_readdir
+ data8 sys32_mmap /* 90 */
+ data8 sys_munmap
+ data8 sys_truncate
+ data8 sys_ftruncate
+ data8 sys_fchmod
+ data8 sys_fchown /* 95 */
+ data8 sys_getpriority
+ data8 sys_setpriority
+ data8 sys_ni_syscall /* old profil syscall holder */
+ data8 sys32_statfs
+ data8 sys32_fstatfs /* 100 */
+ data8 sys_ioperm
+ data8 sys32_socketcall
+ data8 sys_syslog
+ data8 sys32_setitimer
+ data8 sys32_getitimer /* 105 */
+ data8 sys32_newstat
+ data8 sys32_newlstat
+ data8 sys32_newfstat
+ data8 sys_ni_syscall
+ data8 sys_iopl /* 110 */
+ data8 sys_vhangup
+ data8 sys_ni_syscall // used to be sys_idle
+ data8 sys_ni_syscall
+ data8 sys32_wait4
+ data8 sys_swapoff /* 115 */
+ data8 sys_sysinfo
+ data8 sys32_ipc
+ data8 sys_fsync
+ data8 sys32_sigreturn
+ data8 sys_clone /* 120 */
+ data8 sys_setdomainname
+ data8 sys_newuname
+ data8 sys_modify_ldt
+ data8 sys_adjtimex
+ data8 sys32_mprotect /* 125 */
+ data8 sys_sigprocmask
+ data8 sys_create_module
+ data8 sys_init_module
+ data8 sys_delete_module
+ data8 sys_get_kernel_syms /* 130 */
+ data8 sys_quotactl
+ data8 sys_getpgid
+ data8 sys_fchdir
+ data8 sys_bdflush
+ data8 sys_sysfs /* 135 */
+ data8 sys_personality
+ data8 sys_ni_syscall /* for afs_syscall */
+ data8 sys_setfsuid
+ data8 sys_setfsgid
+ data8 sys_llseek /* 140 */
+ data8 sys32_getdents
+ data8 sys32_select
+ data8 sys_flock
+ data8 sys_msync
+ data8 sys32_readv /* 145 */
+ data8 sys32_writev
+ data8 sys_getsid
+ data8 sys_fdatasync
+ data8 sys_sysctl
+ data8 sys_mlock /* 150 */
+ data8 sys_munlock
+ data8 sys_mlockall
+ data8 sys_munlockall
+ data8 sys_sched_setparam
+ data8 sys_sched_getparam /* 155 */
+ data8 sys_sched_setscheduler
+ data8 sys_sched_getscheduler
+ data8 sys_sched_yield
+ data8 sys_sched_get_priority_max
+ data8 sys_sched_get_priority_min /* 160 */
+ data8 sys_sched_rr_get_interval
+ data8 sys32_nanosleep
+ data8 sys_mremap
+ data8 sys_setresuid
+ data8 sys_getresuid /* 165 */
+ data8 sys_vm86
+ data8 sys_query_module
+ data8 sys_poll
+ data8 sys_nfsservctl
+ data8 sys_setresgid /* 170 */
+ data8 sys_getresgid
+ data8 sys_prctl
+ data8 sys32_rt_sigreturn
+ data8 sys32_rt_sigaction
+ data8 sys32_rt_sigprocmask /* 175 */
+ data8 sys_rt_sigpending
+ data8 sys_rt_sigtimedwait
+ data8 sys_rt_sigqueueinfo
+ data8 sys_rt_sigsuspend
+ data8 sys_pread /* 180 */
+ data8 sys_pwrite
+ data8 sys_chown
+ data8 sys_getcwd
+ data8 sys_capget
+ data8 sys_capset /* 185 */
+ data8 sys_sigaltstack
+ data8 sys_sendfile
+ data8 sys_ni_syscall /* streams1 */
+ data8 sys_ni_syscall /* streams2 */
+ data8 sys32_vfork /* 190 */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)