Browse Source

Tests+Userland: Prefer using __builtin_trap() instead of UD2

This way we don't have to hard-code per-architecture instructions.
Gunnar Beutner 2 years ago
parent
commit
dadf656dc9

+ 1 - 1
Tests/Kernel/crash.cpp

@@ -113,7 +113,7 @@ int main(int argc, char** argv)
 
 
     if (do_illegal_instruction || do_all_crash_types) {
     if (do_illegal_instruction || do_all_crash_types) {
         any_failures |= !Crash("Illegal instruction", []() {
         any_failures |= !Crash("Illegal instruction", []() {
-            asm volatile("ud2");
+            __builtin_trap();
             return Crash::Failure::DidNotCrash;
             return Crash::Failure::DidNotCrash;
         }).run(run_type);
         }).run(run_type);
     }
     }

+ 1 - 1
Tests/Kernel/null-deref-crash-during-pthread_join.cpp

@@ -15,7 +15,7 @@ int main(int, char**)
     pthread_create(
     pthread_create(
         &tid, nullptr, [](void*) -> void* {
         &tid, nullptr, [](void*) -> void* {
             sleep(1);
             sleep(1);
-            asm volatile("ud2");
+            __builtin_trap();
             return nullptr;
             return nullptr;
         },
         },
         nullptr);
         nullptr);

+ 3 - 2
Userland/Libraries/LibC/stdlib.cpp

@@ -214,8 +214,9 @@ int atexit(void (*handler)())
 
 
 void _abort()
 void _abort()
 {
 {
-    asm volatile("ud2");
-    __builtin_unreachable();
+    // According to the GCC manual __builtin_trap() can call abort() so using it here might not seem safe at first. However,
+    // on all the platforms we support GCC emits an undefined instruction instead of a call.
+    __builtin_trap();
 }
 }
 
 
 void abort()
 void abort()