1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * linux/lib/vsprintf.c 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 1991, 1992 Linus Torvalds 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun /* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ 8*4882a593Smuzhiyun /* 9*4882a593Smuzhiyun * Wirzenius wrote this portably, Torvalds fucked it up :-) 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #include <common.h> 13*4882a593Smuzhiyun #if !defined(CONFIG_PANIC_HANG) 14*4882a593Smuzhiyun #include <command.h> 15*4882a593Smuzhiyun #endif 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun static void panic_finish(void) __attribute__ ((noreturn)); 18*4882a593Smuzhiyun panic_finish(void)19*4882a593Smuzhiyunstatic void panic_finish(void) 20*4882a593Smuzhiyun { 21*4882a593Smuzhiyun putc('\n'); 22*4882a593Smuzhiyun #if defined(CONFIG_PANIC_HANG) 23*4882a593Smuzhiyun hang(); 24*4882a593Smuzhiyun #else 25*4882a593Smuzhiyun udelay(100000); /* allow messages to go out */ 26*4882a593Smuzhiyun do_reset(NULL, 0, 0, NULL); 27*4882a593Smuzhiyun #endif 28*4882a593Smuzhiyun while (1) 29*4882a593Smuzhiyun ; 30*4882a593Smuzhiyun } 31*4882a593Smuzhiyun panic_str(const char * str)32*4882a593Smuzhiyunvoid panic_str(const char *str) 33*4882a593Smuzhiyun { 34*4882a593Smuzhiyun puts(str); 35*4882a593Smuzhiyun panic_finish(); 36*4882a593Smuzhiyun } 37*4882a593Smuzhiyun panic(const char * fmt,...)38*4882a593Smuzhiyunvoid panic(const char *fmt, ...) 39*4882a593Smuzhiyun { 40*4882a593Smuzhiyun va_list args; 41*4882a593Smuzhiyun va_start(args, fmt); 42*4882a593Smuzhiyun vprintf(fmt, args); 43*4882a593Smuzhiyun va_end(args); 44*4882a593Smuzhiyun panic_finish(); 45*4882a593Smuzhiyun } 46