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

📄 head.s

📁 linux内核源码
💻 S
字号:
/* *  linux/arch/m32r/boot/compressed/head.S * *  Copyright (c) 2001-2003	Hiroyuki Kondo, Hirokazu Takata, *				Hitoshi Yamamoto, Takeo Takahashi *  Copyright (c) 2004		Hirokazu Takata */	.text#include <linux/linkage.h>#include <asm/addrspace.h>#include <asm/page.h>#include <asm/assembler.h>	/*	 * This code can be loaded anywhere, as long as output will not	 * overlap it.	 *	 * NOTE: This head.S should *NOT* be compiled with -fpic.	 *	 */	.global	startup	.global __bss_start, _ebss, end, zimage_data, zimage_len	__ALIGNstartup:	ldi	r0, #0x0000			/* SPI, disable EI */	mvtc	r0, psw	ldi	r12, #-8	bl	1f	.fillinsn1:	seth	r1, #high(CONFIG_MEMORY_START + 0x00400000) /* Start address */	add	r12, r14				/* Real address */	sub	r12, r1					/* difference */	.global got_len	seth	r3, #high(_GLOBAL_OFFSET_TABLE_+8)	or3	r3, r3, #low(_GLOBAL_OFFSET_TABLE_+12)	add	r3, r14	/* Update the contents of global offset table */	ldi	r1, #low(got_len)	srli	r1, #2	beqz	r1, 2f	.fillinsn1:	ld	r2, @r3	add	r2, r12	st	r2, @r3	addi	r3, #4	addi	r1, #-1	bnez	r1, 1b	.fillinsn2:	/* XXX: resolve plt *//* * Clear BSS first so that there are no surprises... */#ifdef CONFIG_ISA_DUAL_ISSUE	seth	r2, #high(__bss_start)	or3	r2, r2, #low(__bss_start)	add	r2, r12	seth	r3, #high(_ebss)	or3	r3, r3, #low(_ebss)	add	r3, r12	sub	r3, r2	; R4 = BSS size in longwords (rounded down)	mv	r4, r3		    ||	ldi	r1, #0	srli	r4, #4		    ||	addi	r2, #-4	beqz	r4, .Lendloop1.Lloop1:#ifndef CONFIG_CHIP_M32310	; Touch memory for the no-write-allocating cache.	ld	r0, @(4,r2)#endif	st	r1, @+r2	    ||	addi	r4, #-1	st	r1, @+r2	st	r1, @+r2	st	r1, @+r2	    ||	cmpeq	r1, r4	; R4 = 0?	bnc	.Lloop1.Lendloop1:	and3	r4, r3, #15	addi	r2, #4	beqz	r4, .Lendloop2.Lloop2:	stb	r1, @r2		    ||	addi	r4, #-1	addi	r2, #1	bnez	r4, .Lloop2.Lendloop2:#else /* not CONFIG_ISA_DUAL_ISSUE */	seth	r2, #high(__bss_start)	or3	r2, r2, #low(__bss_start)	add	r2, r12	seth	r3, #high(_ebss)	or3	r3, r3, #low(_ebss)	add	r3, r12	sub	r3, r2	mv	r4, r3	srli	r4, #2		; R4 = BSS size in longwords (rounded down)	ldi	r1, #0		; clear R1 for longwords store	addi	r2, #-4		; account for pre-inc store	beqz	r4, .Lendloop1	; any more to go?.Lloop1:	st	r1, @+r2	; yep, zero out another longword	addi	r4, #-1		; decrement count	bnez	r4, .Lloop1	; go do some more.Lendloop1:#endif /* not CONFIG_ISA_DUAL_ISSUE */	seth	r1, #high(end)	or3	r1, r1, #low(end)	add	r1, r12	mv	sp, r1/* * decompress the kernel */	mv	r0, sp	srli	r0, 31				/* MMU is ON or OFF */        seth	r1, #high(zimage_data)        or3	r1, r1, #low(zimage_data)	add	r1, r12        seth	r2, #high(zimage_len)        or3	r2, r2, #low(zimage_len)	mv	r3, sp	bl	decompress_kernel#if defined(CONFIG_CHIP_M32700) || defined(CONFIG_CHIP_OPSP) || defined(CONFIG_CHIP_VDEC2)	/* Cache flush */	ldi	r0, -1	ldi	r1, 0xd0	; invalidate i-cache, copy back d-cache	stb	r1, @r0#elif defined(CONFIG_CHIP_M32102)	/* Cache flush */	ldi	r0, -2	ldi	r1, 0x0100	; invalidate	stb	r1, @r0#elif defined(CONFIG_CHIP_M32104)	/* Cache flush */	ldi	r0, -2	ldi	r1, 0x0700	; invalidate i-cache, copy back d-cache	sth	r1, @r0#else#error "put your cache flush function, please"#endif	mv	r0, sp	srli	r0, 31				/* MMU is ON or OFF */	slli	r0, 31	or3	r0, r0, #0x2000	seth	r1, #high(CONFIG_MEMORY_START)	or	r0, r1	jmp	r0	.balign 512fake_headers_as_bzImage:	.short	0	.ascii	"HdrS"	.short	0x0202	.short	0	.short	0	.byte	0x00, 0x10	.short	0	.byte	0	.byte	1	.byte	0x00, 0x80	.long	0	.long	0

⌨️ 快捷键说明

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