arch/sh/boot/compressed/head_32.S

Source file repositories/reference/linux-study-clean/arch/sh/boot/compressed/head_32.S

File Facts

System
Linux kernel
Corpus path
arch/sh/boot/compressed/head_32.S
Extension
.S
Size
2430 bytes
Lines
127
Domain
Architecture Layer
Bucket
arch/sh
Inferred role
Architecture Layer: arch/sh
Status
atlas-only

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

.text

#include <asm/page.h>

	.global	startup
startup:
	/* Load initial status register */
	mov.l   init_sr, r1
	ldc     r1, sr

	/* Move myself to proper location if necessary */
	mova	1f, r0
	mov.l	1f, r2
	cmp/eq	r2, r0
	bt	clear_bss
	sub	r0, r2
	mov.l	bss_start_addr, r0
	mov	#0xffffffe0, r1
	and	r1, r0			! align cache line
	mov.l	text_start_addr, r3
	mov	r0, r1
	sub	r2, r1
3:
	mov.l	@r1, r4
	mov.l	@(4,r1), r5
	mov.l	@(8,r1), r6
	mov.l	@(12,r1), r7
	mov.l	@(16,r1), r8
	mov.l	@(20,r1), r9
	mov.l	@(24,r1), r10
	mov.l	@(28,r1), r11
	mov.l	r4, @r0
	mov.l	r5, @(4,r0)
	mov.l	r6, @(8,r0)
	mov.l	r7, @(12,r0)
	mov.l	r8, @(16,r0)
	mov.l	r9, @(20,r0)
	mov.l	r10, @(24,r0)
	mov.l	r11, @(28,r0)
#ifdef CONFIG_CPU_SH4
	ocbwb	@r0
#endif
	cmp/hi	r3, r0
	add	#-32, r0
	bt/s	3b
	 add	#-32, r1
	mov.l	2f, r0
	jmp	@r0
	 nop

	.align 2
1:	.long	1b
2:	.long	clear_bss
text_start_addr:
	.long	startup

	/* Clear BSS */
clear_bss:
	mov.l	end_addr, r1
	mov.l	bss_start_addr, r2
	mov	#0, r0
l1:
	mov.l	r0, @-r1
	cmp/eq	r1,r2
	bf	l1

	/* Set the initial pointer. */
	mov.l	init_stack_addr, r0
	mov.l	@r0, r15

Annotation

Implementation Notes