Print this page
10099 libfakekernel vpanic() should cast away assfail()


   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  23  * Copyright (c) 2012 by Delphix. All rights reserved.
  24  * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
  25  * Copyright 2017 RackTop Systems.

  26  */
  27 
  28 #include <sys/param.h>
  29 #include <sys/types.h>
  30 #include <sys/varargs.h>
  31 #include <sys/systm.h>
  32 #include <sys/cmn_err.h>
  33 #include <sys/log.h>
  34 
  35 #include <fakekernel.h>
  36 
  37 void    abort(void) __NORETURN;
  38 
  39 char *volatile panicstr;
  40 va_list  panicargs;
  41 char panicbuf[512];
  42 
  43 volatile int aok;
  44 
  45 static const int


  98 
  99         fakekernel_putlog(bufp, len, flags);
 100 }
 101 
 102 /*
 103  * "User-level crash dump", if you will.
 104  */
 105 void
 106 vpanic(const char *fmt, va_list adx)
 107 {
 108         va_list tmpargs;
 109 
 110         panicstr = (char *)fmt;
 111         va_copy(panicargs, adx);
 112 
 113         va_copy(tmpargs, adx);
 114         fakekernel_cprintf(fmt, tmpargs, SL_FATAL, "fatal: ", "\n");
 115 
 116         /* Call libc`assfail() so that mdb ::status works */
 117         (void) vsnprintf(panicbuf, sizeof (panicbuf), fmt, adx);
 118         assfail(panicbuf, "(panic)", 0);
 119 
 120         abort();        /* avoid "noreturn" warnings */
 121 }
 122 
 123 void
 124 panic(const char *fmt, ...)
 125 {
 126         va_list adx;
 127 
 128         va_start(adx, fmt);
 129         vpanic(fmt, adx);
 130         va_end(adx);
 131 }
 132 
 133 void
 134 fm_panic(const char *fmt, ...)
 135 {
 136         va_list adx;
 137 
 138         va_start(adx, fmt);




   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  23  * Copyright (c) 2012 by Delphix. All rights reserved.
  24  * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
  25  * Copyright 2017 RackTop Systems.
  26  * Copyright (c) 2018, Joyent, Inc.
  27  */
  28 
  29 #include <sys/param.h>
  30 #include <sys/types.h>
  31 #include <sys/varargs.h>
  32 #include <sys/systm.h>
  33 #include <sys/cmn_err.h>
  34 #include <sys/log.h>
  35 
  36 #include <fakekernel.h>
  37 
  38 void    abort(void) __NORETURN;
  39 
  40 char *volatile panicstr;
  41 va_list  panicargs;
  42 char panicbuf[512];
  43 
  44 volatile int aok;
  45 
  46 static const int


  99 
 100         fakekernel_putlog(bufp, len, flags);
 101 }
 102 
 103 /*
 104  * "User-level crash dump", if you will.
 105  */
 106 void
 107 vpanic(const char *fmt, va_list adx)
 108 {
 109         va_list tmpargs;
 110 
 111         panicstr = (char *)fmt;
 112         va_copy(panicargs, adx);
 113 
 114         va_copy(tmpargs, adx);
 115         fakekernel_cprintf(fmt, tmpargs, SL_FATAL, "fatal: ", "\n");
 116 
 117         /* Call libc`assfail() so that mdb ::status works */
 118         (void) vsnprintf(panicbuf, sizeof (panicbuf), fmt, adx);
 119         (void) assfail(panicbuf, "(panic)", 0);
 120 
 121         abort();        /* avoid "noreturn" warnings */
 122 }
 123 
 124 void
 125 panic(const char *fmt, ...)
 126 {
 127         va_list adx;
 128 
 129         va_start(adx, fmt);
 130         vpanic(fmt, adx);
 131         va_end(adx);
 132 }
 133 
 134 void
 135 fm_panic(const char *fmt, ...)
 136 {
 137         va_list adx;
 138 
 139         va_start(adx, fmt);