// 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.

package runtime

import "unsafe"

// These functions are called from C code via cgo/callbacks.go.

// Allocate memory.  This allocates the requested number of bytes in
// memory controlled by the Go runtime.  The allocated memory will be
// zeroed.  You are responsible for ensuring that the Go garbage
// collector can see a pointer to the allocated memory for as long as
// it is valid, e.g., by storing a pointer in a local variable in your
// C function, or in memory allocated by the Go runtime.  If the only
// pointers are in a C global variable or in memory allocated via
// malloc, then the Go garbage collector may collect the memory.
//
// TODO(rsc,iant): This memory is untyped.
// Either we need to add types or we need to stop using it.

func _cgo_allocate_internal(len uintptr) unsafe.Pointer {
	if len == 0 {
		len = 1
	}
	ret := unsafe.Pointer(&make([]unsafe.Pointer, (len+ptrSize-1)/ptrSize)[0])
	c := new(cgomal)
	c.alloc = ret
	gp := getg()
	c.next = gp.m.cgomal
	gp.m.cgomal = c
	return ret
}

// Panic.

func _cgo_panic_internal(p *byte) {
	panic(gostringnocopy(p))
}
