📄 entry.s
字号:
xc SP_R2(8,%r15),SP_R2(%r15) # child returns 0#ifdef CONFIG_SMP larl %r14,sysc_return jg schedule_tail # return to sysc_return#else j sysc_return#endif## clone, fork, vfork, exec and sigreturn need glue,# because they all expect pt_regs as parameter,# but are called with different parameter.# return-address is set up above#sys_clone_glue: la %r2,SP_PTREGS(%r15) # load pt_regs jg sys_clone # branch to sys_clonesys_fork_glue: la %r2,SP_PTREGS(%r15) # load pt_regs jg sys_fork # branch to sys_forksys_vfork_glue: la %r2,SP_PTREGS(%r15) # load pt_regs jg sys_vfork # branch to sys_vforksys_execve_glue: la %r2,SP_PTREGS(%r15) # load pt_regs lgr %r12,%r14 # save return address brasl %r14,sys_execve # call sys_execve ltgr %r2,%r2 # check if execve failed bnz 0(%r12) # it did fail -> store result in gpr2 b 6(%r12) # SKIP STG 2,SP_R2(15) in # system_call/sysc_tracesys#ifdef CONFIG_S390_SUPPORTsys32_execve_glue: la %r2,SP_PTREGS(%r15) # load pt_regs lgr %r12,%r14 # save return address brasl %r14,sys32_execve # call sys32_execve ltgr %r2,%r2 # check if execve failed bnz 0(%r12) # it did fail -> store result in gpr2 b 6(%r12) # SKIP STG 2,SP_R2(15) in # system_call/sysc_tracesys#endifsys_sigreturn_glue: la %r2,SP_PTREGS(%r15) # load pt_regs as parameter jg sys_sigreturn # branch to sys_sigreturn#ifdef CONFIG_S390_SUPPORTsys32_sigreturn_glue: la %r2,SP_PTREGS(%r15) # load pt_regs as parameter jg sys32_sigreturn # branch to sys32_sigreturn#endifsys_rt_sigreturn_glue: la %r2,SP_PTREGS(%r15) # load pt_regs as parameter jg sys_rt_sigreturn # branch to sys_sigreturn#ifdef CONFIG_S390_SUPPORTsys32_rt_sigreturn_glue: la %r2,SP_PTREGS(%r15) # load pt_regs as parameter jg sys32_rt_sigreturn # branch to sys32_sigreturn#endif## sigsuspend and rt_sigsuspend need pt_regs as an additional# parameter and they have to skip the store of %r2 into the# user register %r2 because the return value was set in # sigsuspend and rt_sigsuspend already and must not be overwritten!#sys_sigsuspend_glue: lgr %r5,%r4 # move mask back lgr %r4,%r3 # move history1 parameter lgr %r3,%r2 # move history0 parameter la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter la %r14,6(%r14) # skip store of return value jg sys_sigsuspend # branch to sys_sigsuspend#ifdef CONFIG_S390_SUPPORTsys32_sigsuspend_glue: llgfr %r4,%r4 # unsigned long lgr %r5,%r4 # move mask back lgfr %r3,%r3 # int lgr %r4,%r3 # move history1 parameter lgfr %r2,%r2 # int lgr %r3,%r2 # move history0 parameter la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter la %r14,6(%r14) # skip store of return value jg sys32_sigsuspend # branch to sys32_sigsuspend#endifsys_rt_sigsuspend_glue: lgr %r4,%r3 # move sigsetsize parameter lgr %r3,%r2 # move unewset parameter la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter la %r14,6(%r14) # skip store of return value jg sys_rt_sigsuspend # branch to sys_rt_sigsuspend#ifdef CONFIG_S390_SUPPORTsys32_rt_sigsuspend_glue: llgfr %r3,%r3 # size_t lgr %r4,%r3 # move sigsetsize parameter llgtr %r2,%r2 # sigset_emu31_t * lgr %r3,%r2 # move unewset parameter la %r2,SP_PTREGS(%r15) # load pt_regs as first parameter la %r14,6(%r14) # skip store of return value jg sys32_rt_sigsuspend # branch to sys32_rt_sigsuspend#endifsys_sigaltstack_glue: la %r4,SP_PTREGS(%r15) # load pt_regs as parameter jg sys_sigaltstack # branch to sys_sigreturn#ifdef CONFIG_S390_SUPPORTsys32_sigaltstack_glue: la %r4,SP_PTREGS(%r15) # load pt_regs as parameter jg sys32_sigaltstack_wrapper # branch to sys_sigreturn#endif#ifdef CONFIG_S390_SUPPORT#define SYSCALL(esame,esa) esame,esa#else#define SYSCALL(esame,esa) esame,sys_ni_syscall#endif .globl sys_call_table sys_call_table: .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 0 */ .long SYSCALL(sys_exit,sys32_exit_wrapper) .long SYSCALL(sys_fork_glue,sys_fork_glue) .long SYSCALL(sys_read,sys32_read_wrapper) .long SYSCALL(sys_write,sys32_write_wrapper) .long SYSCALL(sys_open,sys32_open_wrapper) /* 5 */ .long SYSCALL(sys_close,sys32_close_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old waitpid syscall */ .long SYSCALL(sys_creat,sys32_creat_wrapper) .long SYSCALL(sys_link,sys32_link_wrapper) .long SYSCALL(sys_unlink,sys32_unlink_wrapper) /* 10 */ .long SYSCALL(sys_execve_glue,sys32_execve_glue) .long SYSCALL(sys_chdir,sys32_chdir_wrapper) .long SYSCALL(sys_ni_syscall,sys32_time_wrapper) /* old time syscall */ .long SYSCALL(sys_mknod,sys32_mknod_wrapper) .long SYSCALL(sys_chmod,sys32_chmod_wrapper) /* 15 */ .long SYSCALL(sys_ni_syscall,sys32_lchown16_wrapper) /* old lchown16 syscall*/ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old break syscall */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old stat syscall */ .long SYSCALL(sys_lseek,sys32_lseek_wrapper) .long SYSCALL(sys_getpid,sys_getpid) /* 20 */ .long SYSCALL(sys_mount,sys32_mount_wrapper) .long SYSCALL(sys_oldumount,sys32_oldumount_wrapper) .long SYSCALL(sys_ni_syscall,sys32_setuid16_wrapper) /* old setuid16 syscall*/ .long SYSCALL(sys_ni_syscall,sys32_getuid16) /* old getuid16 syscall*/ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 25 old stime syscall */ .long SYSCALL(sys_ptrace,sys32_ptrace_wrapper) .long SYSCALL(sys_alarm,sys32_alarm_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old fstat syscall */ .long SYSCALL(sys_pause,sys32_pause) .long SYSCALL(sys_utime,sys32_utime_wrapper) /* 30 */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old stty syscall */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old gtty syscall */ .long SYSCALL(sys_access,sys32_access_wrapper) .long SYSCALL(sys_nice,sys32_nice_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old ftime syscall */ .long SYSCALL(sys_sync,sys_sync) .long SYSCALL(sys_kill,sys32_kill_wrapper) .long SYSCALL(sys_rename,sys32_rename_wrapper) .long SYSCALL(sys_mkdir,sys32_mkdir_wrapper) .long SYSCALL(sys_rmdir,sys32_rmdir_wrapper) /* 40 */ .long SYSCALL(sys_dup,sys32_dup_wrapper) .long SYSCALL(sys_pipe,sys32_pipe_wrapper) .long SYSCALL(sys_times,sys32_times_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old prof syscall */ .long SYSCALL(sys_brk,sys32_brk_wrapper) /* 45 */ .long SYSCALL(sys_ni_syscall,sys32_setgid16) /* old setgid16 syscall*/ .long SYSCALL(sys_ni_syscall,sys32_getgid16) /* old getgid16 syscall*/ .long SYSCALL(sys_signal,sys32_signal_wrapper) .long SYSCALL(sys_ni_syscall,sys32_geteuid16) /* old geteuid16 syscall */ .long SYSCALL(sys_ni_syscall,sys32_getegid16) /* old getegid16 syscall */ .long SYSCALL(sys_acct,sys32_acct_wrapper) .long SYSCALL(sys_umount,sys32_umount_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old lock syscall */ .long SYSCALL(sys_ioctl,sys32_ioctl_wrapper) .long SYSCALL(sys_fcntl,sys32_fcntl_wrapper) /* 55 */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* intel mpx syscall */ .long SYSCALL(sys_setpgid,sys32_setpgid_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old ulimit syscall */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old uname syscall */ .long SYSCALL(sys_umask,sys32_umask_wrapper) /* 60 */ .long SYSCALL(sys_chroot,sys32_chroot_wrapper) .long SYSCALL(sys_ustat,sys32_ustat_wrapper) .long SYSCALL(sys_dup2,sys32_dup2_wrapper) .long SYSCALL(sys_getppid,sys_getppid) .long SYSCALL(sys_getpgrp,sys_getpgrp) /* 65 */ .long SYSCALL(sys_setsid,sys_setsid) .long SYSCALL(sys_sigaction,sys32_sigaction_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old sgetmask syscall*/ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old ssetmask syscall*/ .long SYSCALL(sys_ni_syscall,sys32_setreuid16_wrapper) /* old setreuid16 syscall */ .long SYSCALL(sys_ni_syscall,sys32_setregid16_wrapper) /* old setregid16 syscall */ .long SYSCALL(sys_sigsuspend_glue,sys32_sigsuspend_glue) .long SYSCALL(sys_sigpending,sys32_sigpending_wrapper) .long SYSCALL(sys_sethostname,sys32_sethostname_wrapper) .long SYSCALL(sys_setrlimit,sys32_setrlimit_wrapper) /* 75 */ .long SYSCALL(sys_getrlimit,sys32_old_getrlimit_wrapper) .long SYSCALL(sys_getrusage,sys32_getrusage_wrapper) .long SYSCALL(sys_gettimeofday,sys32_gettimeofday_wrapper) .long SYSCALL(sys_settimeofday,sys32_settimeofday_wrapper) .long SYSCALL(sys_ni_syscall,sys32_getgroups16_wrapper) /* old getgroups16 syscall */ .long SYSCALL(sys_ni_syscall,sys32_setgroups16_wrapper) /* old setgroups16 syscall */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old select syscall */ .long SYSCALL(sys_symlink,sys32_symlink_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old lstat syscall */ .long SYSCALL(sys_readlink,sys32_readlink_wrapper) /* 85 */ .long SYSCALL(sys_uselib,sys32_uselib_wrapper) .long SYSCALL(sys_swapon,sys32_swapon_wrapper) .long SYSCALL(sys_reboot,sys32_reboot_wrapper) .long SYSCALL(sys_ni_syscall,old32_readdir_wrapper) /* old readdir syscall */ .long SYSCALL(old_mmap,old32_mmap_wrapper) /* 90 */ .long SYSCALL(sys_munmap,sys32_munmap_wrapper) .long SYSCALL(sys_truncate,sys32_truncate_wrapper) .long SYSCALL(sys_ftruncate,sys32_ftruncate_wrapper) .long SYSCALL(sys_fchmod,sys32_fchmod_wrapper) .long SYSCALL(sys_ni_syscall,sys32_fchown16_wrapper) /* old fchown16 syscall*/ .long SYSCALL(sys_getpriority,sys32_getpriority_wrapper) .long SYSCALL(sys_setpriority,sys32_setpriority_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old profil syscall */ .long SYSCALL(sys_statfs,sys32_statfs_wrapper) .long SYSCALL(sys_fstatfs,sys32_fstatfs_wrapper) /* 100 */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) .long SYSCALL(sys_socketcall,sys32_socketcall_wrapper) .long SYSCALL(sys_syslog,sys32_syslog_wrapper) .long SYSCALL(sys_setitimer,sys32_setitimer_wrapper) .long SYSCALL(sys_getitimer,sys32_getitimer_wrapper) /* 105 */ .long SYSCALL(sys_newstat,sys32_newstat_wrapper) .long SYSCALL(sys_newlstat,sys32_newlstat_wrapper) .long SYSCALL(sys_newfstat,sys32_newfstat_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old uname syscall */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* iopl for i386 */ .long SYSCALL(sys_vhangup,sys_vhangup) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* old "idle" system call */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* vm86old for i386 */ .long SYSCALL(sys_wait4,sys32_wait4_wrapper) .long SYSCALL(sys_swapoff,sys32_swapoff_wrapper) /* 115 */ .long SYSCALL(sys_sysinfo,sys32_sysinfo_wrapper) .long SYSCALL(sys_ipc,sys32_ipc_wrapper) .long SYSCALL(sys_fsync,sys32_fsync_wrapper) .long SYSCALL(sys_sigreturn_glue,sys32_sigreturn_glue) .long SYSCALL(sys_clone_glue,sys_clone_glue) /* 120 */ .long SYSCALL(sys_setdomainname,sys32_setdomainname_wrapper) .long SYSCALL(sys_newuname,sys32_newuname_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* modify_ldt for i386 */ .long SYSCALL(sys_adjtimex,sys32_adjtimex_wrapper) .long SYSCALL(sys_mprotect,sys32_mprotect_wrapper) /* 125 */ .long SYSCALL(sys_sigprocmask,sys32_sigprocmask_wrapper) .long SYSCALL(sys_create_module,sys32_create_module_wrapper) .long SYSCALL(sys_init_module,sys32_init_module_wrapper) .long SYSCALL(sys_delete_module,sys32_delete_module_wrapper) .long SYSCALL(sys_get_kernel_syms,sys32_get_kernel_syms_wrapper) /* 130 */ .long SYSCALL(sys_quotactl,sys32_quotactl_wrapper) .long SYSCALL(sys_getpgid,sys32_getpgid_wrapper) .long SYSCALL(sys_fchdir,sys32_fchdir_wrapper) .long SYSCALL(sys_bdflush,sys32_bdflush_wrapper) .long SYSCALL(sys_sysfs,sys32_sysfs_wrapper) /* 135 */ .long SYSCALL(sys_personality,sys32_personality_wrapper) .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* for afs_syscall */ .long SYSCALL(sys_ni_syscall,sys32_setfsuid16_wrapper) /* old setfsuid16 syscall */ .long SYSCALL(sys_ni_syscall,sys32_setfsgid16_wrapper) /* old setfsgid16 syscall */ .long SYSCALL(sys_llseek,sys32_llseek_wrapper) /* 140 */ .long SYSCALL(sys_getdents,sys32_getdents_wrapper) .long SYSCALL(sys_select,sys32_select_wrapper) .long SYSCALL(sys_flock,sys32_flock_wrapper) .long SYSCALL(sys_msync,sys32_msync_wrapper) .long SYSCALL(sys_readv,sys32_readv_wrapper) /* 145 */ .long SYSCALL(sys_writev,sys32_writev_wrapper) .long SYSCALL(sys_getsid,sys32_getsid_wrapper) .long SYSCALL(sys_fdatasync,sys32_fdatasync_wrapper) .long SYSCALL(sys_sysctl,sys_ni_syscall) .long SYSCALL(sys_mlock,sys32_mlock_wrapper) /* 150 */ .long SYSCALL(sys_munlock,sys32_munlock_wrapper)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -