1// Copyright 2016 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 5package main 6 7// This program will crash. 8// We want the stack trace to include the C functions. 9// We use a fake traceback, and a symbolizer that dumps a string we recognize. 10 11/* 12#cgo CFLAGS: -g -O0 13 14// Defined in traceback_c.c. 15extern int crashInGo; 16int tracebackF1(void); 17void cgoTraceback(void* parg); 18void cgoSymbolizer(void* parg); 19*/ 20import "C" 21 22import ( 23 "runtime" 24 "unsafe" 25) 26 27func init() { 28 register("CrashTraceback", CrashTraceback) 29 register("CrashTracebackGo", CrashTracebackGo) 30} 31 32func CrashTraceback() { 33 runtime.SetCgoTraceback(0, unsafe.Pointer(C.cgoTraceback), nil, unsafe.Pointer(C.cgoSymbolizer)) 34 C.tracebackF1() 35} 36 37func CrashTracebackGo() { 38 C.crashInGo = 1 39 CrashTraceback() 40} 41 42//export h1 43func h1() { 44 h2() 45} 46 47func h2() { 48 h3() 49} 50 51func h3() { 52 var x *int 53 *x = 0 54} 55