Mercurial > hg > CbC > CbC_gcc
view libgo/runtime/panic.c @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
// 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(); }