8a9f2a6bbd
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
48 lines
974 B
C
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();
|
|
}
|