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

📄 entry.s

📁 ARM 嵌入式 系统 设计与实例开发 实验教材 二源码
💻 S
📖 第 1 页 / 共 3 页
字号:
	movs.w	-8192,$r9		; THREAD_SIZE == 8192	and.d	$sp, $r9	move.d	[$r9+LTASK_PID], $r10	; current->pid as arg1.	moveq	5, $r11			; SIGTRAP as arg2.	jsr	sys_kill       	jump	ret_from_intr		; Use the return routine for interrupts.gdb_handle_breakpoint:		push	$dccr	push	$r0#ifdef CONFIG_ETRAX_KGDB	move	$dccr, $r0		; U-flag not affected by previous insns. 	btstq	8, $r0			; Test the U-flag.	bmi	_ugdb_handle_breakpoint	; Go to user mode debugging. 	nop				; Empty delay slot (cannot pop r0 here). 	pop	$r0			; Restore r0.	ba	kgdb_handle_breakpoint	; Go to kernel debugging. 	pop	$dccr			; Restore dccr in delay slot.#endif	_ugdb_handle_breakpoint:		move	$brp, $r0		; Use r0 temporarily for calculation.	subq	2, $r0			; Set to address of previous instruction.	move	$r0, $brp	pop	$r0			; Restore r0. 	ba	do_sigtrap		; SIGTRAP the offending process. 	pop	$dccr			; Restore dccr in delay slot.		.datahw_bp_trigs:	.space 64*4hw_bp_trig_ptr:	.dword hw_bp_trigs/* * This is the mechanism for creating a new kernel thread. * * NOTE! Only a kernel-only process (i.e. the swapper or direct descendants * who haven't done an "execve()") should use this: it will work within * a system call from a "real" process, but the process memory space will * not be free'd until both the parent and the child have exited. * * This *can* be done in C with an single-asm-wrapped-in-a-function, but you * get more or less gross code.  The safer you make the asm-constraints, * the grosser the code, at least with the gcc version in cris-dist-1.13. *//* int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) *//*                   r10                r11         r12  */	.text	.global kernel_threadkernel_thread:	/* Save ARG for later.  */	move.d $r11, $r13	/* r11 is argument 2 to clone, the flags */	move.d  $r12, $r11	or.w	LCLONE_VM, $r11	/* Save FN for later.  */	move.d	$r10, $r12	/* r9 contains syscall number, to sys_clone */	movu.w	__NR_clone, $r9	/* r10 is argument 1 to clone */	clear.d	$r10		/* call sys_clone, this will fork */	break	13	/* parent or child? child returns 0 here. */	test.d	$r10	/* jump if parent */	bne	1f	nop              /* delay slot */	/* set argument to function to call */	move.d	$r13, $r10	/* call specified function */	jsr	$r12	/* If we ever return from the function, something bad has happened.  */	/* r9 is sys_exit syscall number */	movu.w	__NR_exit, $r9	/* Give a really bad exit-value */	moveq	-1, $r10	/* call sys_exit, killing the child */	break	131:	ret	nop              /* delay slot */	.section .rodata,"a"sys_call_table:		.long SYMBOL_NAME(sys_ni_syscall)	/* 0  -  old "setup()" system call*/	.long SYMBOL_NAME(sys_exit)	.long SYMBOL_NAME(sys_fork)	.long SYMBOL_NAME(sys_read)	.long SYMBOL_NAME(sys_write)	.long SYMBOL_NAME(sys_open)		/* 5 */	.long SYMBOL_NAME(sys_close)	.long SYMBOL_NAME(sys_waitpid)	.long SYMBOL_NAME(sys_creat)	.long SYMBOL_NAME(sys_link)	.long SYMBOL_NAME(sys_unlink)		/* 10 */	.long SYMBOL_NAME(sys_execve)	.long SYMBOL_NAME(sys_chdir)	.long SYMBOL_NAME(sys_time)	.long SYMBOL_NAME(sys_mknod)	.long SYMBOL_NAME(sys_chmod)		/* 15 */	.long SYMBOL_NAME(sys_lchown16)	.long SYMBOL_NAME(sys_ni_syscall)	/* old break syscall holder */	.long SYMBOL_NAME(sys_stat)	.long SYMBOL_NAME(sys_lseek)	.long SYMBOL_NAME(sys_getpid)		/* 20 */	.long SYMBOL_NAME(sys_mount)	.long SYMBOL_NAME(sys_oldumount)	.long SYMBOL_NAME(sys_setuid16)	.long SYMBOL_NAME(sys_getuid16)	.long SYMBOL_NAME(sys_stime)		/* 25 */	.long SYMBOL_NAME(sys_ptrace)	.long SYMBOL_NAME(sys_alarm)	.long SYMBOL_NAME(sys_fstat)	.long SYMBOL_NAME(sys_pause)	.long SYMBOL_NAME(sys_utime)		/* 30 */	.long SYMBOL_NAME(sys_ni_syscall)	/* old stty syscall holder */	.long SYMBOL_NAME(sys_ni_syscall)	/* old gtty syscall holder */	.long SYMBOL_NAME(sys_access)	.long SYMBOL_NAME(sys_nice)	.long SYMBOL_NAME(sys_ni_syscall)	/* 35  old ftime syscall holder */	.long SYMBOL_NAME(sys_sync)	.long SYMBOL_NAME(sys_kill)	.long SYMBOL_NAME(sys_rename)	.long SYMBOL_NAME(sys_mkdir)	.long SYMBOL_NAME(sys_rmdir)		/* 40 */	.long SYMBOL_NAME(sys_dup)	.long SYMBOL_NAME(sys_pipe)	.long SYMBOL_NAME(sys_times)	.long SYMBOL_NAME(sys_ni_syscall)	/* old prof syscall holder */	.long SYMBOL_NAME(sys_brk)		/* 45 */	.long SYMBOL_NAME(sys_setgid16)	.long SYMBOL_NAME(sys_getgid16)	.long SYMBOL_NAME(sys_signal)	.long SYMBOL_NAME(sys_geteuid16)	.long SYMBOL_NAME(sys_getegid16)	/* 50 */	.long SYMBOL_NAME(sys_acct)	.long SYMBOL_NAME(sys_umount)		/* recycled never used phys() */	.long SYMBOL_NAME(sys_ni_syscall)	/* old lock syscall holder */	.long SYMBOL_NAME(sys_ioctl)	.long SYMBOL_NAME(sys_fcntl)		/* 55 */	.long SYMBOL_NAME(sys_ni_syscall)	/* old mpx syscall holder */	.long SYMBOL_NAME(sys_setpgid)	.long SYMBOL_NAME(sys_ni_syscall)	/* old ulimit syscall holder */	.long SYMBOL_NAME(sys_ni_syscall)       /* old sys_olduname holder */	.long SYMBOL_NAME(sys_umask)		/* 60 */	.long SYMBOL_NAME(sys_chroot)	.long SYMBOL_NAME(sys_ustat)	.long SYMBOL_NAME(sys_dup2)	.long SYMBOL_NAME(sys_getppid)	.long SYMBOL_NAME(sys_getpgrp)		/* 65 */	.long SYMBOL_NAME(sys_setsid)	.long SYMBOL_NAME(sys_sigaction)	.long SYMBOL_NAME(sys_sgetmask)	.long SYMBOL_NAME(sys_ssetmask)	.long SYMBOL_NAME(sys_setreuid16)	/* 70 */	.long SYMBOL_NAME(sys_setregid16)	.long SYMBOL_NAME(sys_sigsuspend)	.long SYMBOL_NAME(sys_sigpending)	.long SYMBOL_NAME(sys_sethostname)	.long SYMBOL_NAME(sys_setrlimit)	/* 75 */	.long SYMBOL_NAME(sys_old_getrlimit)	.long SYMBOL_NAME(sys_getrusage)	.long SYMBOL_NAME(sys_gettimeofday)	.long SYMBOL_NAME(sys_settimeofday)	.long SYMBOL_NAME(sys_getgroups16)	/* 80 */	.long SYMBOL_NAME(sys_setgroups16)	.long SYMBOL_NAME(sys_select)           /* was old_select in Linux/E100 */	.long SYMBOL_NAME(sys_symlink)	.long SYMBOL_NAME(sys_lstat)	.long SYMBOL_NAME(sys_readlink)		/* 85 */	.long SYMBOL_NAME(sys_uselib)	.long SYMBOL_NAME(sys_swapon)	.long SYMBOL_NAME(sys_reboot)	.long SYMBOL_NAME(old_readdir)	.long SYMBOL_NAME(old_mmap)		/* 90 */	.long SYMBOL_NAME(sys_munmap)	.long SYMBOL_NAME(sys_truncate)	.long SYMBOL_NAME(sys_ftruncate)	.long SYMBOL_NAME(sys_fchmod)	.long SYMBOL_NAME(sys_fchown16)		/* 95 */	.long SYMBOL_NAME(sys_getpriority)	.long SYMBOL_NAME(sys_setpriority)	.long SYMBOL_NAME(sys_ni_syscall)	/* old profil syscall holder */	.long SYMBOL_NAME(sys_statfs)	.long SYMBOL_NAME(sys_fstatfs)		/* 100 */	.long SYMBOL_NAME(sys_ni_syscall)       /* sys_ioperm in i386 */	.long SYMBOL_NAME(sys_socketcall)	.long SYMBOL_NAME(sys_syslog)	.long SYMBOL_NAME(sys_setitimer)	.long SYMBOL_NAME(sys_getitimer)	/* 105 */	.long SYMBOL_NAME(sys_newstat)	.long SYMBOL_NAME(sys_newlstat)	.long SYMBOL_NAME(sys_newfstat)	.long SYMBOL_NAME(sys_ni_syscall)	/* old sys_uname holder */	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_iopl in i386 */	.long SYMBOL_NAME(sys_vhangup)	.long SYMBOL_NAME(sys_ni_syscall)	/* old "idle" system call */	.long SYMBOL_NAME(sys_ni_syscall)	/* vm86old in i386 */	.long SYMBOL_NAME(sys_wait4)	.long SYMBOL_NAME(sys_swapoff)		/* 115 */	.long SYMBOL_NAME(sys_sysinfo)	.long SYMBOL_NAME(sys_ipc)	.long SYMBOL_NAME(sys_fsync)	.long SYMBOL_NAME(sys_sigreturn)	.long SYMBOL_NAME(sys_clone)		/* 120 */	.long SYMBOL_NAME(sys_setdomainname)	.long SYMBOL_NAME(sys_newuname)	.long SYMBOL_NAME(sys_ni_syscall)	/* TODO sys_modify_ldt - do something ?*/	.long SYMBOL_NAME(sys_adjtimex)	.long SYMBOL_NAME(sys_mprotect)		/* 125 */	.long SYMBOL_NAME(sys_sigprocmask)	.long SYMBOL_NAME(sys_create_module)	.long SYMBOL_NAME(sys_init_module)	.long SYMBOL_NAME(sys_delete_module)	.long SYMBOL_NAME(sys_get_kernel_syms)	/* 130 */	.long SYMBOL_NAME(sys_quotactl)	.long SYMBOL_NAME(sys_getpgid)	.long SYMBOL_NAME(sys_fchdir)	.long SYMBOL_NAME(sys_bdflush)	.long SYMBOL_NAME(sys_sysfs)		/* 135 */	.long SYMBOL_NAME(sys_personality)	.long SYMBOL_NAME(sys_ni_syscall)	/* for afs_syscall */	.long SYMBOL_NAME(sys_setfsuid16)	.long SYMBOL_NAME(sys_setfsgid16)	.long SYMBOL_NAME(sys_llseek)		/* 140 */	.long SYMBOL_NAME(sys_getdents)	.long SYMBOL_NAME(sys_select)	.long SYMBOL_NAME(sys_flock)	.long SYMBOL_NAME(sys_msync)	.long SYMBOL_NAME(sys_readv)		/* 145 */	.long SYMBOL_NAME(sys_writev)	.long SYMBOL_NAME(sys_getsid)	.long SYMBOL_NAME(sys_fdatasync)	.long SYMBOL_NAME(sys_sysctl)	.long SYMBOL_NAME(sys_mlock)		/* 150 */	.long SYMBOL_NAME(sys_munlock)	.long SYMBOL_NAME(sys_mlockall)	.long SYMBOL_NAME(sys_munlockall)	.long SYMBOL_NAME(sys_sched_setparam)	.long SYMBOL_NAME(sys_sched_getparam)   /* 155 */	.long SYMBOL_NAME(sys_sched_setscheduler)	.long SYMBOL_NAME(sys_sched_getscheduler)	.long SYMBOL_NAME(sys_sched_yield)	.long SYMBOL_NAME(sys_sched_get_priority_max)	.long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */	.long SYMBOL_NAME(sys_sched_rr_get_interval)	.long SYMBOL_NAME(sys_nanosleep)	.long SYMBOL_NAME(sys_mremap)	.long SYMBOL_NAME(sys_setresuid16)	.long SYMBOL_NAME(sys_getresuid16)	/* 165 */	.long SYMBOL_NAME(sys_ni_syscall)	/* sys_vm86 */	.long SYMBOL_NAME(sys_query_module)	.long SYMBOL_NAME(sys_poll)	.long SYMBOL_NAME(sys_nfsservctl)	.long SYMBOL_NAME(sys_setresgid16)	/* 170 */	.long SYMBOL_NAME(sys_getresgid16)	.long SYMBOL_NAME(sys_prctl)	.long SYMBOL_NAME(sys_rt_sigreturn)	.long SYMBOL_NAME(sys_rt_sigaction)	.long SYMBOL_NAME(sys_rt_sigprocmask)	/* 175 */	.long SYMBOL_NAME(sys_rt_sigpending)	.long SYMBOL_NAME(sys_rt_sigtimedwait)	.long SYMBOL_NAME(sys_rt_sigqueueinfo)	.long SYMBOL_NAME(sys_rt_sigsuspend)	.long SYMBOL_NAME(sys_pread)		/* 180 */	.long SYMBOL_NAME(sys_pwrite)	.long SYMBOL_NAME(sys_chown16)	.long SYMBOL_NAME(sys_getcwd)	.long SYMBOL_NAME(sys_capget)	.long SYMBOL_NAME(sys_capset)           /* 185 */	.long SYMBOL_NAME(sys_sigaltstack)	.long SYMBOL_NAME(sys_sendfile)	.long SYMBOL_NAME(sys_ni_syscall)	/* streams1 */	.long SYMBOL_NAME(sys_ni_syscall)	/* streams2 */	.long SYMBOL_NAME(sys_vfork)            /* 190 */	.long SYMBOL_NAME(sys_getrlimit)	.long SYMBOL_NAME(sys_mmap2)	.long SYMBOL_NAME(sys_truncate64)	.long SYMBOL_NAME(sys_ftruncate64)	.long SYMBOL_NAME(sys_stat64)		/* 195 */	.long SYMBOL_NAME(sys_lstat64)	.long SYMBOL_NAME(sys_fstat64)	.long SYMBOL_NAME(sys_lchown)	.long SYMBOL_NAME(sys_getuid)	.long SYMBOL_NAME(sys_getgid)		/* 200 */	.long SYMBOL_NAME(sys_geteuid)	.long SYMBOL_NAME(sys_getegid)	.long SYMBOL_NAME(sys_setreuid)	.long SYMBOL_NAME(sys_setregid)	.long SYMBOL_NAME(sys_getgroups)	/* 205 */	.long SYMBOL_NAME(sys_setgroups)	.long SYMBOL_NAME(sys_fchown)	.long SYMBOL_NAME(sys_setresuid)	.long SYMBOL_NAME(sys_getresuid)	.long SYMBOL_NAME(sys_setresgid)	/* 210 */	.long SYMBOL_NAME(sys_getresgid)	.long SYMBOL_NAME(sys_chown)	.long SYMBOL_NAME(sys_setuid)	.long SYMBOL_NAME(sys_setgid)	.long SYMBOL_NAME(sys_setfsuid)		/* 215 */	.long SYMBOL_NAME(sys_setfsgid)	.long SYMBOL_NAME(sys_pivot_root)	.long SYMBOL_NAME(sys_mincore)	.long SYMBOL_NAME(sys_madvise)	.long SYMBOL_NAME(sys_getdents64)       /* 220 */	.long SYMBOL_NAME(sys_fcntl64)	.long SYMBOL_NAME(sys_ni_syscall)	/* reserved for TUX */        .long SYMBOL_NAME(sys_ni_syscall)       /* Reserved for Security */        .long SYMBOL_NAME(sys_gettid)        .long SYMBOL_NAME(sys_readahead)        /* 225 */        /*         * NOTE!! This doesn't have to be exact - we just have         * to make sure we have _enough_ of the "sys_ni_syscall"         * entries. Don't panic if you notice that this hasn't         * been shrunk every time we add a new system call.         */	.rept NR_syscalls-(.-sys_call_table)/4		.long SYMBOL_NAME(sys_ni_syscall)	.endr	

⌨️ 快捷键说明

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