gcc/libgo/runtime/panic.c
Ian Lance Taylor 8a9f2a6bbd compiler, runtime: harmonize types referenced by both C and Go
Compiling with LTO revealed a number of cases in the runtime and
    standard library where C and Go disagreed about the type of an object or
    function (or where Go and code generated by the compiler disagreed). In
    all cases the underlying representation was the same (e.g., uintptr vs.
    void*), so this wasn't causing actual problems, but it did result in a
    number of annoying warnings when compiling with LTO.
    
    Reviewed-on: https://go-review.googlesource.com/c/160700

From-SVN: r268923
2019-02-15 01:57:51 +00:00

48 lines
974 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)
{
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((uintptr) s, &err);
runtime_panic(err);
}
extern void runtime_abort(void) __asm__(GOSYM_PREFIX "runtime.abort");
void
runtime_abort()
{
abort();
}