X7ROOT File Manager
Current Path:
/opt/golang/1.22.0/src/runtime/testdata/testprogcgo
opt
/
golang
/
1.22.0
/
src
/
runtime
/
testdata
/
testprogcgo
/
📁
..
📄
aprof.go
(1.14 KB)
📄
aprof_c.c
(217 B)
📄
bigstack1_windows.c
(379 B)
📄
bigstack_windows.c
(1.2 KB)
📄
bigstack_windows.go
(586 B)
📄
bindm.c
(692 B)
📄
bindm.go
(1.2 KB)
📄
callback.go
(1.86 KB)
📄
catchpanic.go
(993 B)
📄
cgo.go
(1.82 KB)
📄
cgonocallback.c
(236 B)
📄
cgonocallback.go
(629 B)
📄
cgonoescape.go
(1.84 KB)
📄
crash.go
(743 B)
📄
deadlock.go
(509 B)
📄
destructor.c
(459 B)
📄
destructor.go
(442 B)
📄
dll_windows.go
(459 B)
📄
dropm.go
(1.05 KB)
📄
dropm_stub.go
(336 B)
📄
eintr.go
(5.17 KB)
📄
exec.go
(2.1 KB)
📄
gprof.go
(868 B)
📄
gprof_c.c
(700 B)
📄
issue29707.go
(1.15 KB)
📄
lockosthread.c
(301 B)
📄
lockosthread.go
(2.52 KB)
📄
main.go
(651 B)
📄
needmdeadlock.go
(1.83 KB)
📄
numgoroutine.go
(1.91 KB)
📄
panic.c
(239 B)
📄
panic.go
(312 B)
📄
pprof.go
(1.67 KB)
📄
pprof_callback.go
(1.82 KB)
📄
raceprof.go
(1.67 KB)
📄
racesig.go
(1.67 KB)
📄
segv.go
(525 B)
📄
segv_linux.go
(546 B)
📄
sigfwd.go
(1.58 KB)
📄
sigpanic.go
(484 B)
📄
sigstack.go
(2.09 KB)
📄
sigthrow.go
(312 B)
📄
stack_windows.go
(1.1 KB)
📄
stackswitch.c
(3.88 KB)
📄
stackswitch.go
(1.07 KB)
📄
threadpanic.go
(428 B)
📄
threadpanic_unix.c
(435 B)
📄
threadpanic_windows.c
(435 B)
📄
threadpprof.go
(2.54 KB)
📄
threadprof.go
(2.41 KB)
📄
trace.go
(1.15 KB)
📄
trace_unix.c
(688 B)
📄
trace_windows.c
(777 B)
📄
traceback.go
(949 B)
📄
traceback_c.c
(1.21 KB)
📄
tracebackctxt.go
(2.85 KB)
📄
tracebackctxt_c.c
(2.33 KB)
📁
windows
Editing: tracebackctxt_c.c
// Copyright 2016 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 tracebackctxt.go. That file uses //export so // it can't put function definitions in the "C" import comment. #include <stdlib.h> #include <stdint.h> // Functions exported from Go. extern void G1(void); extern void G2(void); extern void TracebackContextPreemptionGoFunction(int); void C1() { G1(); } void C2() { G2(); } struct cgoContextArg { uintptr_t context; }; 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; }; // Uses atomic adds and subtracts to catch the possibility of // erroneous calls from multiple threads; that should be impossible in // this test case, but we check just in case. static int contextCount; int getContextCount() { return __sync_add_and_fetch(&contextCount, 0); } void tcContext(void* parg) { struct cgoContextArg* arg = (struct cgoContextArg*)(parg); if (arg->context == 0) { arg->context = __sync_add_and_fetch(&contextCount, 1); } else { if (arg->context != __sync_add_and_fetch(&contextCount, 0)) { abort(); } __sync_sub_and_fetch(&contextCount, 1); } } void tcContextSimple(void* parg) { struct cgoContextArg* arg = (struct cgoContextArg*)(parg); if (arg->context == 0) { arg->context = 1; } } void tcTraceback(void* parg) { int base, i; struct cgoTracebackArg* arg = (struct cgoTracebackArg*)(parg); if (arg->context == 0 && arg->sigContext == 0) { // This shouldn't happen in this program. abort(); } // Return a variable number of PC values. base = arg->context << 8; for (i = 0; i < arg->context; i++) { if (i < arg->max) { arg->buf[i] = base + i; } } } void tcSymbolizer(void *parg) { struct cgoSymbolizerArg* arg = (struct cgoSymbolizerArg*)(parg); if (arg->pc == 0) { return; } // Report two lines per PC returned by traceback, to test more handling. arg->more = arg->file == NULL; arg->file = "tracebackctxt.go"; arg->func = "cFunction"; arg->lineno = arg->pc + (arg->more << 16); } void TracebackContextPreemptionCallGo(int i) { TracebackContextPreemptionGoFunction(i); }
Upload File
Create Folder