svn commit: r328437 - in head/stand: i386/gptboot libsa
Warner Losh
imp at FreeBSD.org
Fri Jan 26 17:13:01 UTC 2018
Author: imp
Date: Fri Jan 26 17:13:00 2018
New Revision: 328437
URL: https://svnweb.freebsd.org/changeset/base/328437
Log:
Split panic routine
Split panic routine so that the 'Hit Any Key to continue' behavior can
be overriden.
Sponsored by: Netflix
Modified:
head/stand/i386/gptboot/gptboot.c
head/stand/libsa/panic.c
head/stand/libsa/stand.h
Modified: head/stand/i386/gptboot/gptboot.c
==============================================================================
--- head/stand/i386/gptboot/gptboot.c Fri Jan 26 10:49:02 2018 (r328436)
+++ head/stand/i386/gptboot/gptboot.c Fri Jan 26 17:13:00 2018 (r328437)
@@ -102,7 +102,6 @@ static struct bios_smap smap;
static char *heap_next;
static char *heap_end;
-void exit(int);
static void load(void);
static int parse_cmds(char *, int *);
static int dskread(void *, daddr_t, unsigned);
@@ -365,6 +364,7 @@ main(void)
void
exit(int x)
{
+ while (1);
}
static void
Modified: head/stand/libsa/panic.c
==============================================================================
--- head/stand/libsa/panic.c Fri Jan 26 10:49:02 2018 (r328436)
+++ head/stand/libsa/panic.c Fri Jan 26 17:13:00 2018 (r328437)
@@ -39,7 +39,18 @@ __FBSDID("$FreeBSD$");
#include <stand.h>
#include <machine/stdarg.h>
-extern void exit(int) __dead2;
+/*
+ * Boot loaders and other standalone programs that wish to have a
+ * different panic policy can provide their own panic_action rotuine.
+ */
+__weak_symbol void
+panic_action(void)
+{
+ printf("--> Press a key on the console to reboot <--\n");
+ getchar();
+ printf("Rebooting...\n");
+ exit(1);
+}
void
panic(const char *fmt,...)
@@ -51,9 +62,5 @@ panic(const char *fmt,...)
vprintf(fmt, ap);
va_end(ap);
printf("\n");
-
- printf("--> Press a key on the console to reboot <--\n");
- getchar();
- printf("Rebooting...\n");
- exit(1);
+ panic_action();
}
Modified: head/stand/libsa/stand.h
==============================================================================
--- head/stand/libsa/stand.h Fri Jan 26 10:49:02 2018 (r328436)
+++ head/stand/libsa/stand.h Fri Jan 26 17:13:00 2018 (r328437)
@@ -368,7 +368,6 @@ static __inline quad_t qmin(quad_t a, quad_t b) { retu
static __inline u_long ulmax(u_long a, u_long b) { return (a > b ? a : b); }
static __inline u_long ulmin(u_long a, u_long b) { return (a < b ? a : b); }
-
/* null functions for device/filesystem switches (undocumented) */
extern int nodev(void);
extern int noioctl(struct open_file *, u_long, void *);
@@ -387,13 +386,14 @@ extern int null_readdir(struct open_file *f, struct di
* Machine dependent functions and data, must be provided or stubbed by
* the consumer
*/
-extern void exit(int);
+extern void exit(int) __dead2;
extern int getchar(void);
extern int ischar(void);
extern void putchar(int);
extern int devopen(struct open_file *, const char *, const char **);
extern int devclose(struct open_file *f);
extern void panic(const char *, ...) __dead2 __printflike(1, 2);
+extern void panic_action(void) __weak_symbol __dead2;
extern time_t getsecs(void);
extern struct fs_ops *file_system[];
extern struct fs_ops *exclusive_file_system;
More information about the svn-src-all
mailing list