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

📄 entry.s

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 S
📖 第 1 页 / 共 3 页
字号:
	adds sp=16,sp				// pop scratch stack space	;;	ld8 r9=[sp]				// load new unat from sw->caller_unat	mov rp=loc0	;;	mov ar.unat=r9	mov ar.pfs=loc1	br.ret.sptk.many rp#else /* !CONFIG_IA64_NEW_UNWIND */	.prologue	alloc r16=ar.pfs,8,0,3,0 // preserve all eight input regs in case of syscall restart!	DO_SAVE_SWITCH_STACK	UNW(.body)	mov out0=0				// there is no "oldset"	adds out1=16,sp				// out1=&sigscratch	.pred.rel.mutex pSys, pNonSys(pSys)	mov out2=1				// out2==1 => we're in a syscall(pNonSys) mov out2=0				// out2==0 => not a syscall	br.call.sptk.few rp=ia64_do_signal.ret16:	// restore the switch stack (ptrace may have modified it)	DO_LOAD_SWITCH_STACK( )	br.ret.sptk.many rp#endif /* !CONFIG_IA64_NEW_UNWIND */END(handle_signal_delivery)GLOBAL_ENTRY(sys_rt_sigsuspend)#ifdef CONFIG_IA64_NEW_UNWIND	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)	alloc loc1=ar.pfs,8,2,3,0 // preserve all eight input regs in case of syscall restart!	mov r9=ar.unat	mov loc0=rp				// save return address	mov out0=in0				// mask	mov out1=in1				// sigsetsize	adds out2=0,sp				// out2=&sigscratch	;;	.fframe 16	.spillpsp ar.unat, 16			// (note that offset is relative to psp+0x10!)	st8 [sp]=r9,-16				// allocate space for ar.unat and save it	.body	br.call.sptk.few rp=ia64_rt_sigsuspend.ret17:	.restore sp	adds sp=16,sp				// pop scratch stack space	;;	ld8 r9=[sp]				// load new unat from sw->caller_unat	mov rp=loc0	;;	mov ar.unat=r9	mov ar.pfs=loc1	br.ret.sptk.many rp#else /* !CONFIG_IA64_NEW_UNWIND */	UNW(.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2))	alloc r16=ar.pfs,2,0,3,0	DO_SAVE_SWITCH_STACK	UNW(.body)	mov out0=in0				// mask	mov out1=in1				// sigsetsize	adds out2=16,sp				// out1=&sigscratch	br.call.sptk.many rp=ia64_rt_sigsuspend.ret18:	// restore the switch stack (ptrace may have modified it)	DO_LOAD_SWITCH_STACK( )	br.ret.sptk.many rp#endif /* !CONFIG_IA64_NEW_UNWIND */END(sys_rt_sigsuspend)ENTRY(sys_rt_sigreturn)#ifdef CONFIG_IA64_NEW_UNWIND	.regstk 0,0,3,0	// inherited from gate.s:invoke_sighandler()	PT_REGS_UNWIND_INFO(0)	.prologue	PT_REGS_SAVES(16)	adds sp=-16,sp	.body	cmp.eq pNonSys,p0=r0,r0			// sigreturn isn't a normal syscall...	;;	adds out0=16,sp				// out0 = &sigscratch	br.call.sptk.few rp=ia64_rt_sigreturn.ret19:	adds sp=16,sp		// doesn't drop pt_regs, so don't mark it as restoring sp!	PT_REGS_UNWIND_INFO(0)	// instead, create a new body section with the smaller frame	;;	ld8 r9=[sp]				// load new ar.unat	mov b7=r8	;;	mov ar.unat=r9	br b7#else /* !CONFIG_IA64_NEW_UNWIND */	.regstk 0,0,3,0	// inherited from gate.s:invoke_sighandler()	PT_REGS_UNWIND_INFO(0)	UNW(.prologue)	UNW(.fframe IA64_PT_REGS_SIZE+IA64_SWITCH_STACK_SIZE)	UNW(.spillsp rp, PT(CR_IIP)+IA64_SWITCH_STACK_SIZE)	UNW(.spillsp ar.pfs, PT(CR_IFS)+IA64_SWITCH_STACK_SIZE)	UNW(.spillsp ar.unat, PT(AR_UNAT)+IA64_SWITCH_STACK_SIZE)	UNW(.spillsp pr, PT(PR)+IA64_SWITCH_STACK_SIZE)	adds sp=-IA64_SWITCH_STACK_SIZE,sp	cmp.eq pNonSys,p0=r0,r0			// sigreturn isn't a normal syscall...	;;	UNW(.body)	adds out0=16,sp				// out0 = &sigscratch	br.call.sptk.few rp=ia64_rt_sigreturn.ret20:	adds r3=IA64_SWITCH_STACK_CALLER_UNAT_OFFSET+16,sp	;;	ld8 r9=[r3]			// load new ar.unat	mov b7=r8	;;	PT_REGS_UNWIND_INFO(0)	adds sp=IA64_SWITCH_STACK_SIZE,sp	// drop (dummy) switch-stack frame	mov ar.unat=r9	br b7#endif /* !CONFIG_IA64_NEW_UNWIND */END(sys_rt_sigreturn)GLOBAL_ENTRY(ia64_prepare_handle_unaligned)	//	// r16 = fake ar.pfs, we simply need to make sure 	// privilege is still 0	//	PT_REGS_UNWIND_INFO(0)	mov r16=r0 					UNW(.prologue)	DO_SAVE_SWITCH_STACK	br.call.sptk.few rp=ia64_handle_unaligned // stack frame setup in ivt.ret21:	.body	DO_LOAD_SWITCH_STACK(PT_REGS_UNWIND_INFO(0))	br.cond.sptk.many rp			  // goes to ia64_leave_kernelEND(ia64_prepare_handle_unaligned)#ifdef CONFIG_IA64_NEW_UNWIND	//	// unw_init_running(void (*callback)(info, arg), void *arg)	//#	define EXTRA_FRAME_SIZE	((UNW_FRAME_INFO_SIZE+15)&~15)GLOBAL_ENTRY(unw_init_running)	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2)	alloc loc1=ar.pfs,2,3,3,0	;;	ld8 loc2=[in0],8	mov loc0=rp	mov r16=loc1	DO_SAVE_SWITCH_STACK	.body	.prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2)	.fframe IA64_SWITCH_STACK_SIZE+EXTRA_FRAME_SIZE	SWITCH_STACK_SAVES(EXTRA_FRAME_SIZE)	adds sp=-EXTRA_FRAME_SIZE,sp	.body	;;	adds out0=16,sp				// &info	mov out1=r13				// current	adds out2=16+EXTRA_FRAME_SIZE,sp	// &switch_stack	br.call.sptk.few rp=unw_init_frame_info1:	adds out0=16,sp				// &info	mov b6=loc2	mov loc2=gp				// save gp across indirect function call	;;	ld8 gp=[in0]	mov out1=in1				// arg	br.call.sptk.few rp=b6			// invoke the callback function1:	mov gp=loc2				// restore gp	// For now, we don't allow changing registers from within	// unw_init_running; if we ever want to allow that, we'd	// have to do a load_switch_stack here:	.restore sp	adds sp=IA64_SWITCH_STACK_SIZE+EXTRA_FRAME_SIZE,sp	mov ar.pfs=loc1	mov rp=loc0	br.ret.sptk.many rpEND(unw_init_running)#endif	.rodata	.align 8	.globl sys_call_tablesys_call_table:	data8 sys_ni_syscall		//  This must be sys_ni_syscall!  See ivt.S.	data8 sys_exit				// 1025	data8 sys_read	data8 sys_write	data8 sys_open	data8 sys_close	data8 sys_creat				// 1030	data8 sys_link	data8 sys_unlink	data8 ia64_execve	data8 sys_chdir	data8 sys_fchdir			// 1035	data8 sys_utimes	data8 sys_mknod	data8 sys_chmod	data8 sys_chown	data8 sys_lseek				// 1040	data8 sys_getpid	data8 sys_getppid	data8 sys_mount	data8 sys_umount	data8 sys_setuid			// 1045	data8 sys_getuid	data8 sys_geteuid	data8 sys_ptrace	data8 sys_access	data8 sys_sync				// 1050	data8 sys_fsync	data8 sys_fdatasync	data8 sys_kill	data8 sys_rename	data8 sys_mkdir				// 1055	data8 sys_rmdir	data8 sys_dup	data8 sys_pipe	data8 sys_times	data8 ia64_brk				// 1060	data8 sys_setgid	data8 sys_getgid	data8 sys_getegid	data8 sys_acct	data8 sys_ioctl				// 1065	data8 sys_fcntl	data8 sys_umask	data8 sys_chroot	data8 sys_ustat	data8 sys_dup2				// 1070	data8 sys_setreuid	data8 sys_setregid	data8 sys_getresuid	data8 sys_setresuid	data8 sys_getresgid			// 1075	data8 sys_setresgid	data8 sys_getgroups	data8 sys_setgroups	data8 sys_getpgid	data8 sys_setpgid			// 1080	data8 sys_setsid	data8 sys_getsid	data8 sys_sethostname	data8 sys_setrlimit	data8 sys_getrlimit			// 1085	data8 sys_getrusage	data8 sys_gettimeofday	data8 sys_settimeofday	data8 sys_select	data8 sys_poll				// 1090	data8 sys_symlink	data8 sys_readlink	data8 sys_uselib	data8 sys_swapon	data8 sys_swapoff			// 1095	data8 sys_reboot	data8 sys_truncate	data8 sys_ftruncate	data8 sys_fchmod	data8 sys_fchown			// 1100	data8 ia64_getpriority	data8 sys_setpriority	data8 sys_statfs	data8 sys_fstatfs	data8 ia64_ni_syscall			// 1105	data8 sys_semget	data8 sys_semop	data8 sys_semctl	data8 sys_msgget	data8 sys_msgsnd			// 1110	data8 sys_msgrcv	data8 sys_msgctl	data8 sys_shmget	data8 ia64_shmat	data8 sys_shmdt				// 1115	data8 sys_shmctl	data8 sys_syslog	data8 sys_setitimer	data8 sys_getitimer	data8 ia64_oldstat			// 1120	data8 ia64_oldlstat	data8 ia64_oldfstat	data8 sys_vhangup	data8 sys_lchown	data8 sys_vm86				// 1125	data8 sys_wait4	data8 sys_sysinfo	data8 sys_clone	data8 sys_setdomainname	data8 sys_newuname			// 1130	data8 sys_adjtimex	data8 ia64_create_module	data8 sys_init_module	data8 sys_delete_module	data8 sys_get_kernel_syms		// 1135	data8 sys_query_module	data8 sys_quotactl	data8 sys_bdflush	data8 sys_sysfs	data8 sys_personality			// 1140	data8 ia64_ni_syscall		// sys_afs_syscall	data8 sys_setfsuid	data8 sys_setfsgid	data8 sys_getdents	data8 sys_flock				// 1145	data8 sys_readv	data8 sys_writev	data8 sys_pread	data8 sys_pwrite	data8 sys_sysctl			// 1150	data8 sys_mmap	data8 sys_munmap	data8 sys_mlock	data8 sys_mlockall	data8 sys_mprotect			// 1155	data8 sys_mremap	data8 sys_msync	data8 sys_munlock	data8 sys_munlockall	data8 sys_sched_getparam		// 1160	data8 sys_sched_setparam	data8 sys_sched_getscheduler	data8 sys_sched_setscheduler	data8 sys_sched_yield	data8 sys_sched_get_priority_max	// 1165	data8 sys_sched_get_priority_min	data8 sys_sched_rr_get_interval	data8 sys_nanosleep	data8 sys_nfsservctl	data8 sys_prctl				// 1170	data8 sys_getpagesize	data8 sys_mmap2	data8 sys_pciconfig_read	data8 sys_pciconfig_write	data8 sys_perfmonctl			// 1175	data8 sys_sigaltstack	data8 sys_rt_sigaction	data8 sys_rt_sigpending	data8 sys_rt_sigprocmask	data8 sys_rt_sigqueueinfo		// 1180	data8 sys_rt_sigreturn	data8 sys_rt_sigsuspend	data8 sys_rt_sigtimedwait	data8 sys_getcwd	data8 sys_capget			// 1185	data8 sys_capset	data8 sys_sendfile	data8 sys_ni_syscall		// sys_getpmsg (STREAMS)	data8 sys_ni_syscall		// sys_putpmsg (STREAMS)	data8 sys_socket			// 1190	data8 sys_bind	data8 sys_connect	data8 sys_listen	data8 sys_accept	data8 sys_getsockname			// 1195	data8 sys_getpeername	data8 sys_socketpair 	data8 sys_send	data8 sys_sendto	data8 sys_recv				// 1200	data8 sys_recvfrom	data8 sys_shutdown	data8 sys_setsockopt	data8 sys_getsockopt	data8 sys_sendmsg			// 1205	data8 sys_recvmsg	data8 sys_pivot_root	data8 sys_mincore	data8 sys_madvise	data8 sys_newstat			// 1210	data8 sys_newlstat	data8 sys_newfstat	data8 sys_clone2	data8 sys_getdents64	data8 ia64_ni_syscall			// 1215	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1220	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1225	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1230	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1235	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1240	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1245	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1250	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1255	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1260	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1265	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1270	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall			// 1275	data8 ia64_ni_syscall	data8 ia64_ni_syscall	data8 ia64_ni_syscall

⌨️ 快捷键说明

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