From 9ea79c92a6f0d95d9369c7b02edac41de45f2c02 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Thu, 2 Apr 2026 10:50:00 +0200 Subject: [PATCH] Refactor assembly includes and delete manual offset definitions --- xtoskrnl/ar/amd64/archsup.S | 106 +++++++++--------- xtoskrnl/ar/amd64/boot.S | 1 - xtoskrnl/ar/i686/archsup.S | 58 +++++----- xtoskrnl/ar/i686/boot.S | 1 - xtoskrnl/includes/ar.hh | 2 +- xtoskrnl/includes/ar/amd64/asmsup.h | 52 --------- .../ar/amd64/{assembly.hh => asmsup.hh} | 8 +- xtoskrnl/includes/ar/i686/asmsup.h | 36 ------ .../ar/i686/{assembly.hh => asmsup.hh} | 8 +- 9 files changed, 91 insertions(+), 181 deletions(-) delete mode 100644 xtoskrnl/includes/ar/amd64/asmsup.h rename xtoskrnl/includes/ar/amd64/{assembly.hh => asmsup.hh} (84%) delete mode 100644 xtoskrnl/includes/ar/i686/asmsup.h rename xtoskrnl/includes/ar/i686/{assembly.hh => asmsup.hh} (81%) diff --git a/xtoskrnl/ar/amd64/archsup.S b/xtoskrnl/ar/amd64/archsup.S index 03ff51b..fa8d960 100644 --- a/xtoskrnl/ar/amd64/archsup.S +++ b/xtoskrnl/ar/amd64/archsup.S @@ -8,7 +8,7 @@ */ #include -#include +#include .altmacro .text @@ -62,61 +62,61 @@ Ar\Type\Vector: push %rax /* Reserve space for other registers and point RBP to the trap frame */ - sub $(TRAP_FRAME_SIZE - TRAP_REGISTERS_SIZE), %rsp + sub $(KTRAP_FRAME_SIZE - KTRAP_FRAME_REGISTERS_SIZE), %rsp lea (%rsp), %rbp /* Store segment selectors */ - mov %gs, TrapSegGs(%rbp) - mov %fs, TrapSegFs(%rbp) - mov %es, TrapSegEs(%rbp) - mov %ds, TrapSegDs(%rbp) + mov %gs, KTRAP_FRAME_SegGs(%rbp) + mov %fs, KTRAP_FRAME_SegFs(%rbp) + mov %es, KTRAP_FRAME_SegEs(%rbp) + mov %ds, KTRAP_FRAME_SegDs(%rbp) /* Store debug registers */ mov %dr7, %rax - mov %rax, TrapDr7(%rbp) + mov %rax, KTRAP_FRAME_Dr7(%rbp) mov %dr6, %rax - mov %rax, TrapDr6(%rbp) + mov %rax, KTRAP_FRAME_Dr6(%rbp) mov %dr3, %rax - mov %rax, TrapDr3(%rbp) + mov %rax, KTRAP_FRAME_Dr3(%rbp) mov %dr2, %rax - mov %rax, TrapDr2(%rbp) + mov %rax, KTRAP_FRAME_Dr2(%rbp) mov %dr1, %rax - mov %rax, TrapDr1(%rbp) + mov %rax, KTRAP_FRAME_Dr1(%rbp) mov %dr0, %rax - mov %rax, TrapDr0(%rbp) + mov %rax, KTRAP_FRAME_Dr0(%rbp) /* Store CR2 and CR3 */ mov %cr3, %rax - mov %rax, TrapCr3(%rbp) + mov %rax, KTRAP_FRAME_Cr3(%rbp) mov %cr2, %rax - mov %rax, TrapCr2(%rbp) + mov %rax, KTRAP_FRAME_Cr2(%rbp) /* Store MxCsr register */ - stmxcsr TrapMxCsr(%rbp) + stmxcsr KTRAP_FRAME_MxCsr(%rbp) /* Store XMM registers */ - movdqa %xmm15, TrapXmm15(%rbp) - movdqa %xmm14, TrapXmm14(%rbp) - movdqa %xmm13, TrapXmm13(%rbp) - movdqa %xmm12, TrapXmm12(%rbp) - movdqa %xmm11, TrapXmm11(%rbp) - movdqa %xmm10, TrapXmm10(%rbp) - movdqa %xmm9, TrapXmm9(%rbp) - movdqa %xmm8, TrapXmm8(%rbp) - movdqa %xmm7, TrapXmm7(%rbp) - movdqa %xmm6, TrapXmm6(%rbp) - movdqa %xmm5, TrapXmm5(%rbp) - movdqa %xmm4, TrapXmm4(%rbp) - movdqa %xmm3, TrapXmm3(%rbp) - movdqa %xmm2, TrapXmm2(%rbp) - movdqa %xmm1, TrapXmm1(%rbp) - movdqa %xmm0, TrapXmm0(%rbp) + movdqa %xmm15, KTRAP_FRAME_Xmm15(%rbp) + movdqa %xmm14, KTRAP_FRAME_Xmm14(%rbp) + movdqa %xmm13, KTRAP_FRAME_Xmm13(%rbp) + movdqa %xmm12, KTRAP_FRAME_Xmm12(%rbp) + movdqa %xmm11, KTRAP_FRAME_Xmm11(%rbp) + movdqa %xmm10, KTRAP_FRAME_Xmm10(%rbp) + movdqa %xmm9, KTRAP_FRAME_Xmm9(%rbp) + movdqa %xmm8, KTRAP_FRAME_Xmm8(%rbp) + movdqa %xmm7, KTRAP_FRAME_Xmm7(%rbp) + movdqa %xmm6, KTRAP_FRAME_Xmm6(%rbp) + movdqa %xmm5, KTRAP_FRAME_Xmm5(%rbp) + movdqa %xmm4, KTRAP_FRAME_Xmm4(%rbp) + movdqa %xmm3, KTRAP_FRAME_Xmm3(%rbp) + movdqa %xmm2, KTRAP_FRAME_Xmm2(%rbp) + movdqa %xmm1, KTRAP_FRAME_Xmm1(%rbp) + movdqa %xmm0, KTRAP_FRAME_Xmm0(%rbp) /* Test previous mode and swap GS if needed */ - movl $0, TrapPreviousMode(%rbp) - mov TrapSegCs(%rbp), %ax + movl $0, KTRAP_FRAME_PreviousMode(%rbp) + mov KTRAP_FRAME_SegCs(%rbp), %ax and $3, %al - mov %al, TrapPreviousMode(%rbp) + mov %al, KTRAP_FRAME_PreviousMode(%rbp) /* Skip swapgs as the interrupt originated from kernel mode */ jz UserMode\Type\Vector @@ -149,35 +149,35 @@ UserMode\Type\Vector: mov %rbx, %rsp /* Test previous mode and swapgs if needed */ - testb $1, TrapPreviousMode(%rbp) + testb $1, KTRAP_FRAME_PreviousMode(%rbp) jz KernelModeReturn\Type\Vector cli swapgs KernelModeReturn\Type\Vector: /* Restore XMM registers */ - movdqa TrapXmm0(%rbp), %xmm0 - movdqa TrapXmm1(%rbp), %xmm1 - movdqa TrapXmm2(%rbp), %xmm2 - movdqa TrapXmm3(%rbp), %xmm3 - movdqa TrapXmm4(%rbp), %xmm4 - movdqa TrapXmm5(%rbp), %xmm5 - movdqa TrapXmm6(%rbp), %xmm6 - movdqa TrapXmm7(%rbp), %xmm7 - movdqa TrapXmm8(%rbp), %xmm8 - movdqa TrapXmm9(%rbp), %xmm9 - movdqa TrapXmm10(%rbp), %xmm10 - movdqa TrapXmm11(%rbp), %xmm11 - movdqa TrapXmm12(%rbp), %xmm12 - movdqa TrapXmm13(%rbp), %xmm13 - movdqa TrapXmm14(%rbp), %xmm14 - movdqa TrapXmm15(%rbp), %xmm15 + movdqa KTRAP_FRAME_Xmm0(%rbp), %xmm0 + movdqa KTRAP_FRAME_Xmm1(%rbp), %xmm1 + movdqa KTRAP_FRAME_Xmm2(%rbp), %xmm2 + movdqa KTRAP_FRAME_Xmm3(%rbp), %xmm3 + movdqa KTRAP_FRAME_Xmm4(%rbp), %xmm4 + movdqa KTRAP_FRAME_Xmm5(%rbp), %xmm5 + movdqa KTRAP_FRAME_Xmm6(%rbp), %xmm6 + movdqa KTRAP_FRAME_Xmm7(%rbp), %xmm7 + movdqa KTRAP_FRAME_Xmm8(%rbp), %xmm8 + movdqa KTRAP_FRAME_Xmm9(%rbp), %xmm9 + movdqa KTRAP_FRAME_Xmm10(%rbp), %xmm10 + movdqa KTRAP_FRAME_Xmm11(%rbp), %xmm11 + movdqa KTRAP_FRAME_Xmm12(%rbp), %xmm12 + movdqa KTRAP_FRAME_Xmm13(%rbp), %xmm13 + movdqa KTRAP_FRAME_Xmm14(%rbp), %xmm14 + movdqa KTRAP_FRAME_Xmm15(%rbp), %xmm15 /* Load MxCsr register */ - ldmxcsr TrapMxCsr(%rbp) + ldmxcsr KTRAP_FRAME_MxCsr(%rbp) /* Free stack space */ - add $(TRAP_FRAME_SIZE - TRAP_REGISTERS_SIZE), %rsp + add $(KTRAP_FRAME_SIZE - KTRAP_FRAME_REGISTERS_SIZE), %rsp /* Pop General Purpose Registers */ pop %rax diff --git a/xtoskrnl/ar/amd64/boot.S b/xtoskrnl/ar/amd64/boot.S index 8039bb4..167c351 100644 --- a/xtoskrnl/ar/amd64/boot.S +++ b/xtoskrnl/ar/amd64/boot.S @@ -7,7 +7,6 @@ */ #include -#include .altmacro .text diff --git a/xtoskrnl/ar/i686/archsup.S b/xtoskrnl/ar/i686/archsup.S index 7561ac2..da4d794 100644 --- a/xtoskrnl/ar/i686/archsup.S +++ b/xtoskrnl/ar/i686/archsup.S @@ -8,7 +8,7 @@ */ #include -#include +#include .altmacro .text @@ -37,8 +37,8 @@ _Ar\Type\Vector\()Start: clts /* Allocate the trap frame and inject the hardware vector for the dispatcher */ - sub $TRAP_FRAME_SIZE, %esp - movl $\Vector, TrapVector(%esp) + sub $KTRAP_FRAME_SIZE, %esp + movl $\Vector, KTRAP_FRAME_Vector(%esp) /* Pass the trap frame pointer as an argument and clear the direction flag */ push %esp @@ -49,7 +49,7 @@ _Ar\Type\Vector\()Start: /* Discard the argument and deallocate the trap frame */ add $4, %esp - add $TRAP_FRAME_SIZE, %esp + add $KTRAP_FRAME_SIZE, %esp /* Hardware task return */ iretl @@ -81,40 +81,40 @@ _Ar\Type\Vector\()Start: push %eax /* Reserve space for other registers and point RBP to the trap frame */ - sub $(TRAP_FRAME_SIZE - TRAP_REGISTERS_SIZE), %esp + sub $(KTRAP_FRAME_SIZE - KTRAP_FRAME_REGISTERS_SIZE), %esp lea (%esp), %ebp /* Store segment selectors */ - mov %gs, TrapSegGs(%ebp) - mov %fs, TrapSegFs(%ebp) - mov %es, TrapSegEs(%ebp) - mov %ds, TrapSegDs(%ebp) + mov %gs, KTRAP_FRAME_SegGs(%ebp) + mov %fs, KTRAP_FRAME_SegFs(%ebp) + mov %es, KTRAP_FRAME_SegEs(%ebp) + mov %ds, KTRAP_FRAME_SegDs(%ebp) /* Store debug registers */ mov %dr7, %eax - mov %eax, TrapDr7(%ebp) + mov %eax, KTRAP_FRAME_Dr7(%ebp) mov %dr6, %eax - mov %eax, TrapDr6(%ebp) + mov %eax, KTRAP_FRAME_Dr6(%ebp) mov %dr3, %eax - mov %eax, TrapDr3(%ebp) + mov %eax, KTRAP_FRAME_Dr3(%ebp) mov %dr2, %eax - mov %eax, TrapDr2(%ebp) + mov %eax, KTRAP_FRAME_Dr2(%ebp) mov %dr1, %eax - mov %eax, TrapDr1(%ebp) + mov %eax, KTRAP_FRAME_Dr1(%ebp) mov %dr0, %eax - mov %eax, TrapDr0(%ebp) + mov %eax, KTRAP_FRAME_Dr0(%ebp) /* Store CR2 and CR3 */ mov %cr3, %eax - mov %eax, TrapCr3(%ebp) + mov %eax, KTRAP_FRAME_Cr3(%ebp) mov %cr2, %eax - mov %eax, TrapCr2(%ebp) + mov %eax, KTRAP_FRAME_Cr2(%ebp) /* Test previous mode */ - movl $0, TrapPreviousMode(%ebp) - mov TrapSegCs(%ebp), %ax + movl $0, KTRAP_FRAME_PreviousMode(%ebp) + mov KTRAP_FRAME_SegCs(%ebp), %ax and $3, %al - mov %al, TrapPreviousMode(%ebp) + mov %al, KTRAP_FRAME_PreviousMode(%ebp) jz KernelMode\Type\Vector /* Load Kernel PB selector into FS */ @@ -131,9 +131,9 @@ _Ar\Type\Vector\()Start: KernelMode\Type\Vector: /* Save kernel stack pointer (SS:ESP) */ movl %ss, %eax - mov %eax, TrapSegSs(%ebp) - lea TrapEsp(%ebp), %eax - mov %eax, TrapEsp(%ebp) + mov %eax, KTRAP_FRAME_SegSs(%ebp) + lea KTRAP_FRAME_Esp(%ebp), %eax + mov %eax, KTRAP_FRAME_Esp(%ebp) UserMode\Type\Vector: /* Push Frame Pointer and clear direction flag */ @@ -152,19 +152,19 @@ UserMode\Type\Vector: add $4, %esp /* Test previous mode and disable interrupts before user mode return */ - testb $1, TrapPreviousMode(%ebp) + testb $1, KTRAP_FRAME_PreviousMode(%ebp) jz KernelModeReturn\Type\Vector cli KernelModeReturn\Type\Vector: /* Restore segment selectors */ - mov TrapSegDs(%ebp), %ds - mov TrapSegEs(%ebp), %es - mov TrapSegFs(%ebp), %fs - mov TrapSegGs(%ebp), %gs + mov KTRAP_FRAME_SegDs(%ebp), %ds + mov KTRAP_FRAME_SegEs(%ebp), %es + mov KTRAP_FRAME_SegFs(%ebp), %fs + mov KTRAP_FRAME_SegGs(%ebp), %gs /* Free stack space */ - add $(TRAP_FRAME_SIZE - TRAP_REGISTERS_SIZE), %esp + add $(KTRAP_FRAME_SIZE - KTRAP_FRAME_REGISTERS_SIZE), %esp /* Pop General Purpose Registers */ pop %eax diff --git a/xtoskrnl/ar/i686/boot.S b/xtoskrnl/ar/i686/boot.S index 18fce5b..a6cc7e8 100644 --- a/xtoskrnl/ar/i686/boot.S +++ b/xtoskrnl/ar/i686/boot.S @@ -7,7 +7,6 @@ */ #include -#include .altmacro .text diff --git a/xtoskrnl/includes/ar.hh b/xtoskrnl/includes/ar.hh index 437761f..bf0b3a8 100644 --- a/xtoskrnl/includes/ar.hh +++ b/xtoskrnl/includes/ar.hh @@ -11,7 +11,7 @@ #include -#include XTOS_ARCH_HEADER(ar, assembly.hh) +#include XTOS_ARCH_HEADER(ar, asmsup.hh) #include XTOS_ARCH_HEADER(ar, cpufunc.hh) #include XTOS_ARCH_HEADER(ar, procsup.hh) #include XTOS_ARCH_HEADER(ar, traps.hh) diff --git a/xtoskrnl/includes/ar/amd64/asmsup.h b/xtoskrnl/includes/ar/amd64/asmsup.h deleted file mode 100644 index 2c270b1..0000000 --- a/xtoskrnl/includes/ar/amd64/asmsup.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * PROJECT: ExectOS - * COPYRIGHT: See COPYING.md in the top level directory - * FILE: xtoskrnl/includes/amd64/asm.h - * DESCRIPTION: AMD64 architecture assembly definitions - * DEVELOPERS: Rafal Kupiec - */ - -#ifndef __XTOSKRNL_AMD64_ASMSUP_H -#define __XTOSKRNL_AMD64_ASMSUP_H - - -/* KTRAP_FRAME structure offsets */ -#define TrapXmm0 0 -#define TrapXmm1 16 -#define TrapXmm2 32 -#define TrapXmm3 48 -#define TrapXmm4 64 -#define TrapXmm5 80 -#define TrapXmm6 96 -#define TrapXmm7 112 -#define TrapXmm8 128 -#define TrapXmm9 144 -#define TrapXmm10 160 -#define TrapXmm11 176 -#define TrapXmm12 192 -#define TrapXmm13 208 -#define TrapXmm14 224 -#define TrapXmm15 240 -#define TrapMxCsr 256 -#define TrapPreviousMode 260 -#define TrapCr2 264 -#define TrapCr3 272 -#define TrapDr0 280 -#define TrapDr1 288 -#define TrapDr2 296 -#define TrapDr3 304 -#define TrapDr6 312 -#define TrapDr7 320 -#define TrapSegDs 328 -#define TrapSegEs 330 -#define TrapSegFs 332 -#define TrapSegGs 334 -#define TrapSegCs 480 -#define TrapRsp 496 -#define TrapSegSs 504 - -/* KTRAP_FRAME length related definitions */ -#define TRAP_FRAME_SIZE 512 -#define TRAP_REGISTERS_SIZE 176 - -#endif /* __XTOSKRNL_AMD64_ASMSUP_H */ diff --git a/xtoskrnl/includes/ar/amd64/assembly.hh b/xtoskrnl/includes/ar/amd64/asmsup.hh similarity index 84% rename from xtoskrnl/includes/ar/amd64/assembly.hh rename to xtoskrnl/includes/ar/amd64/asmsup.hh index 01cddac..2fc3047 100644 --- a/xtoskrnl/includes/ar/amd64/assembly.hh +++ b/xtoskrnl/includes/ar/amd64/asmsup.hh @@ -1,13 +1,13 @@ /** * PROJECT: ExectOS * COPYRIGHT: See COPYING.md in the top level directory - * FILE: xtoskrnl/includes/ar/amd64/assembly.hh + * FILE: xtoskrnl/includes/ar/amd64/asmsup.hh * DESCRIPTION: Architecture-specific assembler prototypes * DEVELOPERS: Aiken Harris */ -#ifndef __XTOSKRNL_AR_ASSEMBLY_HH -#define __XTOSKRNL_AR_ASSEMBLY_HH +#ifndef __XTOSKRNL_AR_ASMSUP_HH +#define __XTOSKRNL_AR_ASMSUP_HH #include @@ -40,4 +40,4 @@ XTCDECL VOID ArStartApplicationProcessor(VOID); -#endif /* __XTOSKRNL_AR_ASSEMBLY_HH */ +#endif /* __XTOSKRNL_AR_ASMSUP_HH */ diff --git a/xtoskrnl/includes/ar/i686/asmsup.h b/xtoskrnl/includes/ar/i686/asmsup.h deleted file mode 100644 index 6b228f2..0000000 --- a/xtoskrnl/includes/ar/i686/asmsup.h +++ /dev/null @@ -1,36 +0,0 @@ -/** - * PROJECT: ExectOS - * COPYRIGHT: See COPYING.md in the top level directory - * FILE: xtoskrnl/includes/i686/asm.h - * DESCRIPTION: i686 architecture assembly definitions - * DEVELOPERS: Rafal Kupiec - */ - -#ifndef __XTOSKRNL_I686_ASMSUP_H -#define __XTOSKRNL_I686_ASMSUP_H - - -/* KTRAP_FRAME structure offsets */ -#define TrapPreviousMode 0 -#define TrapCr2 4 -#define TrapCr3 8 -#define TrapDr0 12 -#define TrapDr1 16 -#define TrapDr2 20 -#define TrapDr3 24 -#define TrapDr6 28 -#define TrapDr7 32 -#define TrapSegDs 36 -#define TrapSegEs 38 -#define TrapSegFs 40 -#define TrapSegGs 42 -#define TrapVector 72 -#define TrapSegCs 84 -#define TrapEsp 92 -#define TrapSegSs 96 - -/* KTRAP_FRAME length related definitions */ -#define TRAP_FRAME_SIZE 100 -#define TRAP_REGISTERS_SIZE 56 - -#endif /* __XTOSKRNL_I686_ASMSUP_H */ diff --git a/xtoskrnl/includes/ar/i686/assembly.hh b/xtoskrnl/includes/ar/i686/asmsup.hh similarity index 81% rename from xtoskrnl/includes/ar/i686/assembly.hh rename to xtoskrnl/includes/ar/i686/asmsup.hh index 6ecc1a5..46e93ae 100644 --- a/xtoskrnl/includes/ar/i686/assembly.hh +++ b/xtoskrnl/includes/ar/i686/asmsup.hh @@ -1,13 +1,13 @@ /** * PROJECT: ExectOS * COPYRIGHT: See COPYING.md in the top level directory - * FILE: xtoskrnl/includes/ar/i686/assembly.hh + * FILE: xtoskrnl/includes/ar/i686/asmsup.hh * DESCRIPTION: Architecture-specific assembler prototypes * DEVELOPERS: Aiken Harris */ -#ifndef __XTOSKRNL_AR_ASSEMBLY_HH -#define __XTOSKRNL_AR_ASSEMBLY_HH +#ifndef __XTOSKRNL_AR_ASMSUP_HH +#define __XTOSKRNL_AR_ASMSUP_HH #include @@ -32,4 +32,4 @@ XTCDECL VOID ArStartApplicationProcessor(VOID); -#endif /* __XTOSKRNL_AR_ASSEMBLY_HH */ +#endif /* __XTOSKRNL_AR_ASMSUP_HH */