Blame view

lib/panic.c 1009 Bytes
2b22a99c6   Sjoerd Simons   lib: Split panic ...
1
2
3
4
5
6
7
8
9
10
11
12
  /*
   *  linux/lib/vsprintf.c
   *
   *  Copyright (C) 1991, 1992  Linus Torvalds
   */
  
  /* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */
  /*
   * Wirzenius wrote this portably, Torvalds fucked it up :-)
   */
  
  #include <common.h>
db41d65a9   Simon Glass   common: Move hang...
13
  #include <hang.h>
2b22a99c6   Sjoerd Simons   lib: Split panic ...
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  #if !defined(CONFIG_PANIC_HANG)
  #include <command.h>
  #endif
  
  static void panic_finish(void) __attribute__ ((noreturn));
  
  static void panic_finish(void)
  {
  	putc('
  ');
  #if defined(CONFIG_PANIC_HANG)
  	hang();
  #else
  	udelay(100000);	/* allow messages to go out */
  	do_reset(NULL, 0, 0, NULL);
  #endif
  	while (1)
  		;
  }
  
  void panic_str(const char *str)
  {
  	puts(str);
  	panic_finish();
  }
  
  void panic(const char *fmt, ...)
  {
4f1eed752   Alex Kiernan   spl: Disable prin...
42
  #if CONFIG_IS_ENABLED(PRINTF)
2b22a99c6   Sjoerd Simons   lib: Split panic ...
43
44
45
46
  	va_list args;
  	va_start(args, fmt);
  	vprintf(fmt, args);
  	va_end(args);
4f1eed752   Alex Kiernan   spl: Disable prin...
47
  #endif
2b22a99c6   Sjoerd Simons   lib: Split panic ...
48
49
  	panic_finish();
  }
e21c03be6   Alex Kiernan   Consolidate __ass...
50
51
52
53
54
55
56
57
  
  void __assert_fail(const char *assertion, const char *file, unsigned int line,
  		   const char *function)
  {
  	/* This will not return */
  	panic("%s:%u: %s: Assertion `%s' failed.", file, line, function,
  	      assertion);
  }