Ver Fonte

fix(ld): add sentry to prevent kernel too large

greatbridf há 1 ano atrás
pai
commit
929a17f7a3
4 ficheiros alterados com 20 adições e 3 exclusões
  1. 14 1
      src/kernel.ld
  2. 2 2
      src/kernel/event/event.cpp
  3. 2 0
      src/kernel/syscall.cpp
  4. 2 0
      src/types/libstdcpp.cpp

+ 14 - 1
src/kernel.ld

@@ -112,6 +112,19 @@ SECTIONS
         __bss_end = .;
     } > MEM
 
+    .sentry :
+        AT(0x30000)
+    { LONG(0x01145140); } > MEM
+
+    .eh_frame :
+        AT(LOADADDR(.sentry) + SIZEOF(.sentry))
+    {
+        __eh_frame_start = .;
+        *(.eh_frame*)
+        . = ALIGN(0x1000);
+        __eh_frame_end = .;
+    } > MEM
+
     /* Stabs debugging sections.  */
     .stab          0 : { *(.stab) }
     .stabstr       0 : { *(.stabstr) }
@@ -149,7 +162,7 @@ SECTIONS
     /DISCARD/ :
     {
         *(.fini_array*)
-        *(.eh_frame*)
         *(.note*)
+        *(.dtors*)
     }
 }

+ 2 - 2
src/kernel/event/event.cpp

@@ -33,8 +33,8 @@ void dispatch_event(void)
     char buf[1024];
     auto& input_event_queue = event::input_event_queue();
 
-    char* ptr = (char*)0x8000000;
-    *ptr = 0xff;
+    // char* ptr = (char*)0x8000000;
+    // *ptr = 0xff;
 
     while (!input_event_queue.empty()) {
         for (auto iter = input_event_queue.begin(); iter != input_event_queue.end(); ++iter) {

+ 2 - 0
src/kernel/syscall.cpp

@@ -96,6 +96,7 @@ int _syscall_write(interrupt_stack* data)
         return -EINVAL;
     default:
         assert(false);
+        for ( ; ; ) ;
     }
 }
 
@@ -129,6 +130,7 @@ int _syscall_read(interrupt_stack* data)
         return -EINVAL;
     default:
         assert(false);
+        for ( ; ; ) ;
     }
 }
 

+ 2 - 0
src/types/libstdcpp.cpp

@@ -8,11 +8,13 @@
 extern "C" void NORETURN __stack_chk_fail(void)
 {
     assert(false);
+    for (;;) ;
 }
 
 extern "C" void NORETURN __cxa_pure_virtual(void)
 {
     assert(false);
+    for (;;) ;
 }
 
 void NORETURN