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

📄 entry.s

📁 linux-2.4.29操作系统的源码
💻 S
📖 第 1 页 / 共 3 页
字号:
	mov	r0, r1	shll	r0	bf/s	1f	 shll	r0	bf/s	1f	 mov	#OFF_PC, r0	! 				  SP >= 0xc0000000 : gUSA mark	mov.l	@(r0,r15), r2		! get user space PC (program counter)	mov.l	@(OFF_R0,r15), r3	! end point	cmp/hs	r3, r2			! r2 >= r3? 	bt	1f	add	r3, r1			! rewind point #2	mov.l	r1, @(r0,r15)		! reset PC to rewind point #2	!1:	mov.l	2f, r1	mova	SYMBOL_NAME(ret_from_syscall), r0	jmp	@r1	 lds	r0, pr	.align	22:	.long	SYMBOL_NAME(schedule)ret_from_irq:ret_from_exception:	mov	#OFF_SR, r0	mov.l	@(r0,r15), r0	! get status register	shll	r0	shll	r0		! kernel space?	bt	restore_all	! Yes, it's from kernel, go back soon	!	bra	ret_from_syscall	 mov	#0, r8		! indicate it's *not* syscall return	.align 2syscall_ret:	mov.l	r0, @(OFF_R0,r15)	! save the return value	/* fall through */ENTRY(ret_from_syscall)	/* CLI */	stc	sr, r0	or	#0xf0, r0	ldc	r0, sr	!	stc	k_current, r1	mov.l	@(need_resched,r1), r0	tst	r0, r0	bf	reschedule	mov.l	@(sigpending,r1), r0	tst	r0, r0	bt	restore_allsignal_return:	mov.l	__do_signal, r1	mov	r15, r4	mov	#0, r5	mov	r8, r6	mov	r9, r7	mova	restore_all, r0	jmp	@r1	 lds	r0, pr	.align	2__do_signal:	.long	SYMBOL_NAME(do_signal)__irq_stat:	.long	SYMBOL_NAME(irq_stat)	.align 2restore_all:	mov.l	@r15+, r0	mov.l	@r15+, r1	mov.l	@r15+, r2	mov.l	@r15+, r3	mov.l	@r15+, r4	mov.l	@r15+, r5	mov.l	@r15+, r6	mov.l	@r15+, r7	!	stc	sr, r8	mov.l	__blrb_flags, r9	! BL =1, RB=1	or	r9, r8	ldc	r8, sr			! here, change the register bank	!	mov.l	@r15+, r8	mov.l	@r15+, r9	mov.l	@r15+, r10	mov.l	@r15+, r11	mov.l	@r15+, r12	mov.l	@r15+, r13	mov.l	@r15+, r14	mov.l	@r15+, k4		! original stack pointer	ldc.l	@r15+, spc	lds.l	@r15+, pr	mov.l	@r15+, k3		! original SR	ldc.l	@r15+, gbr	lds.l	@r15+, mach	lds.l	@r15+, macl #ifdef CONFIG_SH_DSP	mov.l	@r15+, k0		! DSP mode marker	mov.l	5f, k1	cmp/eq	k0, k1			! Do we have a DSP stack frame?	bf	skip_restore	stc	sr, k0			! Enable CPU DSP mode	or	k1, k0			! (within kernel it may be disabled)	ldc	k0, sr	mov	r2, k0			! Backup r2	! Restore DSP registers from stack	mov	r15, r2	movs.l	@r2+, a1	movs.l	@r2+, a0g	movs.l	@r2+, a1g	movs.l	@r2+, m0	movs.l	@r2+, m1	mov	r2, r15	lds.l	@r15+, a0	lds.l	@r15+, x0	lds.l	@r15+, x1	lds.l	@r15+, y0	lds.l	@r15+, y1	lds.l	@r15+, dsr	ldc.l	@r15+, rs	ldc.l	@r15+, re	ldc.l	@r15+, mod	mov	k0, r2			! Restore r2skip_restore:#endif	!	!	! Calculate new SR value	mov	k3, k2			! original SR value	mov.l	1f, k1	stc	sr, k0	and	k1, k0			! Get current FD-bit	mov.l	2f, k1	and	k1, k2			! Mask orignal SR value	or	k0, k2			! Inherit current FD-bit	!	mov	k3, k0			! Calculate IMASK-bits	shlr2	k0	and	#0x3c, k0	cmp/eq	#0x3c, k0	bt/s	7f	 shll2	k0	mov	g_imask, k0	!7:	or	k0, k2			! Set the IMASK-bits	ldc	k2, ssr	!#if defined(CONFIG_KGDB_NMI)	! Clear in_nmi	mov.l	4f, k0	mov	#0, k1	mov.b	k1, @k0#endif	mov.l	@r15+, k2		! restore EXPEVT	mov	k4, r15	rte	 nop	.align	2__blrb_flags:	.long	0x300000001:	.long	0x00008000	! FD2:	.long	0xffff7f0f	! ~(IMASK+FD)3:	.long	0x00080000	! SZ=0, PR=1#if defined(CONFIG_KGDB_NMI)4:	.long	SYMBOL_NAME(in_nmi)#endif5:	.long	0x00001000	! DSP! Exception Vector Base!!	Should be aligned page boundary.!	.balign 	4096,0,4096ENTRY(vbr_base)	.long	0!	.balign 	256,0,256general_exception:	mov.l	1f, k2	mov.l	2f, k3	bra	handle_exception	 mov.l	@k2, k2	.align	22:	.long	ret_from_exception1:	.long	EXPEVT!!	.balign 	1024,0,1024tlb_miss:	mov.l	1f, k2	mov.l	4f, k3	bra	handle_exception	 mov.l	@k2, k2!	.balign 	512,0,512interrupt:	mov.l	2f, k2	mov.l	3f, k3#if defined(CONFIG_KGDB_NMI)	! Debounce (filter nested NMI)	mov.l	@k2, k0	mov.l	5f, k1	cmp/eq	k1, k0	bf	0f	mov.l	6f, k1	tas.b	@k1	bt	0f	rte	 nop	.align	25:	.long	NMI_VEC6:	.long	SYMBOL_NAME(in_nmi)0:#endif /* defined(CONFIG_KGDB_NMI) */	bra	handle_exception	 mov.l	@k2, k2	.align	21:	.long	EXPEVT2:	.long	INTEVT3:	.long	ret_from_irq4:	.long	ret_from_exception!!handle_exception:	! Using k0, k1 for scratch registers (r0_bank1, r1_bank),	! save all registers onto stack.	!	stc	ssr, k0		! Is it from kernel space?	shll	k0		! Check MD bit (bit30) by shifting it into...	shll	k0		!       ...the T bit	bt/s	9f		! It's a kernel to kernel transition.	 mov	r15, k0		! save original stack to k0	/* User space to kernel */	mov	#0x20, k1	shll8	k1		! k1 <= 8192 == THREAD_SIZE	add	current, k1	mov	k1, r15		! change to kernel stack	!9:	mov.l	3f, k1	!#ifdef CONFIG_SH_DSP	mov.l	r2, @-r15		! Save r2, we need another reg	stc	sr, k4	mov.l	4f, r2	tst	r2, k4			! Check if in DSP mode	mov.l	@r15+, r2		! Restore r2 now	bt/s	skip_save	 mov	#0, k4			! Set marker for no stack frame	mov	r2, k4			! Backup r2 (in k4) for later	! Save DSP registers on stack	stc.l	mod, @-r15	stc.l	re, @-r15	stc.l	rs, @-r15	sts.l	dsr, @-r15	sts.l	y1, @-r15	sts.l	y0, @-r15	sts.l	x1, @-r15	sts.l	x0, @-r15	sts.l	a0, @-r15	mov     r15, r2	movs.l	a1, @-r2	movs.l	a0g, @-r2	movs.l	a1g, @-r2	movs.l	m0, @-r2	movs.l	m1, @-r2	mov	r2, r15	mov	k4, r2			! Restore r2	mov.l	4f, k4			! Force DSP stack frameskip_save:	mov.l	k4, @-r15		! Push DSP mode marker onto stack#endif	! Save the user registers on the stack.	mov.l	k2, @-r15	! EXPEVT	!	sts.l	macl, @-r15	sts.l	mach, @-r15	stc.l	gbr, @-r15	stc.l	ssr, @-r15	sts.l	pr, @-r15	stc.l	spc, @-r15	!	lds	k3, pr		! Set the return address to pr	!	mov.l	k0, @-r15	! save orignal stack	mov.l	r14, @-r15	mov.l	r13, @-r15	mov.l	r12, @-r15	mov.l	r11, @-r15	mov.l	r10, @-r15	mov.l	r9, @-r15	mov.l	r8, @-r15	!	stc	sr, r8		! Back to normal register bank, and	or	k1, r8		! Block all interrupts	mov.l	5f, k1	and	k1, r8		! ...	ldc	r8, sr		! ...changed here.	!	mov.l	r7, @-r15	mov.l	r6, @-r15	mov.l	r5, @-r15	mov.l	r4, @-r15	mov.l	r3, @-r15	mov.l	r2, @-r15	mov.l	r1, @-r15	mov.l	r0, @-r15	! Then, dispatch to the handler, according to the exception code.	stc	k_ex_code, r8	shlr2	r8	shlr	r8	mov.l	1f, r9	add	r8, r9	mov.l	@r9, r9	jmp	@r9	 nop	.align	21:	.long	SYMBOL_NAME(exception_handling_table)3:	.long	0x000000f0	! FD=0, IMASK=154:	.long	0x00001000	! DSP bit set5:	.long	0xcfffffff	! RB=0, BL=06:	.long	0x00080000	! SZ=0, PR=1none:	rts	 nop.dataENTRY(exception_handling_table)	.long	error	.long	error	.long	tlb_miss_load	.long	tlb_miss_store	.long	initial_page_write	.long	tlb_protection_violation_load	.long	tlb_protection_violation_store	.long	address_error_load	.long	address_error_store#if defined(__SH4__)	.long	SYMBOL_NAME(do_fpu_error)#else	.long	error	! fpu_exception#endif	.long	error	.long	system_call			! Unconditional Trap	.long	error	! reserved_instruction      (filled by trap_init)	.long	error	! illegal_slot_instruction  (filled by trap_init)ENTRY(nmi_slot)#if defined (CONFIG_KGDB_NMI)	.long	debug_enter			! Allow trap to debugger#else	.long	none				! Not implemented yet#endifENTRY(user_break_point_trap)	.long	break_point_trapENTRY(interrupt_table)	! external hardware	.long	SYMBOL_NAME(do_IRQ)	! 0000	.long	SYMBOL_NAME(do_IRQ)	! 0001	.long	SYMBOL_NAME(do_IRQ)	! 0010	.long	SYMBOL_NAME(do_IRQ)	! 0011	.long	SYMBOL_NAME(do_IRQ)	! 0100	.long	SYMBOL_NAME(do_IRQ)	! 0101	.long	SYMBOL_NAME(do_IRQ)	! 0110	.long	SYMBOL_NAME(do_IRQ)	! 0111	.long	SYMBOL_NAME(do_IRQ)	! 1000	.long	SYMBOL_NAME(do_IRQ)	! 1001	.long	SYMBOL_NAME(do_IRQ)	! 1010	.long	SYMBOL_NAME(do_IRQ)	! 1011	.long	SYMBOL_NAME(do_IRQ)	! 1100	.long	SYMBOL_NAME(do_IRQ)	! 1101	.long	SYMBOL_NAME(do_IRQ)	! 1110	.long	error	! Internal hardware	.long	SYMBOL_NAME(do_IRQ)	! TMU0 tuni0	.long	SYMBOL_NAME(do_IRQ)	! TMU1 tuni1	.long	SYMBOL_NAME(do_IRQ)	! TMU2 tuni2	.long	SYMBOL_NAME(do_IRQ)	!      ticpi2	.long	SYMBOL_NAME(do_IRQ)	! RTC  ati	.long	SYMBOL_NAME(do_IRQ)	!      pri	.long	SYMBOL_NAME(do_IRQ)	!      cui	.long	SYMBOL_NAME(do_IRQ)	! SCI  eri	.long	SYMBOL_NAME(do_IRQ)	!      rxi	.long	SYMBOL_NAME(do_IRQ)	!      txi	.long	SYMBOL_NAME(do_IRQ)	!      tei	.long	SYMBOL_NAME(do_IRQ)	! WDT  iti	.long	SYMBOL_NAME(do_IRQ)	! REF  rcmi	.long	SYMBOL_NAME(do_IRQ)	!      rovi	.long	SYMBOL_NAME(do_IRQ)	.long	SYMBOL_NAME(do_IRQ)#if defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7707) || \    defined(CONFIG_CPU_SUBTYPE_SH7709)	.long	SYMBOL_NAME(do_IRQ)	! 32 IRQ  irq0	.long	SYMBOL_NAME(do_IRQ)	! 33      irq1	.long	SYMBOL_NAME(do_IRQ)	! 34      irq2	.long	SYMBOL_NAME(do_IRQ)	! 35      irq3	.long	SYMBOL_NAME(do_IRQ)	! 36      irq4	.long	SYMBOL_NAME(do_IRQ)	! 37      irq5	.long	SYMBOL_NAME(do_IRQ)	! 38	.long	SYMBOL_NAME(do_IRQ)	! 39	.long	SYMBOL_NAME(do_IRQ)	! 40 PINT pint0-7	.long	SYMBOL_NAME(do_IRQ)	! 41      pint8-15	.long	SYMBOL_NAME(do_IRQ)	! 42	.long	SYMBOL_NAME(do_IRQ)	! 43	.long	SYMBOL_NAME(do_IRQ)	! 44	.long	SYMBOL_NAME(do_IRQ)	! 45	.long	SYMBOL_NAME(do_IRQ)	! 46	.long	SYMBOL_NAME(do_IRQ)	! 47	.long	SYMBOL_NAME(do_IRQ)	! 48 DMAC dei0	.long	SYMBOL_NAME(do_IRQ)	! 49      dei1	.long	SYMBOL_NAME(do_IRQ)	! 50      dei2	.long	SYMBOL_NAME(do_IRQ)	! 51      dei3	.long	SYMBOL_NAME(do_IRQ)	! 52 IrDA eri1	.long	SYMBOL_NAME(do_IRQ)	! 53      rxi1	.long	SYMBOL_NAME(do_IRQ)	! 54      bri1	.long	SYMBOL_NAME(do_IRQ)	! 55      txi1	.long	SYMBOL_NAME(do_IRQ)	! 56 SCIF eri2	.long	SYMBOL_NAME(do_IRQ)	! 57      rxi2	.long	SYMBOL_NAME(do_IRQ)	! 58      bri2	.long	SYMBOL_NAME(do_IRQ)	! 59      txi2	.long	SYMBOL_NAME(do_IRQ)	! 60 ADC  adi#if defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7707)	.long   SYMBOL_NAME(do_IRQ)	! 61 LCDC lcdi	.long   SYMBOL_NAME(do_IRQ)	! 62 PCC  pcc0i	.long   SYMBOL_NAME(do_IRQ)	! 63      pcc1i#if defined(CONFIG_CPU_SUBTYPE_SH7300)	.long   SYMBOL_NAME(do_IRQ)	! 64	.long   SYMBOL_NAME(do_IRQ)	! 65	.long   SYMBOL_NAME(do_IRQ)	! 66	.long   SYMBOL_NAME(do_IRQ)	! 67	.long   SYMBOL_NAME(do_IRQ)	! 68	.long   SYMBOL_NAME(do_IRQ)	! 69	.long   SYMBOL_NAME(do_IRQ)	! 70	.long   SYMBOL_NAME(do_IRQ)	! 71	.long   SYMBOL_NAME(do_IRQ)	! 72	.long   SYMBOL_NAME(do_IRQ)	! 73	.long   SYMBOL_NAME(do_IRQ)	! 74	.long   SYMBOL_NAME(do_IRQ)	! 75	.long   SYMBOL_NAME(do_IRQ)	! 76	.long   SYMBOL_NAME(do_IRQ)	! 77	.long   SYMBOL_NAME(do_IRQ)	! 78	.long   SYMBOL_NAME(do_IRQ)	! 79	.long   SYMBOL_NAME(do_IRQ)	! 80 SCIF0(SH7300)	.long   SYMBOL_NAME(do_IRQ)	! 81	.long   SYMBOL_NAME(do_IRQ)	! 82	.long   SYMBOL_NAME(do_IRQ)	! 83	.long   SYMBOL_NAME(do_IRQ)	! 84	.long   SYMBOL_NAME(do_IRQ)	! 85	.long   SYMBOL_NAME(do_IRQ)	! 86	.long   SYMBOL_NAME(do_IRQ)	! 87	.long   SYMBOL_NAME(do_IRQ)	! 88	.long   SYMBOL_NAME(do_IRQ)	! 89	.long   SYMBOL_NAME(do_IRQ)	! 90	.long   SYMBOL_NAME(do_IRQ)	! 91	.long   SYMBOL_NAME(do_IRQ)	! 92	.long   SYMBOL_NAME(do_IRQ)	! 93

⌨️ 快捷键说明

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