From a9c39d507cb3b58cebc4311f1c4883c383f20541 Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Tue, 21 Jan 2014 18:41:37 +0100 Subject: [PATCH] Cleanup assembly --- kernel/Makefile | 6 +- kernel/src/irqs.s | 179 +++---------------------- kernel/src/isrs.s | 299 +++++++----------------------------------- kernel/src/syscalls.s | 93 +++---------- 4 files changed, 87 insertions(+), 490 deletions(-) diff --git a/kernel/Makefile b/kernel/Makefile index c94ea4f8..bcd5505b 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -13,12 +13,12 @@ KERNEL_D_FILES=$(KERNEL_CPP_FILES:%.cpp=%.cpp.d) KERNEL_D_STL_FILES=$(KERNEL_CPP_STL_FILES:%.cpp=%.cpp.d) #TODO Generate also the o files coming from s files automatically, ignoring crti and crtn -KERNEL_O_FILES=boot_16_64.o boot_32_64.o $(KERNEL_CPP_FILES:%.cpp=%.cpp.o) $(KERNEL_CPP_STL_FILES:%.cpp=%.cpp.o) isrs.s.o irqs.s.o arch.s.o syscalls.s.o +KERNEL_O_FILES=boot_16_64.o boot_32_64.o $(KERNEL_CPP_FILES:%.cpp=%.cpp.o) $(KERNEL_CPP_STL_FILES:%.cpp=%.cpp.o) src/isrs.s.o src/irqs.s.o src/arch.s.o src/syscalls.s.o CRTBEGIN_OBJ:=$(shell $(CC) $(CFLAGS) -print-file-name=crtbegin.o) CRTEND_OBJ:=$(shell $(CC) $(CFLAGS) -print-file-name=crtend.o) -LINK_O_FILES=crti.s.o $(CRTBEGIN_OBJ) $(KERNEL_O_FILES) $(CRTEND_OBJ) crtn.s.o +LINK_O_FILES=src/crti.s.o $(CRTBEGIN_OBJ) $(KERNEL_O_FILES) $(CRTEND_OBJ) src/crtn.s.o boot_16.o: src/boot/boot_16.cpp $(CC) $(CPP_FLAGS_16) $(THOR_FLAGS) $(WARNING_FLAGS) -c src/boot/boot_16.cpp -o boot_16.o @@ -32,7 +32,7 @@ boot_16_64.o: boot_16.o boot_32_64.o: boot_32.o $(OC) -I elf32-i386 -O elf64-x86-64 boot_32.o boot_32_64.o -%.s.o: src/%.s +src/%.s.o: src/%.s $(AS) -c $< -o $@ src/%.cpp.d: $(KERNEL_CPP_FILES) diff --git a/kernel/src/irqs.s b/kernel/src/irqs.s index 6aad9db4..2118f47f 100644 --- a/kernel/src/irqs.s +++ b/kernel/src/irqs.s @@ -9,173 +9,36 @@ .include "src/common.s" -// Define the base ISRs - -.global _irq0 -.global _irq0 -.global _irq1 -.global _irq2 -.global _irq3 -.global _irq4 -.global _irq5 -.global _irq6 -.global _irq7 -.global _irq8 -.global _irq9 -.global _irq10 -.global _irq11 -.global _irq12 -.global _irq13 -.global _irq14 -.global _irq15 -.global _irq16 -.global _irq17 -.global _irq18 -.global _irq19 -.global _irq20 -.global _irq21 -.global _irq22 -.global _irq23 -.global _irq24 -.global _irq25 -.global _irq26 -.global _irq27 -.global _irq28 -.global _irq29 -.global _irq30 -.global _irq31 - -_irq0: +.macro create_irq number +.global _irq\number +_irq\number: cli push rdi - mov rdi, 0 + mov rdi, \number jmp irq_common_handler +.endm -_irq1: - cli - - push rdi - mov rdi, 1 - - jmp irq_common_handler - -_irq2: - cli - - push rdi - mov rdi, 2 - - jmp irq_common_handler - -_irq3: - cli - - push rdi - mov rdi, 3 - - jmp irq_common_handler - -_irq4: - cli - - push rdi - mov rdi, 4 - - jmp irq_common_handler - -_irq5: - cli - - push rdi - mov rdi, 5 - - jmp irq_common_handler - -_irq6: - cli - - push rdi - mov rdi, 6 - - jmp irq_common_handler - -_irq7: - cli - - push rdi - mov rdi, 7 - - jmp irq_common_handler - -_irq8: - cli - - push rdi - mov rdi, 8 - - jmp irq_common_handler - -_irq9: - cli - - push rdi - mov rdi, 9 - - jmp irq_common_handler - -_irq10: - cli - - push rdi - mov rdi, 10 - - jmp irq_common_handler - -_irq11: - cli - - push rdi - mov rdi, 11 - - jmp irq_common_handler - -_irq12: - cli - - push rdi - mov rdi, 12 - - jmp irq_common_handler - -_irq13: - cli - - push rdi - mov rdi, 13 - - jmp irq_common_handler - -_irq14: - cli - - push rdi - mov rdi, 14 - - jmp irq_common_handler - -_irq15: - cli - - push rdi - mov rdi, 15 - - jmp irq_common_handler +create_irq 0 +create_irq 1 +create_irq 2 +create_irq 3 +create_irq 4 +create_irq 5 +create_irq 6 +create_irq 7 +create_irq 8 +create_irq 9 +create_irq 10 +create_irq 11 +create_irq 12 +create_irq 13 +create_irq 14 +create_irq 15 // Common handler -//TODO Check if really safe to trash r12 irq_common_handler: push rax push rcx diff --git a/kernel/src/isrs.s b/kernel/src/isrs.s index 6894d48a..0370966b 100644 --- a/kernel/src/isrs.s +++ b/kernel/src/isrs.s @@ -9,266 +9,63 @@ .include "src/common.s" -// Define the base ISRs - -.global _isr0 -.global _isr0 -.global _isr1 -.global _isr2 -.global _isr3 -.global _isr4 -.global _isr5 -.global _isr6 -.global _isr7 -.global _isr8 -.global _isr9 -.global _isr10 -.global _isr11 -.global _isr12 -.global _isr13 -.global _isr14 -.global _isr15 -.global _isr16 -.global _isr17 -.global _isr18 -.global _isr19 -.global _isr20 -.global _isr21 -.global _isr22 -.global _isr23 -.global _isr24 -.global _isr25 -.global _isr26 -.global _isr27 -.global _isr28 -.global _isr29 -.global _isr30 -.global _isr31 - -_isr0: +.macro create_irq number +.global _isr\number +_isr\number: cli + + push \number + + jmp isr_common_handler +.endm + +.macro create_irq_dummy number +.global _isr\number +_isr\number: + cli + push 0 // Dummy error code - push 0 + push \number jmp isr_common_handler +.endm -_isr1: - cli - push 0 // Dummy error code - push 1 - - jmp isr_common_handler - -_isr2: - cli - push 0 // Dummy error code - push 2 - - jmp isr_common_handler - -_isr3: - cli - push 0 // Dummy error code - push 3 - - jmp isr_common_handler - -_isr4: - cli - push 0 // Dummy error code - push 4 - - jmp isr_common_handler - -_isr5: - cli - push 0 // Dummy error code - push 5 - - jmp isr_common_handler - -_isr6: - cli - push 0 // Dummy error code - push 6 - - jmp isr_common_handler - -_isr7: - cli - push 0 // Dummy error code - push 7 - - jmp isr_common_handler - -_isr8: - cli - push 8 - - jmp isr_common_handler - -_isr9: - cli - push 0 // Dummy error code - push 9 - - jmp isr_common_handler - -_isr10: - cli - push 10 - - jmp isr_common_handler - -_isr11: - cli - push 11 - - jmp isr_common_handler - -_isr12: - cli - push 12 - - jmp isr_common_handler - -_isr13: - cli - push 13 - - jmp isr_common_handler - -_isr14: - cli - push 14 - - jmp isr_common_handler - -_isr15: - cli - push 0 // Dummy error code - push 15 - - jmp isr_common_handler - -_isr16: - cli - push 0 // Dummy error code - push 16 - - jmp isr_common_handler - -_isr17: - cli - push 0 // Dummy error code - push 17 - - jmp isr_common_handler - -_isr18: - cli - push 0 // Dummy error code - push 18 - - jmp isr_common_handler - -_isr19: - cli - push 0 // Dummy error code - push 19 - - jmp isr_common_handler - -_isr20: - cli - push 0 // Dummy error code - push 20 - - jmp isr_common_handler - -_isr21: - cli - push 0 // Dummy error code - push 21 - - jmp isr_common_handler - -_isr22: - cli - push 0 // Dummy error code - push 22 - - jmp isr_common_handler - -_isr23: - cli - push 0 // Dummy error code - push 23 - - jmp isr_common_handler - -_isr24: - cli - push 0 // Dummy error code - push 24 - - jmp isr_common_handler - -_isr25: - cli - push 0 // Dummy error code - push 25 - - jmp isr_common_handler - -_isr26: - cli - push 0 // Dummy error code - push 26 - - jmp isr_common_handler - -_isr27: - cli - push 0 // Dummy error code - push 27 - - jmp isr_common_handler - -_isr28: - cli - push 0 // Dummy error code - push 28 - - jmp isr_common_handler - -_isr29: - cli - push 0 // Dummy error code - push 29 - - jmp isr_common_handler - -_isr30: - cli - push 0 // Dummy error code - push 30 - - jmp isr_common_handler - -_isr31: - cli - push 0 // Dummy error code - push 31 - - jmp isr_common_handler - -// Common handler +create_irq_dummy 0 +create_irq_dummy 1 +create_irq_dummy 2 +create_irq_dummy 3 +create_irq_dummy 4 +create_irq_dummy 5 +create_irq_dummy 6 +create_irq_dummy 7 +create_irq 8 +create_irq_dummy 9 +create_irq 10 +create_irq 11 +create_irq 12 +create_irq 13 +create_irq 14 +create_irq_dummy 15 +create_irq_dummy 16 +create_irq_dummy 17 +create_irq_dummy 18 +create_irq_dummy 19 +create_irq_dummy 20 +create_irq_dummy 21 +create_irq_dummy 22 +create_irq_dummy 23 +create_irq_dummy 24 +create_irq_dummy 25 +create_irq_dummy 26 +create_irq_dummy 27 +create_irq_dummy 28 +create_irq_dummy 29 +create_irq_dummy 30 +create_irq_dummy 31 isr_common_handler: restore_kernel_segments - //mov rax, _fault_handler call _fault_handler restore_user_segments diff --git a/kernel/src/syscalls.s b/kernel/src/syscalls.s index d88d7313..70d32ff8 100644 --- a/kernel/src/syscalls.s +++ b/kernel/src/syscalls.s @@ -11,89 +11,26 @@ // Define the base ISRs -.global _syscall0 -.global _syscall0 -.global _syscall1 -.global _syscall2 -.global _syscall3 -.global _syscall4 -.global _syscall5 -.global _syscall6 -.global _syscall7 -.global _syscall8 -.global _syscall9 - -_syscall0: +.macro create_syscall number +.global _syscall\number +_syscall\number: cli - push 0 + push \number jmp syscall_common_handler +.endm -_syscall1: - cli - - push 1 - - jmp syscall_common_handler - -_syscall2: - cli - - push 2 - - jmp syscall_common_handler - -_syscall3: - cli - - push 3 - - jmp syscall_common_handler - -_syscall4: - cli - - push 4 - - jmp syscall_common_handler - -_syscall5: - cli - - push 5 - - jmp syscall_common_handler - -_syscall6: - cli - - push 6 - - jmp syscall_common_handler - -_syscall7: - cli - - push 7 - - jmp syscall_common_handler - -_syscall8: - cli - - push 8 - - jmp syscall_common_handler - -_syscall9: - cli - - push 9 - - jmp syscall_common_handler - -// Common handler +create_syscall 0 +create_syscall 1 +create_syscall 2 +create_syscall 3 +create_syscall 4 +create_syscall 5 +create_syscall 6 +create_syscall 7 +create_syscall 8 +create_syscall 9 syscall_common_handler: push r12