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)11 runtime_throw(const char *s)
12 {
13 	gothrow(runtime_gostringnocopy((const byte *)s));
14 }
15 
16 void
runtime_panicstring(const char * s)17 runtime_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