📄 entry.s
字号:
.spillsp ar.unat, 16 st8 [sp]=r9,-16 // allocate space for ar.unat and save it st8 [out2]=loc1,-8 // save ar.pfs, out2=&sigscratch .body br.call.sptk.many 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 rpEND(sys_rt_sigsuspend)ENTRY(sys_rt_sigreturn) PT_REGS_UNWIND_INFO(0) /* * Allocate 8 input registers since ptrace() may clobber them */ alloc r2=ar.pfs,8,0,1,0 .prologue PT_REGS_SAVES(16) adds sp=-16,sp .body cmp.eq pNonSys,pSys=r0,r0 // sigreturn isn't a normal syscall... ;; /* * leave_kernel() restores f6-f11 from pt_regs, but since the streamlined * syscall-entry path does not save them we save them here instead. Note: we * don't need to save any other registers that are not saved by the stream-lined * syscall path, because restore_sigcontext() restores them. */ adds r16=PT(F6)+32,sp adds r17=PT(F7)+32,sp ;; stf.spill [r16]=f6,32 stf.spill [r17]=f7,32 ;; stf.spill [r16]=f8,32 stf.spill [r17]=f9,32 ;; stf.spill [r16]=f10 stf.spill [r17]=f11 adds out0=16,sp // out0 = &sigscratch br.call.sptk.many rp=ia64_rt_sigreturn.ret19: .restore sp,0 adds sp=16,sp ;; ld8 r9=[sp] // load new ar.unat mov.sptk b7=r8,ia64_leave_kernel ;; mov ar.unat=r9 br.many b7END(sys_rt_sigreturn)#endifGLOBAL_ENTRY(ia64_prepare_handle_unaligned) .prologue /* * r16 = fake ar.pfs, we simply need to make sure privilege is still 0 */ mov r16=r0 DO_SAVE_SWITCH_STACK br.call.sptk.many rp=ia64_handle_unaligned // stack frame setup in ivt.ret21: .body DO_LOAD_SWITCH_STACK br.cond.sptk.many rp // goes to ia64_leave_kernelEND(ia64_prepare_handle_unaligned) // // 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.many 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.many 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)#ifdef XENGLOBAL_ENTRY(ia64_do_multicall_call) movl r2=ia64_hypercall_table;; shladd r2=r38,3,r2;; ld8 r2=[r2];; mov b6=r2 br.sptk.many b6;;END(ia64_do_multicall_call) .rodata .align 8 .globl ia64_hypercall_tableia64_hypercall_table: data8 do_ni_hypercall /* do_set_trap_table *//* 0 */ data8 do_ni_hypercall /* do_mmu_update */ data8 do_ni_hypercall /* do_set_gdt */ data8 do_ni_hypercall /* do_stack_switch */ data8 do_ni_hypercall /* do_set_callbacks */ data8 do_ni_hypercall /* do_fpu_taskswitch *//* 5 */ data8 do_sched_op_compat data8 do_ni_hypercall data8 do_ni_hypercall /* do_set_debugreg */ data8 do_ni_hypercall /* do_get_debugreg */ data8 do_ni_hypercall /* do_update_descriptor * 10 */ data8 do_ni_hypercall /* do_ni_hypercall */ data8 do_memory_op data8 do_multicall data8 do_ni_hypercall /* do_update_va_mapping */ data8 do_ni_hypercall /* do_set_timer_op */ /* 15 */ data8 do_ni_hypercall data8 do_xen_version data8 do_console_io data8 do_ni_hypercall data8 do_grant_table_op /* 20 */ data8 do_ni_hypercall /* do_vm_assist */ data8 do_ni_hypercall /* do_update_va_mapping_othe */ data8 do_ni_hypercall /* (x86 only) */ data8 do_vcpu_op /* do_vcpu_op */ data8 do_ni_hypercall /* (x86_64 only) */ /* 25 */ data8 do_ni_hypercall /* do_mmuext_op */ data8 do_ni_hypercall /* do_acm_op */ data8 do_ni_hypercall /* do_nmi_op */ data8 do_sched_op data8 do_callback_op /* */ /* 30 */ data8 do_xenoprof_op /* */ data8 do_event_channel_op data8 do_physdev_op data8 do_hvm_op /* */ data8 do_sysctl /* */ /* 35 */ data8 do_domctl /* */ data8 do_kexec_op /* */ data8 do_ni_hypercall /* */ data8 do_ni_hypercall /* */ data8 do_ni_hypercall /* */ /* 40 */ data8 do_ni_hypercall /* */ data8 do_ni_hypercall /* */ data8 do_ni_hypercall /* */ data8 do_ni_hypercall /* */ data8 do_ni_hypercall /* */ /* 45 */ data8 do_ni_hypercall /* */ data8 do_ni_hypercall /* */ data8 do_dom0vp_op /* dom0vp_op */ data8 do_pirq_guest_eoi /* arch_1 */ data8 do_ia64_debug_op /* arch_2 */ /* 50 */ data8 do_ni_hypercall /* arch_3 */ data8 do_ni_hypercall /* arch_4 */ data8 do_ni_hypercall /* arch_5 */ data8 do_ni_hypercall /* arch_6 */ data8 do_ni_hypercall /* arch_7 */ /* 55 */ data8 do_ni_hypercall data8 do_ni_hypercall data8 do_ni_hypercall data8 do_ni_hypercall data8 do_ni_hypercall /* 60 */ data8 do_ni_hypercall data8 do_ni_hypercall data8 do_ni_hypercall // guard against failures to increase NR_hypercalls .org ia64_hypercall_table + 8*NR_hypercalls#else .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 sys_gettid // 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 sys_shmat data8 sys_shmdt // 1115 data8 sys_shmctl data8 sys_syslog data8 sys_setitimer data8 sys_getitimer data8 sys_ni_syscall // 1120 /* was: ia64_oldstat */ data8 sys_ni_syscall /* was: ia64_oldlstat */ data8 sys_ni_syscall /* was: ia64_oldfstat */ data8 sys_vhangup data8 sys_lchown data8 sys_remap_file_pages // 1125 data8 sys_wait4 data8 sys_sysinfo data8 sys_clone data8 sys_setdomainname data8 sys_newuname // 1130 data8 sys_adjtimex data8 sys_ni_syscall /* was: ia64_create_module */ data8 sys_init_module data8 sys_delete_module data8 sys_ni_syscall // 1135 /* was: sys_get_kernel_syms */ data8 sys_ni_syscall /* was: sys_query_module */ data8 sys_quotactl data8 sys_bdflush data8 sys_sysfs data8 sys_personality // 1140 data8 sys_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_pread64 data8 sys_pwrite64 data8 sys_sysctl // 1150 data8 sys_mmap data8 sys_munmap data8 sys_mlock data8 sys_mlockall data8 sys_mprotect // 1155 data8 ia64_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_sendfile64 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 sys_getunwind // 1215 data8 sys_readahead data8 sys_setxattr data8 sys_lsetxattr data8 sys_fsetxattr data8 sys_getxattr // 1220 data8 sys_lgetxattr data8 sys_fgetxattr data8 sys_listxattr data8 sys_llistxattr data8 sys_flistxattr // 1225 data8 sys_removexattr data8 sys_lremovexattr data8 sys_fremovexattr data8 sys_tkill data8 sys_futex // 1230 data8 sys_sched_setaffinity data8 sys_sched_getaffinity data8 sys_set_tid_address data8 sys_fadvise64_64 data8 sys_tgkill // 1235 data8 sys_exit_group data8 sys_lookup_dcookie data8 sys_io_setup data8 sys_io_destroy data8 sys_io_getevents // 1240 data8 sys_io_submit data8 sys_io_cancel data8 sys_epoll_create data8 sys_epoll_ctl data8 sys_epoll_wait // 1245 data8 sys_restart_syscall data8 sys_semtimedop data8 sys_timer_create data8 sys_timer_settime data8 sys_timer_gettime // 1250 data8 sys_timer_getoverrun data8 sys_timer_delete data8 sys_clock_settime data8 sys_clock_gettime data8 sys_clock_getres // 1255 data8 sys_clock_nanosleep data8 sys_fstatfs64 data8 sys_statfs64 data8 sys_mbind data8 sys_get_mempolicy // 1260 data8 sys_set_mempolicy data8 sys_mq_open data8 sys_mq_unlink data8 sys_mq_timedsend data8 sys_mq_timedreceive // 1265 data8 sys_mq_notify data8 sys_mq_getsetattr data8 sys_ni_syscall // reserved for kexec_load data8 sys_ni_syscall // reserved for vserver data8 sys_waitid // 1270 data8 sys_add_key data8 sys_request_key data8 sys_keyctl data8 sys_ioprio_set data8 sys_ioprio_get // 1275 data8 sys_ni_syscall data8 sys_inotify_init data8 sys_inotify_add_watch data8 sys_inotify_rm_watch .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -