summaryrefslogtreecommitdiff
path: root/lib/libc/internal/util/panic.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/internal/util/panic.c')
-rw-r--r--lib/libc/internal/util/panic.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/libc/internal/util/panic.c b/lib/libc/internal/util/panic.c
new file mode 100644
index 00000000..1af6d6cf
--- /dev/null
+++ b/lib/libc/internal/util/panic.c
@@ -0,0 +1,29 @@
+#include <string.h>
+#include <sys/cdefs.h>
+#include <sys/uio.h>
+#include <unistd.h>
+
+__dead void __libc_panic(const char *prefix, const char *f, const char *errmsg)
+{
+ struct iovec iovec[5];
+ const char *e = "libc panic: ";
+
+ iovec[0].iov_base = (char *)e;
+ iovec[0].iov_len = sizeof("libc panic: ") - 1;
+
+ iovec[1].iov_base = (char *)prefix;
+ iovec[1].iov_len = strlen(prefix);
+
+ iovec[2].iov_base = (char *)f;
+ iovec[2].iov_len = strlen(f);
+
+ iovec[3].iov_base = (char *)errmsg;
+ iovec[3].iov_len = strlen(errmsg);
+
+ iovec[4].iov_base = "\n";
+ iovec[4].iov_len = 1;
+
+ writev(STDERR_FILENO, iovec, 5);
+
+ __builtin_trap();
+}