Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(427)

Delta Between Two Patch Sets: misc/cgo/test/callback.go

Issue 160200044: [dev.power64] code review 160200044: build: merge default into dev.power64 (Closed)
Left Patch Set: diff -r be0c14f62257b42485019e9e1db23cf40d2e249f https://code.google.com/p/go Created 10 years, 4 months ago
Right Patch Set: diff -r be0c14f62257b42485019e9e1db23cf40d2e249f https://code.google.com/p/go Created 10 years, 4 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Right: Side by side diff | Download
« no previous file with change/comment | « misc/cgo/test/buildid_linux.go ('k') | misc/cgo/test/cgo_linux_test.go » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
(no file at all)
1 // Copyright 2011 The Go Authors. All rights reserved. 1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 package cgotest 5 package cgotest
6 6
7 /* 7 /*
8 void callback(void *f); 8 void callback(void *f);
9 void callGoFoo(void); 9 void callGoFoo(void);
10 void callGoStackCheck(void); 10 void callGoStackCheck(void);
11 void callPanic(void); 11 void callPanic(void);
12 */ 12 */
13 import "C" 13 import "C"
14 14
15 import ( 15 import (
16 "./backdoor"
17 "path" 16 "path"
18 "runtime" 17 "runtime"
19 "strings" 18 "strings"
20 "testing" 19 "testing"
21 "unsafe" 20 "unsafe"
21
22 "./backdoor"
22 ) 23 )
23 24
24 // nestedCall calls into C, back into Go, and finally to f. 25 // nestedCall calls into C, back into Go, and finally to f.
25 func nestedCall(f func()) { 26 func nestedCall(f func()) {
26 // NOTE: Depends on representation of f. 27 // NOTE: Depends on representation of f.
27 // callback(x) calls goCallback(x) 28 // callback(x) calls goCallback(x)
28 C.callback(*(*unsafe.Pointer)(unsafe.Pointer(&f))) 29 C.callback(*(*unsafe.Pointer)(unsafe.Pointer(&f)))
29 } 30 }
30 31
31 //export goCallback 32 //export goCallback
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 // into Go. 146 // into Go.
146 func testCallbackCallers(t *testing.T) { 147 func testCallbackCallers(t *testing.T) {
147 if runtime.Compiler != "gc" { 148 if runtime.Compiler != "gc" {
148 // The exact function names are not going to be the same. 149 // The exact function names are not going to be the same.
149 t.Skip("skipping for non-gc toolchain") 150 t.Skip("skipping for non-gc toolchain")
150 } 151 }
151 pc := make([]uintptr, 100) 152 pc := make([]uintptr, 100)
152 n := 0 153 n := 0
153 name := []string{ 154 name := []string{
154 "test.goCallback", 155 "test.goCallback",
156 "runtime.call16",
155 "runtime.cgocallbackg1", 157 "runtime.cgocallbackg1",
156 "runtime.cgocallbackg", 158 "runtime.cgocallbackg",
157 "runtime.cgocallback_gofunc", 159 "runtime.cgocallback_gofunc",
158 » » "runtime.asmcgocall", 160 » » "asmcgocall",
159 » » "runtime.cgocall", 161 » » "runtime.asmcgocall_errno",
162 » » "runtime.cgocall_errno",
160 "test._Cfunc_callback", 163 "test._Cfunc_callback",
161 "test.nestedCall", 164 "test.nestedCall",
162 "test.testCallbackCallers", 165 "test.testCallbackCallers",
163 "test.TestCallbackCallers", 166 "test.TestCallbackCallers",
164 "testing.tRunner", 167 "testing.tRunner",
165 "runtime.goexit", 168 "runtime.goexit",
166 } 169 }
167 nestedCall(func() { 170 nestedCall(func() {
168 n = runtime.Callers(2, pc) 171 n = runtime.Callers(2, pc)
169 }) 172 })
170 if n != len(name) { 173 if n != len(name) {
171 t.Errorf("expected %d frames, got %d", len(name), n) 174 t.Errorf("expected %d frames, got %d", len(name), n)
172 } 175 }
173 for i := 0; i < n; i++ { 176 for i := 0; i < n; i++ {
174 f := runtime.FuncForPC(pc[i]) 177 f := runtime.FuncForPC(pc[i])
175 if f == nil { 178 if f == nil {
176 t.Fatalf("expected non-nil Func for pc %p", pc[i]) 179 t.Fatalf("expected non-nil Func for pc %p", pc[i])
177 } 180 }
178 fname := f.Name() 181 fname := f.Name()
179 // Remove the prepended pathname from automatically 182 // Remove the prepended pathname from automatically
180 // generated cgo function names. 183 // generated cgo function names.
181 if strings.HasPrefix(fname, "_") { 184 if strings.HasPrefix(fname, "_") {
182 fname = path.Base(f.Name()[1:]) 185 fname = path.Base(f.Name()[1:])
183 } 186 }
184 » » if fname != name[i] { 187 » » namei := ""
185 » » » t.Errorf("expected function name %s, got %s", name[i], f name) 188 » » if i < len(name) {
189 » » » namei = name[i]
190 » » }
191 » » if fname != namei {
192 » » » t.Errorf("stk[%d] = %q, want %q", i, fname, namei)
186 } 193 }
187 } 194 }
188 } 195 }
189 196
190 func testPanicFromC(t *testing.T) { 197 func testPanicFromC(t *testing.T) {
191 defer func() { 198 defer func() {
192 r := recover() 199 r := recover()
193 if r == nil { 200 if r == nil {
194 t.Fatal("did not panic") 201 t.Fatal("did not panic")
195 } 202 }
(...skipping 1483 matching lines...) Expand 10 before | Expand all | Expand 10 after
1679 func stack4964() { var buf [4964]byte; use(buf[:]); C.callGoStackCheck() } 1686 func stack4964() { var buf [4964]byte; use(buf[:]); C.callGoStackCheck() }
1680 func stack4968() { var buf [4968]byte; use(buf[:]); C.callGoStackCheck() } 1687 func stack4968() { var buf [4968]byte; use(buf[:]); C.callGoStackCheck() }
1681 func stack4972() { var buf [4972]byte; use(buf[:]); C.callGoStackCheck() } 1688 func stack4972() { var buf [4972]byte; use(buf[:]); C.callGoStackCheck() }
1682 func stack4976() { var buf [4976]byte; use(buf[:]); C.callGoStackCheck() } 1689 func stack4976() { var buf [4976]byte; use(buf[:]); C.callGoStackCheck() }
1683 func stack4980() { var buf [4980]byte; use(buf[:]); C.callGoStackCheck() } 1690 func stack4980() { var buf [4980]byte; use(buf[:]); C.callGoStackCheck() }
1684 func stack4984() { var buf [4984]byte; use(buf[:]); C.callGoStackCheck() } 1691 func stack4984() { var buf [4984]byte; use(buf[:]); C.callGoStackCheck() }
1685 func stack4988() { var buf [4988]byte; use(buf[:]); C.callGoStackCheck() } 1692 func stack4988() { var buf [4988]byte; use(buf[:]); C.callGoStackCheck() }
1686 func stack4992() { var buf [4992]byte; use(buf[:]); C.callGoStackCheck() } 1693 func stack4992() { var buf [4992]byte; use(buf[:]); C.callGoStackCheck() }
1687 func stack4996() { var buf [4996]byte; use(buf[:]); C.callGoStackCheck() } 1694 func stack4996() { var buf [4996]byte; use(buf[:]); C.callGoStackCheck() }
1688 func stack5000() { var buf [5000]byte; use(buf[:]); C.callGoStackCheck() } 1695 func stack5000() { var buf [5000]byte; use(buf[:]); C.callGoStackCheck() }
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b