Viewing file: panic.c (1.31 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// Copyright 2012 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file.
#include "runtime.h"
extern void gothrow(String) __attribute__((noreturn)); extern void gothrow(String) __asm__(GOSYM_PREFIX "runtime.throw");
void runtime_throw(const char *s) { gothrow(runtime_gostringnocopy((const byte *)s)); }
void runtime_panicstring(const char *s) { G *gp; Eface err;
gp = runtime_g(); if (gp == nil) { runtime_printf("panic: %s\n", s); runtime_throw("panic with no g"); } if (gp->m == nil) { runtime_printf("panic: %s\n", s); runtime_throw("panic with no m"); } if (gp->m->curg != gp) { runtime_printf("panic: %s\n", s); runtime_throw("panic on system stack"); } if (gp->m->mallocing != 0) { runtime_printf("panic: %s\n", s); runtime_throw("panic during malloc"); } if (gp->m->preemptoff.len != 0) { runtime_printf("panic: %s\n", s); runtime_printf("preempt off reason: %S\n", gp->m->preemptoff); runtime_throw("panic during preemptoff"); } if (gp->m->locks != 0) { runtime_printf("panic: %s\n", s); runtime_throw("panic holding locks"); } runtime_newErrorCString((uintptr) s, &err); runtime_panic(err); }
extern void runtime_abort(void) __asm__(GOSYM_PREFIX "runtime.abort");
void runtime_abort() { abort(); }
|