mirror of
https://github.com/golang/go
synced 2024-11-24 23:37:56 -07:00
libcgo: initial mingw port work - builds but untested
R=rsc CC=golang-dev https://golang.org/cl/812041
This commit is contained in:
parent
0085e35498
commit
1d37c11657
2
src/libcgo/386.S
Normal file → Executable file
2
src/libcgo/386.S
Normal file → Executable file
@ -5,7 +5,7 @@
|
||||
/*
|
||||
* Apple still insists on underscore prefixes for C function names.
|
||||
*/
|
||||
#ifdef __APPLE__
|
||||
#if defined(__APPLE__) || defined(__MINGW32__)
|
||||
#define EXT(s) _##s
|
||||
#else
|
||||
#define EXT(s) s
|
||||
|
2
src/libcgo/Makefile
Normal file → Executable file
2
src/libcgo/Makefile
Normal file → Executable file
@ -19,9 +19,11 @@ OFILES=\
|
||||
CFLAGS_386=-m32
|
||||
CFLAGS_amd64=-m64
|
||||
|
||||
|
||||
LDFLAGS_linux=-shared -lpthread -lm
|
||||
LDFLAGS_darwin=-dynamiclib -Wl,-undefined,dynamic_lookup /usr/lib/libpthread.dylib
|
||||
LDFLAGS_freebsd=-pthread -shared -lm
|
||||
LDFLAGS_mingw=-shared -lm -mthreads
|
||||
|
||||
%.o: %.c
|
||||
gcc $(CFLAGS_$(GOARCH)) -O2 -fPIC -o $@ -c $*.c
|
||||
|
@ -5,7 +5,7 @@
|
||||
/*
|
||||
* Apple still insists on underscore prefixes for C function names.
|
||||
*/
|
||||
#ifdef __APPLE__
|
||||
#if defined(__APPLE__) || defined(__MINGW64__)
|
||||
#define EXT(s) _##s
|
||||
#else
|
||||
#define EXT(s) s
|
||||
|
45
src/libcgo/mingw_386.c
Executable file
45
src/libcgo/mingw_386.c
Executable file
@ -0,0 +1,45 @@
|
||||
// Copyright 2009 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.
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include "libcgo.h"
|
||||
|
||||
static void *threadentry(void*);
|
||||
|
||||
/* From what I've read 1MB is default for 32-bit Linux.
|
||||
Allocation granularity on Windows is typically 64 KB. */
|
||||
#define STACKSIZE (1*1024*1024)
|
||||
|
||||
void
|
||||
initcgo(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
libcgo_sys_thread_start(ThreadStart *ts)
|
||||
{
|
||||
ts->g->stackguard = STACKSIZE;
|
||||
_beginthread(threadentry, STACKSIZE, ts);
|
||||
}
|
||||
|
||||
static void*
|
||||
threadentry(void *v)
|
||||
{
|
||||
ThreadStart ts;
|
||||
|
||||
ts = *(ThreadStart*)v;
|
||||
free(v);
|
||||
|
||||
ts.g->stackbase = (uintptr)&ts;
|
||||
|
||||
/*
|
||||
* libcgo_sys_thread_start set stackguard to stack size;
|
||||
* change to actual guard pointer.
|
||||
*/
|
||||
ts.g->stackguard = (uintptr)&ts - ts.g->stackguard + 4096;
|
||||
|
||||
crosscall_386(ts.fn);
|
||||
return nil;
|
||||
}
|
45
src/libcgo/mingw_amd64.c
Executable file
45
src/libcgo/mingw_amd64.c
Executable file
@ -0,0 +1,45 @@
|
||||
// Copyright 2009 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.
|
||||
|
||||
#define WIN64_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include "libcgo.h"
|
||||
|
||||
static void *threadentry(void*);
|
||||
|
||||
/* From what I've read 2MB is default for 64-bit Linux.
|
||||
Allocation granularity on Windows is typically 64 KB. */
|
||||
#define STACKSIZE (2*1024*1024)
|
||||
|
||||
void
|
||||
initcgo(void)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
libcgo_sys_thread_start(ThreadStart *ts)
|
||||
{
|
||||
ts->g->stackguard = STACKSIZE;
|
||||
_beginthread(threadentry, STACKSIZE, ts);
|
||||
}
|
||||
|
||||
static void*
|
||||
threadentry(void *v)
|
||||
{
|
||||
ThreadStart ts;
|
||||
|
||||
ts = *(ThreadStart*)v;
|
||||
free(v);
|
||||
|
||||
ts.g->stackbase = (uintptr)&ts;
|
||||
|
||||
/*
|
||||
* libcgo_sys_thread_start set stackguard to stack size;
|
||||
* change to actual guard pointer.
|
||||
*/
|
||||
ts.g->stackguard = (uintptr)&ts - ts.g->stackguard + 4096;
|
||||
|
||||
crosscall_386(ts.fn);
|
||||
return nil;
|
||||
}
|
Loading…
Reference in New Issue
Block a user