| // 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) |
| { |
| M* mp; |
| Eface err; |
| |
| mp = runtime_m(); |
| if (mp != nil) { |
| if(mp->mallocing) { |
| runtime_printf("panic: %s\n", s); |
| runtime_throw("panic during malloc"); |
| } |
| if(mp->gcing) { |
| runtime_printf("panic: %s\n", s); |
| runtime_throw("panic during gc"); |
| } |
| if(mp->locks) { |
| runtime_printf("panic: %s\n", s); |
| runtime_throw("panic holding locks"); |
| } |
| } |
| runtime_newErrorCString(s, &err); |
| runtime_panic(err); |
| } |