mirror of
https://github.com/golang/go
synced 2024-11-19 16:14:49 -07:00
dc370995a8
Cgo writes C function declarations pretending every arg is a pointer. If the C function is deferred, it does not inhibit stack copying on split. The stack copying code believes the C declaration, possibly misinterpreting integers as pointers. Probably the right fix for Go 1.3 is to make deferred C functions inhibit stack copying. For Go 1.4 and beyond we probably need to make cgo generate Go code for 6g here, not C code for 6c. Update #7695 LGTM=khr R=khr CC=golang-codereviews https://golang.org/cl/83820043
33 lines
616 B
C
33 lines
616 B
C
// Copyright 2011 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.
|
|
|
|
// Expose some runtime functions for testing.
|
|
// Must be in a non-cgo-using package so that
|
|
// the go command compiles this file with 6c, not gcc.
|
|
|
|
// +build gc
|
|
|
|
typedef char bool;
|
|
|
|
bool runtime·lockedOSThread(void);
|
|
|
|
static void
|
|
FLUSH(void*)
|
|
{
|
|
}
|
|
|
|
void
|
|
·LockedOSThread(bool b)
|
|
{
|
|
b = runtime·lockedOSThread();
|
|
FLUSH(&b);
|
|
}
|
|
|
|
// This is what a cgo-compiled stub declaration looks like.
|
|
void
|
|
·Issue7695(struct{void *y[8*sizeof(void*)];}p)
|
|
{
|
|
USED(p);
|
|
}
|