xref: /openbmc/u-boot/lib/panic.c (revision e21c03be6d51ed8ab94885b6829cd0e719778a1e)
12b22a99cSSjoerd Simons /*
22b22a99cSSjoerd Simons  *  linux/lib/vsprintf.c
32b22a99cSSjoerd Simons  *
42b22a99cSSjoerd Simons  *  Copyright (C) 1991, 1992  Linus Torvalds
52b22a99cSSjoerd Simons  */
62b22a99cSSjoerd Simons 
72b22a99cSSjoerd Simons /* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */
82b22a99cSSjoerd Simons /*
92b22a99cSSjoerd Simons  * Wirzenius wrote this portably, Torvalds fucked it up :-)
102b22a99cSSjoerd Simons  */
112b22a99cSSjoerd Simons 
122b22a99cSSjoerd Simons #include <common.h>
132b22a99cSSjoerd Simons #if !defined(CONFIG_PANIC_HANG)
142b22a99cSSjoerd Simons #include <command.h>
152b22a99cSSjoerd Simons #endif
162b22a99cSSjoerd Simons 
172b22a99cSSjoerd Simons static void panic_finish(void) __attribute__ ((noreturn));
182b22a99cSSjoerd Simons 
panic_finish(void)192b22a99cSSjoerd Simons static void panic_finish(void)
202b22a99cSSjoerd Simons {
212b22a99cSSjoerd Simons 	putc('\n');
222b22a99cSSjoerd Simons #if defined(CONFIG_PANIC_HANG)
232b22a99cSSjoerd Simons 	hang();
242b22a99cSSjoerd Simons #else
252b22a99cSSjoerd Simons 	udelay(100000);	/* allow messages to go out */
262b22a99cSSjoerd Simons 	do_reset(NULL, 0, 0, NULL);
272b22a99cSSjoerd Simons #endif
282b22a99cSSjoerd Simons 	while (1)
292b22a99cSSjoerd Simons 		;
302b22a99cSSjoerd Simons }
312b22a99cSSjoerd Simons 
panic_str(const char * str)322b22a99cSSjoerd Simons void panic_str(const char *str)
332b22a99cSSjoerd Simons {
342b22a99cSSjoerd Simons 	puts(str);
352b22a99cSSjoerd Simons 	panic_finish();
362b22a99cSSjoerd Simons }
372b22a99cSSjoerd Simons 
panic(const char * fmt,...)382b22a99cSSjoerd Simons void panic(const char *fmt, ...)
392b22a99cSSjoerd Simons {
404f1eed75SAlex Kiernan #if CONFIG_IS_ENABLED(PRINTF)
412b22a99cSSjoerd Simons 	va_list args;
422b22a99cSSjoerd Simons 	va_start(args, fmt);
432b22a99cSSjoerd Simons 	vprintf(fmt, args);
442b22a99cSSjoerd Simons 	va_end(args);
454f1eed75SAlex Kiernan #endif
462b22a99cSSjoerd Simons 	panic_finish();
472b22a99cSSjoerd Simons }
48*e21c03beSAlex Kiernan 
__assert_fail(const char * assertion,const char * file,unsigned int line,const char * function)49*e21c03beSAlex Kiernan void __assert_fail(const char *assertion, const char *file, unsigned int line,
50*e21c03beSAlex Kiernan 		   const char *function)
51*e21c03beSAlex Kiernan {
52*e21c03beSAlex Kiernan 	/* This will not return */
53*e21c03beSAlex Kiernan 	panic("%s:%u: %s: Assertion `%s' failed.", file, line, function,
54*e21c03beSAlex Kiernan 	      assertion);
55*e21c03beSAlex Kiernan }
56