9d1e3afb54
The actual stack unwind code is still in C, but the rest of the code, notably all the memory allocation, is now in Go. The names are changed to the names used in the Go 1.7 runtime, but the code is necessarily somewhat different. The __go_makefunc_can_recover function is dropped, as the uses of it were removed in https://golang.org/cl/198770044. Reviewed-on: https://go-review.googlesource.com/33414 From-SVN: r242715
36 lines
823 B
C
36 lines
823 B
C
// 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)
|
|
{
|
|
Eface err;
|
|
|
|
if(runtime_m()->mallocing) {
|
|
runtime_printf("panic: %s\n", s);
|
|
runtime_throw("panic during malloc");
|
|
}
|
|
if(runtime_m()->gcing) {
|
|
runtime_printf("panic: %s\n", s);
|
|
runtime_throw("panic during gc");
|
|
}
|
|
if(runtime_m()->locks) {
|
|
runtime_printf("panic: %s\n", s);
|
|
runtime_throw("panic holding locks");
|
|
}
|
|
runtime_newErrorCString(s, &err);
|
|
runtime_panic(err);
|
|
}
|