From 5d06824289868c5a345fbcfa8ed4d1e63af84fdb Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Sat, 24 Feb 2024 06:41:48 -0600 Subject: arch: i386: move jump_userspace to its own file Move the function that jumps to ring 3 to its own assembly file. Signed-off-by: Danny Holman --- arch/i386/boot/boot.s | 19 +------------------ arch/i386/kernel/jump_userspace.s | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 18 deletions(-) create mode 100644 arch/i386/kernel/jump_userspace.s (limited to 'arch/i386') diff --git a/arch/i386/boot/boot.s b/arch/i386/boot/boot.s index 005b07b..4b9106d 100644 --- a/arch/i386/boot/boot.s +++ b/arch/i386/boot/boot.s @@ -82,7 +82,7 @@ load_page_dir: pushl %ebp movl %esp, %ebp - movl 8(%ebp), %eax + movl 8(%esp), %eax movl %eax, %cr3 movl %ebp, %esp @@ -111,20 +111,3 @@ flush_gdt: jmp $0x08, $.flush .flush: ret - -.global jump_userspace -.type jump_userspace, @function -jump_userspace: - movw $0x23, %ax - movw %ax, %ds - movw %ax, %es - movw %ax, %fs - movw %ax, %gs - - pushl $0x23 - pushl %esp - pushf - orl $0x200, (%esp) - pushl $0x1B - pushl test_user_function - iret diff --git a/arch/i386/kernel/jump_userspace.s b/arch/i386/kernel/jump_userspace.s new file mode 100644 index 0000000..fe69880 --- /dev/null +++ b/arch/i386/kernel/jump_userspace.s @@ -0,0 +1,29 @@ +.global jump_userspace +.type jump_userspace, @function +jump_userspace: + movw $0x23, %ax + movw %ax, %ds + movw %ax, %es + movw %ax, %fs + movw %ax, %gs + + movl %esp, %eax + pushl $0x23 + pushl %eax + pushf + push $0x1B + pushl $start_init + + pushl %esp + call set_kernel_esp + addl $4, %esp + + movl $0x0004, %eax + orl $0x0002, %eax + pushl %eax + call init_page_dir + addl $4, %esp + + movl %eax, %cr3 + + iret -- cgit v1.2.3