Refactor assembly includes and delete manual offset definitions
Some checks failed
Builds / ExectOS (i686, debug) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 39s
Builds / ExectOS (i686, release) (push) Failing after 33s
Builds / ExectOS (amd64, debug) (push) Successful in 39s

This commit is contained in:
2026-04-02 10:50:00 +02:00
parent c30df8e5b5
commit 9ea79c92a6
9 changed files with 91 additions and 181 deletions

View File

@@ -8,7 +8,7 @@
*/
#include <xtkmapi.h>
#include <ar/amd64/asmsup.h>
#include <xtadk.h>
.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

View File

@@ -7,7 +7,6 @@
*/
#include <xtkmapi.h>
#include <ar/amd64/asmsup.h>
.altmacro
.text

View File

@@ -8,7 +8,7 @@
*/
#include <xtkmapi.h>
#include <ar/i686/asmsup.h>
#include <xtadk.h>
.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

View File

@@ -7,7 +7,6 @@
*/
#include <xtkmapi.h>
#include <ar/amd64/asmsup.h>
.altmacro
.text

View File

@@ -11,7 +11,7 @@
#include <xtos.hh>
#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)

View File

@@ -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 <belliash@codingworkshop.eu.org>
*/
#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 */

View File

@@ -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 <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_AR_ASSEMBLY_HH
#define __XTOSKRNL_AR_ASSEMBLY_HH
#ifndef __XTOSKRNL_AR_ASMSUP_HH
#define __XTOSKRNL_AR_ASMSUP_HH
#include <xtos.hh>
@@ -40,4 +40,4 @@ XTCDECL
VOID
ArStartApplicationProcessor(VOID);
#endif /* __XTOSKRNL_AR_ASSEMBLY_HH */
#endif /* __XTOSKRNL_AR_ASMSUP_HH */

View File

@@ -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 <belliash@codingworkshop.eu.org>
*/
#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 */

View File

@@ -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 <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_AR_ASSEMBLY_HH
#define __XTOSKRNL_AR_ASSEMBLY_HH
#ifndef __XTOSKRNL_AR_ASMSUP_HH
#define __XTOSKRNL_AR_ASMSUP_HH
#include <xtos.hh>
@@ -32,4 +32,4 @@ XTCDECL
VOID
ArStartApplicationProcessor(VOID);
#endif /* __XTOSKRNL_AR_ASSEMBLY_HH */
#endif /* __XTOSKRNL_AR_ASMSUP_HH */