1
0
mirror of https://github.com/golang/go synced 2024-11-25 06:57:58 -07:00

Correct _cgo_free when C ABI does not pass first arg on stack.

It turns out that _cgo_malloc is used, via cmalloc in
runtime/cgocall.c, which is called by code generated by out.go
for the ·_C_CString function.  I can't find a call to
_cgo_free, but given _cgo_malloc we might as well keep
_cgo_free.  This patch fixes it so that it should work on
amd64.

R=rsc
CC=golang-dev
https://golang.org/cl/1399041
This commit is contained in:
Ian Lance Taylor 2010-05-30 22:22:47 -07:00
parent a63f73c196
commit 1192c175fe
2 changed files with 13 additions and 2 deletions

View File

@ -568,7 +568,7 @@ const cProlog = `
#pragma dynimport libcgo_thread_start libcgo_thread_start "%s/libcgo.so" #pragma dynimport libcgo_thread_start libcgo_thread_start "%s/libcgo.so"
#pragma dynimport libcgo_set_scheduler libcgo_set_scheduler "%s/libcgo.so" #pragma dynimport libcgo_set_scheduler libcgo_set_scheduler "%s/libcgo.so"
#pragma dynimport _cgo_malloc _cgo_malloc "%s/libcgo.so" #pragma dynimport _cgo_malloc _cgo_malloc "%s/libcgo.so"
#pragma dynimport _cgo_free free "%s/libcgo.so" #pragma dynimport _cgo_free _cgo_free "%s/libcgo.so"
void void
·_C_GoString(int8 *p, String s) ·_C_GoString(int8 *p, String s)

View File

@ -4,7 +4,7 @@
#include "libcgo.h" #include "libcgo.h"
/* Stub for calling malloc from the other world */ /* Stub for calling malloc from Go */
void void
_cgo_malloc(void *p) _cgo_malloc(void *p)
{ {
@ -16,6 +16,17 @@ _cgo_malloc(void *p)
a->ret = malloc(a->n); a->ret = malloc(a->n);
} }
/* Stub for calling from Go */
void
_cgo_free(void *p)
{
struct a {
void *arg;
} *a = p;
free(a->arg);
}
/* Stub for creating a new thread */ /* Stub for creating a new thread */
void void
libcgo_thread_start(ThreadStart *arg) libcgo_thread_start(ThreadStart *arg)