1// Copyright 2015 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
7import "C"
8
9import (
10	"fmt"
11	"os"
12	"runtime"
13)
14
15// RunGoroutines starts some goroutines that don't do anything.
16// The idea is to get some threads going, so that a signal will be delivered
17// to a thread started by Go.
18//
19//export RunGoroutines
20func RunGoroutines() {
21	for i := 0; i < 4; i++ {
22		go func() {
23			runtime.LockOSThread()
24			select {}
25		}()
26	}
27}
28
29var P *byte
30
31// TestSEGV makes sure that an invalid address turns into a run-time Go panic.
32//
33//export TestSEGV
34func TestSEGV() {
35	defer func() {
36		if recover() == nil {
37			fmt.Fprintln(os.Stderr, "no panic from segv")
38			os.Exit(1)
39		}
40	}()
41	*P = 0
42	fmt.Fprintln(os.Stderr, "continued after segv")
43	os.Exit(1)
44}
45
46func main() {
47}
48