summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
Diffstat (limited to 'dev')
-rw-r--r--dev/kernel/KernelKit/PCI/IO.h4
-rw-r--r--dev/kernel/src/CxxAbi-AMD64.cc9
2 files changed, 10 insertions, 3 deletions
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<UShort, Sz> make_ports(UShort base) {
}
} // namespace Kernel
-#ifdef __x86_64__
+#ifdef __NE_AMD64__
#include <KernelKit/PCI/IOArray+AMD64.inl>
#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;