...
1// Copyright 2020 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
5// The C definitions for traceback.go. That file uses //export so
6// it can't put function definitions in the "C" import comment.
7
8#include <stdint.h>
9
10char *p;
11
12int crashInGo;
13extern void h1(void);
14
15int tracebackF3(void) {
16 if (crashInGo)
17 h1();
18 else
19 *p = 0;
20 return 0;
21}
22
23int tracebackF2(void) {
24 return tracebackF3();
25}
26
27int tracebackF1(void) {
28 return tracebackF2();
29}
30
31struct cgoTracebackArg {
32 uintptr_t context;
33 uintptr_t sigContext;
34 uintptr_t* buf;
35 uintptr_t max;
36};
37
38struct cgoSymbolizerArg {
39 uintptr_t pc;
40 const char* file;
41 uintptr_t lineno;
42 const char* func;
43 uintptr_t entry;
44 uintptr_t more;
45 uintptr_t data;
46};
47
48void cgoTraceback(void* parg) {
49 struct cgoTracebackArg* arg = (struct cgoTracebackArg*)(parg);
50 arg->buf[0] = 1;
51 arg->buf[1] = 2;
52 arg->buf[2] = 3;
53 arg->buf[3] = 0;
54}
55
56void cgoSymbolizer(void* parg) {
57 struct cgoSymbolizerArg* arg = (struct cgoSymbolizerArg*)(parg);
58 if (arg->pc != arg->data + 1) {
59 arg->file = "unexpected data";
60 } else {
61 arg->file = "cgo symbolizer";
62 }
63 arg->lineno = arg->data + 1;
64 arg->data++;
65}
View as plain text