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

📄 entry.s

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldq	$4,0($4)		/* softirq_active[32] + softirq_mask[32] */	sll	$4,32,$3	and	$4,$3,$4	bne	$4,handle_softirqret_from_softirq:	ldq	$0,SP_OFF($30)	and	$0,8,$0	beq	$0,restore_allret_from_reschedule:	ldq	$2,TASK_NEED_RESCHED($8)	lda	$4,init_task_union	bne	$2,reschedule	xor	$4,$8,$4	ldl	$5,TASK_SIGPENDING($8)	beq	$4,restore_all	bne	$5,signal_returnrestore_all:	RESTORE_ALL	call_pal PAL_rti/* PTRACE syscall handler */.align 3strace:	/* set up signal stack, call syscall_trace */	bsr	$1,do_switch_stack	jsr     $26,syscall_trace	bsr	$1,undo_switch_stack	/* get the system call number and the arguments back.. */	ldq     $0,0($30)	ldq     $16,SP_OFF+24($30)	ldq     $17,SP_OFF+32($30)	ldq     $18,SP_OFF+40($30)	ldq     $19,72($30)	ldq     $20,80($30)	ldq     $21,88($30)	/* get the system call pointer.. */	lda	$1,NR_SYSCALLS($31)	lda	$2,sys_call_table	lda	$27,alpha_ni_syscall	cmpult	$0,$1,$1	s8addq	$0,$2,$2	beq	$1,1f	ldq	$27,0($2)1:	jsr	$26,($27),sys_gettimeofday	ldgp	$29,0($26)	/* check return.. */	blt	$0,strace_error	/* the call failed */	stq	$31,72($30)		/* a3=0 => no error */strace_success:	stq	$0,0($30)		/* save return value */	bsr	$1,do_switch_stack	jsr     $26,syscall_trace	bsr	$1,undo_switch_stack	br	$31,ret_from_sys_call	.align  3strace_error:	ldq	$19,0($30)	/* old syscall nr (zero if success) */	beq	$19,strace_success	ldq	$20,72($30)	/* .. and this a3 */	subq	$31,$0,$0	/* with error in v0 */	addq	$31,1,$1	/* set a3 for errno return */	stq	$0,0($30)	stq	$1,72($30)	/* a3 for return */	bsr	$1,do_switch_stack	mov	$19,$9		/* save old syscall number */	mov	$20,$10		/* save old a3 */	jsr     $26,syscall_trace	mov	$9,$19	mov	$10,$20	bsr	$1,undo_switch_stack	mov	$31,$26		/* tell "ret_from_sys_call" we can restart */	br	ret_from_sys_call	.align 3handle_softirq:	subq	$30,16,$30	stq	$19,0($30)	/* save syscall nr */	stq	$20,8($30)	/* and error indication (a3) */	jsr	$26,do_softirq	ldq	$19,0($30)	ldq	$20,8($30)	addq	$30,16,$30	br	ret_from_softirq		.align 3syscall_error:	/*	 * Some system calls (e.g., ptrace) can return arbitrary	 * values which might normally be mistaken as error numbers.	 * Those functions must zero $0 (v0) directly in the stack	 * frame to indicate that a negative return value wasn't an	 * error number..	 */	ldq	$19,0($30)	/* old syscall nr (zero if success) */	beq	$19,ret_success	ldq	$20,72($30)	/* .. and this a3 */	subq	$31,$0,$0	/* with error in v0 */	addq	$31,1,$1	/* set a3 for errno return */	stq	$0,0($30)	mov	$31,$26		/* tell "ret_from_sys_call" we can restart */	stq	$1,72($30)	/* a3 for return */	br	ret_from_sys_callret_success:	stq	$0,0($30)	stq	$31,72($30)	/* a3=0 => no error */	br	ret_from_sys_call.align 3signal_return:	mov	$30,$17	br	$1,do_switch_stack	mov	$30,$18	mov	$31,$16	jsr	$26,do_signal	bsr	$1,undo_switch_stack	br	restore_all.end entSys#ifdef CONFIG_SMP        .globl  ret_from_smp_fork.align 3.ent ret_from_smp_forkret_from_smp_fork:	lda	$26,ret_from_sys_call	mov	$17,$16	jsr	$31,schedule_tail.end ret_from_smp_fork#endif /* CONFIG_SMP */.align 3.ent reschedulereschedule:	subq	$30,16,$30	stq	$19,0($30)	/* save syscall nr */	stq	$20,8($30)	/* and error indication (a3) */	jsr	$26,schedule	ldq	$19,0($30)	ldq	$20,8($30)	addq	$30,16,$30	br	ret_from_reschedule.end reschedule.align 3.ent sys_sigreturnsys_sigreturn:	mov	$30,$17	lda	$18,-SWITCH_STACK_SIZE($30)	lda	$30,-SWITCH_STACK_SIZE($30)	jsr	$26,do_sigreturn	br	$1,undo_switch_stack	br	ret_from_sys_call.end sys_sigreturn.align 3.ent sys_rt_sigreturnsys_rt_sigreturn:	mov	$30,$17	lda	$18,-SWITCH_STACK_SIZE($30)	lda	$30,-SWITCH_STACK_SIZE($30)	jsr	$26,do_rt_sigreturn	br	$1,undo_switch_stack	br	ret_from_sys_call.end sys_rt_sigreturn.align 3.ent sys_sigsuspendsys_sigsuspend:	mov	$30,$17	br	$1,do_switch_stack	mov	$30,$18	jsr	$26,do_sigsuspend	lda	$30,SWITCH_STACK_SIZE($30)	br	ret_from_sys_call.end sys_sigsuspend.align 3.ent sys_rt_sigsuspendsys_rt_sigsuspend:	mov	$30,$18	br	$1,do_switch_stack	mov	$30,$19	jsr	$26,do_rt_sigsuspend	lda	$30,SWITCH_STACK_SIZE($30)	br	ret_from_sys_call.end sys_rt_sigsuspend	.data	.align 3	.globl sys_call_tablesys_call_table:	.quad alpha_ni_syscall			/* 0 */	.quad sys_exit	.quad sys_fork	.quad sys_read	.quad sys_write	.quad alpha_ni_syscall			/* 5 */	.quad sys_close	.quad osf_wait4	.quad alpha_ni_syscall	.quad sys_link	.quad sys_unlink			/* 10 */	.quad alpha_ni_syscall	.quad sys_chdir	.quad sys_fchdir	.quad sys_mknod	.quad sys_chmod				/* 15 */	.quad sys_chown	.quad osf_brk	.quad alpha_ni_syscall	.quad sys_lseek	.quad sys_getxpid			/* 20 */	.quad osf_mount	.quad sys_umount	.quad sys_setuid	.quad sys_getxuid	.quad alpha_ni_syscall			/* 25 */	.quad sys_ptrace	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 30 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad sys_access	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 35 */	.quad sys_sync	.quad sys_kill	.quad alpha_ni_syscall	.quad sys_setpgid	.quad alpha_ni_syscall			/* 40 */	.quad sys_dup	.quad sys_pipe	.quad osf_set_program_attributes	.quad alpha_ni_syscall	.quad sys_open				/* 45 */	.quad alpha_ni_syscall	.quad sys_getxgid	.quad osf_sigprocmask	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 50 */	.quad sys_acct	.quad sys_sigpending	.quad alpha_ni_syscall	.quad sys_ioctl	.quad alpha_ni_syscall			/* 55 */	.quad alpha_ni_syscall	.quad sys_symlink	.quad sys_readlink	.quad sys_execve	.quad sys_umask				/* 60 */	.quad sys_chroot	.quad alpha_ni_syscall	.quad sys_getpgrp	.quad sys_getpagesize	.quad alpha_ni_syscall			/* 65 */	.quad sys_vfork	.quad sys_newstat	.quad sys_newlstat	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 70 */	.quad osf_mmap	.quad alpha_ni_syscall	.quad sys_munmap	.quad sys_mprotect	.quad sys_madvise			/* 75 */	.quad sys_vhangup	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad sys_getgroups	/* map BSD's setpgrp to sys_setpgid for binary compatibility: */	.quad sys_setgroups			/* 80 */	.quad alpha_ni_syscall	.quad sys_setpgid	.quad osf_setitimer	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 85 */	.quad osf_getitimer	.quad sys_gethostname	.quad sys_sethostname	.quad sys_getdtablesize	.quad sys_dup2				/* 90 */	.quad sys_newfstat	.quad sys_fcntl	.quad osf_select	.quad sys_poll	.quad sys_fsync				/* 95 */	.quad sys_setpriority	.quad sys_socket	.quad sys_connect	.quad sys_accept	.quad osf_getpriority			/* 100 */	.quad sys_send	.quad sys_recv	.quad sys_sigreturn	.quad sys_bind	.quad sys_setsockopt			/* 105 */	.quad sys_listen	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 110 */	.quad sys_sigsuspend	.quad osf_sigstack	.quad sys_recvmsg	.quad sys_sendmsg	.quad alpha_ni_syscall			/* 115 */	.quad osf_gettimeofday	.quad osf_getrusage	.quad sys_getsockopt	.quad alpha_ni_syscall	.quad sys_readv				/* 120 */	.quad sys_writev	.quad osf_settimeofday	.quad sys_fchown	.quad sys_fchmod	.quad sys_recvfrom			/* 125 */	.quad sys_setreuid	.quad sys_setregid	.quad sys_rename	.quad sys_truncate	.quad sys_ftruncate			/* 130 */	.quad sys_flock	.quad sys_setgid	.quad sys_sendto	.quad sys_shutdown	.quad sys_socketpair			/* 135 */	.quad sys_mkdir	.quad sys_rmdir	.quad osf_utimes	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 140 */	.quad sys_getpeername	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad sys_getrlimit	.quad sys_setrlimit			/* 145 */	.quad alpha_ni_syscall	.quad sys_setsid	.quad sys_quotactl	.quad alpha_ni_syscall	.quad sys_getsockname			/* 150 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 155 */	.quad osf_sigaction	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad osf_getdirentries	.quad osf_statfs			/* 160 */	.quad osf_fstatfs	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad osf_getdomainname			/* 165 */	.quad sys_setdomainname	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 170 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 175 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 180 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 185 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 190 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 195 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad osf_swapon	.quad sys_msgctl			/* 200 */	.quad sys_msgget	.quad sys_msgrcv	.quad sys_msgsnd	.quad sys_semctl	.quad sys_semget			/* 205 */	.quad sys_semop	.quad osf_utsname	.quad sys_lchown	.quad osf_shmat	.quad sys_shmctl			/* 210 */	.quad sys_shmdt	.quad sys_shmget	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 215 */	.quad alpha_ni_syscall	.quad sys_msync	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 220 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 225 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 230 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad sys_getpgid	.quad sys_getsid	.quad sys_sigaltstack			/* 235 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 240 */	.quad osf_sysinfo	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad osf_proplist_syscall	.quad alpha_ni_syscall			/* 245 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 250 */	.quad osf_usleep_thread	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad sys_sysfs	.quad alpha_ni_syscall			/* 255 */	.quad osf_getsysinfo	.quad osf_setsysinfo	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 260 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 265 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 270 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 275 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 280 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 285 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 290 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall			/* 295 */	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall	.quad alpha_ni_syscall/* linux-specific system calls start at 300 */	.quad sys_bdflush			/* 300 */	.quad sys_sethae	.quad sys_mount	.quad sys_old_adjtimex	.quad sys_swapoff	.quad sys_getdents			/* 305 */	.quad alpha_create_module	.quad sys_init_module	.quad sys_delete_module	.quad sys_get_kernel_syms	.quad sys_syslog			/* 310 */	.quad sys_reboot	.quad sys_clone	.quad sys_uselib	.quad sys_mlock	.quad sys_munlock			/* 315 */	.quad sys_mlockall	.quad sys_munlockall	.quad sys_sysinfo	.quad sys_sysctl	.quad sys_ni_syscall			/* 320 */	.quad sys_oldumount	.quad sys_swapon	.quad sys_times	.quad sys_personality	.quad sys_setfsuid			/* 325 */	.quad sys_setfsgid	.quad sys_ustat	.quad sys_statfs	.quad sys_fstatfs	.quad sys_sched_setparam		/* 330 */	.quad sys_sched_getparam	.quad sys_sched_setscheduler	.quad sys_sched_getscheduler	.quad sys_sched_yield	.quad sys_sched_get_priority_max	/* 335 */	.quad sys_sched_get_priority_min	.quad sys_sched_rr_get_interval	.quad sys_ni_syscall			/* sys_afs_syscall */	.quad sys_newuname	.quad sys_nanosleep			/* 340 */	.quad sys_mremap	.quad sys_nfsservctl	.quad sys_setresuid	.quad sys_getresuid	.quad sys_pciconfig_read		/* 345 */	.quad sys_pciconfig_write	.quad sys_query_module	.quad sys_prctl	.quad sys_pread	.quad sys_pwrite			/* 350 */	.quad sys_rt_sigreturn	.quad sys_rt_sigaction	.quad sys_rt_sigprocmask	.quad sys_rt_sigpending	.quad sys_rt_sigtimedwait		/* 355 */	.quad sys_rt_sigqueueinfo	.quad sys_rt_sigsuspend	.quad sys_select	.quad sys_gettimeofday	.quad sys_settimeofday			/* 360 */	.quad sys_getitimer	.quad sys_setitimer	.quad sys_utimes	.quad sys_getrusage	.quad sys_wait4				/* 365 */	.quad sys_adjtimex	.quad sys_getcwd	.quad sys_capget	.quad sys_capset	.quad sys_sendfile			/* 370 */	.quad sys_setresgid	.quad sys_getresgid	.quad sys_ni_syscall			/* sys_dipc */	.quad sys_pivot_root	.quad sys_mincore			/* 375 */	.quad sys_pciconfig_iobase	.quad sys_getdents64

⌨️ 快捷键说明

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