Cleanup assembly

This commit is contained in:
Baptiste Wicht 2014-01-21 18:41:37 +01:00
parent 9bc245a475
commit a9c39d507c
4 changed files with 87 additions and 490 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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