mirror of
https://github.com/golang/go
synced 2024-11-21 22:24:40 -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:
parent
a63f73c196
commit
1192c175fe
@ -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)
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user