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