summaryrefslogtreecommitdiff
path: root/lib/libc/internal/util/panic.c
blob: 1af6d6cfe8c0c63f5b1e024ace4c795f520817e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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();
}