1
2
3
4
5 package p
6
7 import (
8 "fmt"
9 "runtime"
10 )
11
12 var y int
13
14
15 func Square(x int) {
16 var pc0, pc1 [1]uintptr
17 runtime.Callers(1, pc0[:])
18
19
20 switch x {
21 case 1:
22 y = 1
23 case 2:
24 y = 4
25 case 3:
26 y = 9
27 case 4:
28 y = 16
29 case 5:
30 y = 25
31 case 6:
32 y = 36
33 case 7:
34 y = 49
35 case 8:
36 y = 64
37 default:
38 panic("too large")
39 }
40
41
42 runtime.Callers(1, pc1[:])
43 if pc1[0] < pc0[0] || pc1[0] > pc0[0]+1000000 {
44 fmt.Printf("jump across DSO boundary. pc0=%x, pc1=%x\n", pc0[0], pc1[0])
45 panic("FAIL")
46 }
47
48 if y != x*x {
49 fmt.Printf("x=%d y=%d!=%d\n", x, y, x*x)
50 panic("FAIL")
51 }
52 }
53
View as plain text