mirror of
https://github.com/golang/go
synced 2024-11-11 19:41:36 -07:00
runtime/testdata/testprogcgo: refactor CrashTraceback
This moves the C part of the CrashTraceback test into its own file in preparation for adding a test that transitions back into Go. Change-Id: I9560dcfd80bf8a1d30809fd360f958f5261ebb01 Reviewed-on: https://go-review.googlesource.com/c/go/+/272130 Trust: Austin Clements <austin@google.com> Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
65dcd15c72
commit
ba2adc21e8
58
src/runtime/testdata/testprogcgo/traceback.go
vendored
58
src/runtime/testdata/testprogcgo/traceback.go
vendored
@ -11,58 +11,10 @@ package main
|
||||
/*
|
||||
#cgo CFLAGS: -g -O0
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
char *p;
|
||||
|
||||
static int f3(void) {
|
||||
*p = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int f2(void) {
|
||||
return f3();
|
||||
}
|
||||
|
||||
static int f1(void) {
|
||||
return f2();
|
||||
}
|
||||
|
||||
struct cgoTracebackArg {
|
||||
uintptr_t context;
|
||||
uintptr_t sigContext;
|
||||
uintptr_t* buf;
|
||||
uintptr_t max;
|
||||
};
|
||||
|
||||
struct cgoSymbolizerArg {
|
||||
uintptr_t pc;
|
||||
const char* file;
|
||||
uintptr_t lineno;
|
||||
const char* func;
|
||||
uintptr_t entry;
|
||||
uintptr_t more;
|
||||
uintptr_t data;
|
||||
};
|
||||
|
||||
void cgoTraceback(void* parg) {
|
||||
struct cgoTracebackArg* arg = (struct cgoTracebackArg*)(parg);
|
||||
arg->buf[0] = 1;
|
||||
arg->buf[1] = 2;
|
||||
arg->buf[2] = 3;
|
||||
arg->buf[3] = 0;
|
||||
}
|
||||
|
||||
void cgoSymbolizer(void* parg) {
|
||||
struct cgoSymbolizerArg* arg = (struct cgoSymbolizerArg*)(parg);
|
||||
if (arg->pc != arg->data + 1) {
|
||||
arg->file = "unexpected data";
|
||||
} else {
|
||||
arg->file = "cgo symbolizer";
|
||||
}
|
||||
arg->lineno = arg->data + 1;
|
||||
arg->data++;
|
||||
}
|
||||
// Defined in traceback_c.c.
|
||||
int tracebackF1(void);
|
||||
void cgoTraceback(void* parg);
|
||||
void cgoSymbolizer(void* parg);
|
||||
*/
|
||||
import "C"
|
||||
|
||||
@ -77,5 +29,5 @@ func init() {
|
||||
|
||||
func CrashTraceback() {
|
||||
runtime.SetCgoTraceback(0, unsafe.Pointer(C.cgoTraceback), nil, unsafe.Pointer(C.cgoSymbolizer))
|
||||
C.f1()
|
||||
C.tracebackF1()
|
||||
}
|
||||
|
58
src/runtime/testdata/testprogcgo/traceback_c.c
vendored
Normal file
58
src/runtime/testdata/testprogcgo/traceback_c.c
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
// Copyright 2020 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// The C definitions for traceback.go.
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
char *p;
|
||||
|
||||
int tracebackF3(void) {
|
||||
*p = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tracebackF2(void) {
|
||||
return tracebackF3();
|
||||
}
|
||||
|
||||
int tracebackF1(void) {
|
||||
return tracebackF2();
|
||||
}
|
||||
|
||||
struct cgoTracebackArg {
|
||||
uintptr_t context;
|
||||
uintptr_t sigContext;
|
||||
uintptr_t* buf;
|
||||
uintptr_t max;
|
||||
};
|
||||
|
||||
struct cgoSymbolizerArg {
|
||||
uintptr_t pc;
|
||||
const char* file;
|
||||
uintptr_t lineno;
|
||||
const char* func;
|
||||
uintptr_t entry;
|
||||
uintptr_t more;
|
||||
uintptr_t data;
|
||||
};
|
||||
|
||||
void cgoTraceback(void* parg) {
|
||||
struct cgoTracebackArg* arg = (struct cgoTracebackArg*)(parg);
|
||||
arg->buf[0] = 1;
|
||||
arg->buf[1] = 2;
|
||||
arg->buf[2] = 3;
|
||||
arg->buf[3] = 0;
|
||||
}
|
||||
|
||||
void cgoSymbolizer(void* parg) {
|
||||
struct cgoSymbolizerArg* arg = (struct cgoSymbolizerArg*)(parg);
|
||||
if (arg->pc != arg->data + 1) {
|
||||
arg->file = "unexpected data";
|
||||
} else {
|
||||
arg->file = "cgo symbolizer";
|
||||
}
|
||||
arg->lineno = arg->data + 1;
|
||||
arg->data++;
|
||||
}
|
Loading…
Reference in New Issue
Block a user