1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 01:37:36 +00:00

Kernel: Simplify kernel entry points slightly

It was silly to push the address of the stack pointer when we can also
just change the callee argument to be a value type.
This commit is contained in:
Andreas Kling 2019-11-06 13:15:55 +01:00
parent 349d2ec1c2
commit 9a4b117f48
3 changed files with 38 additions and 46 deletions

View file

@ -62,40 +62,38 @@ asm(
" add $0x4, %esp\n"
" iret\n");
#define EH_ENTRY(ec) \
extern "C" void exception_##ec##_handler(RegisterDump&); \
extern "C" void exception_##ec##_entry(); \
asm( \
".globl exception_" #ec "_entry\n" \
"exception_" #ec "_entry: \n" \
" pusha\n" \
" pushw %ds\n" \
" pushw %es\n" \
" pushw %fs\n" \
" pushw %gs\n" \
" pushw %ss\n" \
" pushw %ss\n" \
" pushw %ss\n" \
" pushw %ss\n" \
" pushw %ss\n" \
" popw %ds\n" \
" popw %es\n" \
" popw %fs\n" \
" popw %gs\n" \
" pushl %esp\n" \
" call exception_" #ec "_handler\n" \
" add $4, %esp\n" \
" popw %gs\n" \
" popw %gs\n" \
" popw %fs\n" \
" popw %es\n" \
" popw %ds\n" \
" popa\n" \
" add $0x4, %esp\n" \
#define EH_ENTRY(ec) \
extern "C" void exception_##ec##_handler(RegisterDump); \
extern "C" void exception_##ec##_entry(); \
asm( \
".globl exception_" #ec "_entry\n" \
"exception_" #ec "_entry: \n" \
" pusha\n" \
" pushw %ds\n" \
" pushw %es\n" \
" pushw %fs\n" \
" pushw %gs\n" \
" pushw %ss\n" \
" pushw %ss\n" \
" pushw %ss\n" \
" pushw %ss\n" \
" pushw %ss\n" \
" popw %ds\n" \
" popw %es\n" \
" popw %fs\n" \
" popw %gs\n" \
" call exception_" #ec "_handler\n" \
" popw %gs\n" \
" popw %gs\n" \
" popw %fs\n" \
" popw %es\n" \
" popw %ds\n" \
" popa\n" \
" add $0x4, %esp\n" \
" iret\n");
#define EH_ENTRY_NO_CODE(ec) \
extern "C" void exception_##ec##_handler(RegisterDump&); \
extern "C" void exception_##ec##_handler(RegisterDump); \
extern "C" void exception_##ec##_entry(); \
asm( \
".globl exception_" #ec "_entry\n" \
@ -115,9 +113,7 @@ asm(
" popw %es\n" \
" popw %fs\n" \
" popw %gs\n" \
" pushl %esp\n" \
" call exception_" #ec "_handler\n" \
" add $4, %esp\n" \
" popw %gs\n" \
" popw %gs\n" \
" popw %fs\n" \
@ -186,26 +182,26 @@ static void handle_crash(RegisterDump& regs, const char* description, int signal
}
EH_ENTRY_NO_CODE(6);
void exception_6_handler(RegisterDump& regs)
void exception_6_handler(RegisterDump regs)
{
handle_crash(regs, "Illegal instruction", SIGILL);
}
EH_ENTRY_NO_CODE(0);
void exception_0_handler(RegisterDump& regs)
void exception_0_handler(RegisterDump regs)
{
handle_crash(regs, "Division by zero", SIGFPE);
}
EH_ENTRY(13);
void exception_13_handler(RegisterDump& regs)
void exception_13_handler(RegisterDump regs)
{
handle_crash(regs, "General protection fault", SIGSEGV);
}
// 7: FPU not available exception
EH_ENTRY_NO_CODE(7);
void exception_7_handler(RegisterDump& regs)
void exception_7_handler(RegisterDump regs)
{
(void)regs;
@ -237,7 +233,7 @@ void exception_7_handler(RegisterDump& regs)
// 14: Page Fault
EH_ENTRY(14);
void exception_14_handler(RegisterDump& regs)
void exception_14_handler(RegisterDump regs)
{
ASSERT(current);