diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index 7b2521b65e..845f4abd12 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -2718,3 +2718,9 @@ int Process::sys$mknod(const char* pathname, mode_t mode, dev_t dev) return VFS::the().mknod(StringView(pathname), mode, dev, current_directory()); } + +int Process::sys$dump_backtrace() +{ + dump_backtrace(); + return 0; +} diff --git a/Kernel/Process.h b/Kernel/Process.h index 25b00c11d0..674b12f41f 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -104,6 +104,7 @@ public: void die(); void finalize(); + int sys$dump_backtrace(); int sys$gettid(); int sys$donate(int tid); int sys$shm_open(const char* name, int flags, mode_t); diff --git a/Kernel/Syscall.cpp b/Kernel/Syscall.cpp index 6f1b25132f..0512874e7a 100644 --- a/Kernel/Syscall.cpp +++ b/Kernel/Syscall.cpp @@ -291,6 +291,8 @@ static u32 handle(RegisterDump& regs, u32 function, u32 arg1, u32 arg2, u32 arg3 case Syscall::SC_reboot: { return current->process().sys$reboot(); } + case Syscall::SC_dump_backtrace: + return current->process().sys$dump_backtrace(); default: kprintf("<%u> int0x82: Unknown function %u requested {%x, %x, %x}\n", current->process().pid(), function, arg1, arg2, arg3); return -ENOSYS; diff --git a/Kernel/Syscall.h b/Kernel/Syscall.h index 20e030999b..a20997eb9c 100644 --- a/Kernel/Syscall.h +++ b/Kernel/Syscall.h @@ -115,7 +115,8 @@ struct timeval; __ENUMERATE_SYSCALL(sched_getparam) \ __ENUMERATE_SYSCALL(fchown) \ __ENUMERATE_SYSCALL(halt) \ - __ENUMERATE_SYSCALL(reboot) + __ENUMERATE_SYSCALL(reboot) \ + __ENUMERATE_SYSCALL(dump_backtrace) namespace Syscall { diff --git a/Libraries/LibC/unistd.cpp b/Libraries/LibC/unistd.cpp index 4dd041224a..9ad4a68eb1 100644 --- a/Libraries/LibC/unistd.cpp +++ b/Libraries/LibC/unistd.cpp @@ -526,4 +526,10 @@ int reboot() int rc = syscall(SC_reboot); __RETURN_WITH_ERRNO(rc, rc, -1); } + +void dump_backtrace() +{ + syscall(SC_dump_backtrace); +} + } diff --git a/Libraries/LibC/unistd.h b/Libraries/LibC/unistd.h index cbf57265f3..d574eb737a 100644 --- a/Libraries/LibC/unistd.h +++ b/Libraries/LibC/unistd.h @@ -14,6 +14,7 @@ __BEGIN_DECLS extern char** environ; +void dump_backtrace(); int fsync(int fd); void sysbeep(); int systrace(pid_t);