1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 #include "runtime.h" 6 7 extern void gothrow(String) __attribute__((noreturn)); 8 extern void gothrow(String) __asm__(GOSYM_PREFIX "runtime.throw"); 9 10 void runtime_throw(const char * s)11runtime_throw(const char *s) 12 { 13 gothrow(runtime_gostringnocopy((const byte *)s)); 14 } 15 16 void runtime_panicstring(const char * s)17runtime_panicstring(const char *s) 18 { 19 M* mp; 20 Eface err; 21 22 mp = runtime_m(); 23 if (mp != nil) { 24 if(mp->mallocing) { 25 runtime_printf("panic: %s\n", s); 26 runtime_throw("panic during malloc"); 27 } 28 if(mp->gcing) { 29 runtime_printf("panic: %s\n", s); 30 runtime_throw("panic during gc"); 31 } 32 if(mp->locks) { 33 runtime_printf("panic: %s\n", s); 34 runtime_throw("panic holding locks"); 35 } 36 } 37 runtime_newErrorCString(s, &err); 38 runtime_panic(err); 39 } 40