From 1ba9d3b0756d2d101906296cbcfeeecc39144cac Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Wed, 11 Jun 2025 21:43:45 +0200 Subject: feat: `___chkstk_ms` has been implemented for AMD64 HAL. Signed-off-by: Amlal El Mahrouss --- dev/kernel/KernelKit/PCI/IO.h | 4 ++-- dev/kernel/src/CxxAbi-AMD64.cc | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'dev/kernel') diff --git a/dev/kernel/KernelKit/PCI/IO.h b/dev/kernel/KernelKit/PCI/IO.h index a7abc163..8ddba334 100644 --- a/dev/kernel/KernelKit/PCI/IO.h +++ b/dev/kernel/KernelKit/PCI/IO.h @@ -56,8 +56,8 @@ inline Array make_ports(UShort base) { } } // namespace Kernel -#ifdef __x86_64__ +#ifdef __NE_AMD64__ #include #else #error Please provide platform specific code for the I/O -#endif // ifdef __x86_64__ +#endif // ifdef __NE_AMD64__ diff --git a/dev/kernel/src/CxxAbi-AMD64.cc b/dev/kernel/src/CxxAbi-AMD64.cc index 5b0f7c3c..30c8306e 100644 --- a/dev/kernel/src/CxxAbi-AMD64.cc +++ b/dev/kernel/src/CxxAbi-AMD64.cc @@ -24,7 +24,14 @@ EXTERN_C Kernel::Void __cxa_pure_virtual(void* self) { (Kernel::Void)(Kernel::kout << ", has unimplemented virtual functions.\r"); } -EXTERN_C void ___chkstk_ms(void) {} +EXTERN_C void ___chkstk_ms(PtrDiff frame_size) { + char* sp; + asm volatile("mov %%rsp, %0" : "=r"(sp)); + + for (PtrDiff offset = kPageSize; offset < frame_size; offset += kPageSize) { + sp[-offset] = 0; + } +} EXTERN_C int atexit(void (*f)()) { if (__atexit_func_count >= kAtExitMacDestructors) return 1; -- cgit v1.2.3