⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 entry.s

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 S
📖 第 1 页 / 共 3 页
字号:
# a new process exits the kernel with ret_from_fork#        .globl  ret_from_forkret_from_fork:          basr    %r13,0        ahi     %r13,sysc_lit-.   # setup base pointer R13 to $SYSCDAT        GET_CURRENT               # load pointer to task_struct to R9        stosm   24(%r15),0x03     # reenable interrupts        sr      %r0,%r0           # child returns 0        st      %r0,SP_R2(%r15)   # store return value (change R2 on stack)#ifdef CONFIG_SMP        l       %r1,sysc_schedtail-sysc_lit(%r13)	la      %r14,sysc_return-sysc_lit(%r13)        br      %r1               # call 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        l       %r1,sysc_clone-sysc_lit(%r13)        br      %r1                   # branch to sys_clonesys_fork_glue:          la      %r2,SP_PTREGS(%r15)    # load pt_regs        l       %r1,sysc_fork-sysc_lit(%r13)        br      %r1                   # branch to sys_forksys_vfork_glue:         la      %r2,SP_PTREGS(%r15)    # load pt_regs        l       %r1,sysc_vfork-sysc_lit(%r13)        br      %r1                   # branch to sys_vforksys_execve_glue:                la      %r2,SP_PTREGS(%r15)   # load pt_regs        l       %r1,sysc_execve-sysc_lit(%r13)	lr      %r12,%r14             # save return address        basr    %r14,%r1              # call sys_execve        ltr     %r2,%r2               # check if execve failed        bnz     0(%r12)               # it did fail -> store result in gpr2        b       4(%r12)               # SKIP ST 2,SP_R2(15) after BASR 14,8                                      # in system_call/sysc_tracesyssys_sigreturn_glue:             la      %r2,SP_PTREGS(%r15)   # load pt_regs as parameter        l       %r1,sysc_sigreturn-sysc_lit(%r13)        br      %r1                   # branch to sys_sigreturnsys_rt_sigreturn_glue:             la      %r2,SP_PTREGS(%r15)   # load pt_regs as parameter        l       %r1,sysc_rt_sigreturn-sysc_lit(%r13)        br      %r1                   # branch to sys_sigreturn## 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:            lr      %r5,%r4               # move mask back        lr      %r4,%r3               # move history1 parameter        lr      %r3,%r2               # move history0 parameter        la      %r2,SP_PTREGS(%r15)   # load pt_regs as first parameter        l       %r1,sysc_sigsuspend-sysc_lit(%r13)	la      %r14,4(%r14)          # skip store of return value        br      %r1                   # branch to sys_sigsuspendsys_rt_sigsuspend_glue:         lr      %r4,%r3               # move sigsetsize parameter        lr      %r3,%r2               # move unewset parameter        la      %r2,SP_PTREGS(%r15)   # load pt_regs as first parameter        l       %r1,sysc_rt_sigsuspend-sysc_lit(%r13)	la      %r14,4(%r14)          # skip store of return value        br      %r1                   # branch to sys_rt_sigsuspend	.globl  sys_call_table	sys_call_table:        .long  sys_ni_syscall            /* 0 */        .long  sys_exit        .long  sys_fork_glue        .long  sys_read        .long  sys_write        .long  sys_open                  /* 5 */        .long  sys_close        .long  sys_ni_syscall           /* old waitpid syscall holder */        .long  sys_creat        .long  sys_link        .long  sys_unlink                /* 10 */        .long  sys_execve_glue        .long  sys_chdir        .long  sys_time        .long  sys_mknod        .long  sys_chmod                /* 15 */        .long  sys_lchown16        .long  sys_ni_syscall           /* old break syscall holder */        .long  sys_ni_syscall           /* old stat syscall holder */        .long  sys_lseek        .long  sys_getpid               /* 20 */        .long  sys_mount        .long  sys_oldumount        .long  sys_setuid16        .long  sys_getuid16        .long  sys_stime                /* 25 */        .long  sys_ptrace        .long  sys_alarm        .long  sys_ni_syscall           /* old fstat syscall holder */        .long  sys_pause        .long  sys_utime                /* 30 */        .long  sys_ni_syscall           /* old stty syscall holder */        .long  sys_ni_syscall           /* old gtty syscall holder */        .long  sys_access        .long  sys_nice        .long  sys_ni_syscall           /* 35 */  /* old ftime syscall holder */        .long  sys_sync        .long  sys_kill        .long  sys_rename        .long  sys_mkdir        .long  sys_rmdir                /* 40 */        .long  sys_dup        .long  sys_pipe        .long  sys_times        .long  sys_ni_syscall           /* old prof syscall holder */        .long  sys_brk                  /* 45 */        .long  sys_setgid16        .long  sys_getgid16        .long  sys_signal        .long  sys_geteuid16        .long  sys_getegid16            /* 50 */        .long  sys_acct        .long  sys_umount        .long  sys_ni_syscall           /* old lock syscall holder */        .long  sys_ioctl        .long  sys_fcntl                /* 55 */        .long  sys_ni_syscall           /* old mpx syscall holder */        .long  sys_setpgid        .long  sys_ni_syscall           /* old ulimit syscall holder */        .long  sys_ni_syscall           /* old uname syscall holder */        .long  sys_umask                /* 60 */        .long  sys_chroot        .long  sys_ustat        .long  sys_dup2        .long  sys_getppid        .long  sys_getpgrp              /* 65 */        .long  sys_setsid        .long  sys_sigaction        .long  sys_ni_syscall           /* old sgetmask syscall holder */        .long  sys_ni_syscall           /* old ssetmask syscall holder */        .long  sys_setreuid16           /* 70 */        .long  sys_setregid16        .long  sys_sigsuspend_glue        .long  sys_sigpending        .long  sys_sethostname        .long  sys_setrlimit            /* 75 */        .long  sys_getrlimit        .long  sys_getrusage        .long  sys_gettimeofday        .long  sys_settimeofday        .long  sys_getgroups16          /* 80 */        .long  sys_setgroups16        .long  sys_ni_syscall           /* old select syscall holder */        .long  sys_symlink        .long  sys_ni_syscall           /* old lstat syscall holder */        .long  sys_readlink             /* 85 */        .long  sys_uselib        .long  sys_swapon        .long  sys_reboot        .long  sys_ni_syscall           /* old readdir syscall holder */        .long  old_mmap                 /* 90 */        .long  sys_munmap        .long  sys_truncate        .long  sys_ftruncate        .long  sys_fchmod        .long  sys_fchown16              /* 95 */        .long  sys_getpriority        .long  sys_setpriority        .long  sys_ni_syscall            /* old profil syscall holder */        .long  sys_statfs        .long  sys_fstatfs               /* 100 */        .long  sys_ioperm        .long  sys_socketcall        .long  sys_syslog        .long  sys_setitimer        .long  sys_getitimer             /* 105 */        .long  sys_newstat        .long  sys_newlstat        .long  sys_newfstat        .long  sys_ni_syscall            /* old uname syscall holder */        .long  sys_ni_syscall            /* 110 */ /* iopl for i386 */        .long  sys_vhangup        .long  sys_ni_syscall            /* old "idle" system call */        .long  sys_ni_syscall            /* vm86old for i386 */        .long  sys_wait4        .long  sys_swapoff               /* 115 */        .long  sys_sysinfo        .long  sys_ipc        .long  sys_fsync        .long  sys_sigreturn_glue        .long  sys_clone_glue            /* 120 */        .long  sys_setdomainname        .long  sys_newuname        .long  sys_ni_syscall            /* modify_ldt for i386 */        .long  sys_adjtimex        .long  sys_mprotect              /* 125 */        .long  sys_sigprocmask        .long  sys_create_module        .long  sys_init_module        .long  sys_delete_module        .long  sys_get_kernel_syms       /* 130 */        .long  sys_quotactl        .long  sys_getpgid        .long  sys_fchdir        .long  sys_bdflush        .long  sys_sysfs                 /* 135 */        .long  sys_personality        .long  sys_ni_syscall            /* for afs_syscall */        .long  sys_setfsuid16        .long  sys_setfsgid16        .long  sys_llseek                /* 140 */        .long  sys_getdents        .long  sys_select        .long  sys_flock        .long  sys_msync        .long  sys_readv                 /* 145 */        .long  sys_writev        .long  sys_getsid        .long  sys_fdatasync        .long  sys_sysctl        .long  sys_mlock                 /* 150 */        .long  sys_munlock        .long  sys_mlockall        .long  sys_munlockall        .long  sys_sched_setparam        .long  sys_sched_getparam        /* 155 */        .long  sys_sched_setscheduler        .long  sys_sched_getscheduler        .long  sys_sched_yield        .long  sys_sched_get_priority_max        .long  sys_sched_get_priority_min  /* 160 */        .long  sys_sched_rr_get_interval        .long  sys_nanosleep        .long  sys_mremap        .long  sys_setresuid16        .long  sys_getresuid16           /* 165 */        .long  sys_ni_syscall            /* for vm86 */        .long  sys_query_module        .long  sys_poll        .long  sys_nfsservctl        .long  sys_setresgid16           /* 170 */        .long  sys_getresgid16        .long  sys_prctl        .long  sys_rt_sigreturn_glue        .long  sys_rt_sigaction        .long  sys_rt_sigprocmask        /* 175 */        .long  sys_rt_sigpending        .long  sys_rt_sigtimedwait        .long  sys_rt_sigqueueinfo        .long  sys_rt_sigsuspend_glue        .long  sys_pread                 /* 180 */        .long  sys_pwrite        .long  sys_chown16        .long  sys_getcwd        .long  sys_capget        .long  sys_capset                /* 185 */        .long  sys_sigaltstack        .long  sys_sendfile        .long  sys_ni_syscall            /* streams1 */        .long  sys_ni_syscall            /* streams2 */        .long  sys_vfork_glue            /* 190 */        .long  sys_getrlimit	.long  sys_ni_syscall  /* FIXME: problem with sys_mmap2: 6 parms */        .long  sys_truncate64        .long  sys_ftruncate64        .long  sys_stat64                /* 195 */        .long  sys_lstat64        .long  sys_fstat64	.long  sys_lchown	.long  sys_getuid	.long  sys_getgid		 /* 200 */	.long  sys_geteuid	.long  sys_getegid	.long  sys_setreuid	.long  sys_setregid	.long  sys_getgroups             /* 205 */	.long  sys_setgroups	.long  sys_fchown	.long  sys_setresuid	.long  sys_getresuid	.long  sys_setresgid             /* 210 */	.long  sys_getresgid	.long  sys_chown	.long  sys_setuid	.long  sys_setgid

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -