arch/m68k/kernel/entry.S

Source file repositories/reference/linux-study-clean/arch/m68k/kernel/entry.S

File Facts

System
Linux kernel
Corpus path
arch/m68k/kernel/entry.S
Extension
.S
Size
9921 bytes
Lines
440
Domain
Architecture Layer
Bucket
arch/m68k
Inferred role
Architecture Layer: arch/m68k
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

#include <linux/linkage.h>
#include <asm/errno.h>
#include <asm/setup.h>
#include <asm/traps.h>
#include <asm/unistd.h>
#include <asm/asm-offsets.h>
#include <asm/entry.h>

.globl system_call, buserr, trap, resume
.globl sys_call_table
.globl __sys_fork, __sys_clone, __sys_vfork
.globl bad_interrupt
.globl auto_irqhandler_fixup
.globl user_irqvec_fixup

.text
ENTRY(__sys_fork)
	SAVE_SWITCH_STACK
	jbsr	sys_fork
	lea     %sp@(24),%sp
	rts

ENTRY(__sys_clone)
	SAVE_SWITCH_STACK
	pea	%sp@(SWITCH_STACK_SIZE)
	jbsr	m68k_clone
	lea     %sp@(28),%sp
	rts

ENTRY(__sys_vfork)
	SAVE_SWITCH_STACK
	jbsr	sys_vfork
	lea     %sp@(24),%sp
	rts

ENTRY(__sys_clone3)
	SAVE_SWITCH_STACK
	pea	%sp@(SWITCH_STACK_SIZE)
	jbsr	m68k_clone3
	lea	%sp@(28),%sp
	rts

ENTRY(sys_sigreturn)
	SAVE_SWITCH_STACK
	movel	%sp,%a1			  	| switch_stack pointer
	lea	%sp@(SWITCH_STACK_SIZE),%a0	| pt_regs pointer
	lea     %sp@(-84),%sp			| leave a gap
	movel	%a1,%sp@-
	movel	%a0,%sp@-
	jbsr	do_sigreturn
	jra	1f				| shared with rt_sigreturn()

ENTRY(sys_rt_sigreturn)
	SAVE_SWITCH_STACK
	movel	%sp,%a1			  	| switch_stack pointer
	lea	%sp@(SWITCH_STACK_SIZE),%a0	| pt_regs pointer
	lea     %sp@(-84),%sp			| leave a gap
	movel	%a1,%sp@-
	movel	%a0,%sp@-
	| stack contents:
	|   [original pt_regs address] [original switch_stack address]
	|   [gap] [switch_stack] [pt_regs] [exception frame]
	jbsr	do_rt_sigreturn

1:
	| stack contents now:
	|   [original pt_regs address] [original switch_stack address]
	|   [unused part of the gap] [moved switch_stack] [moved pt_regs]
	|   [replacement exception frame]
	| return value of do_{rt_,}sigreturn() points to moved switch_stack.

Annotation

Implementation Notes