1
0
mirror of https://github.com/golang/go synced 2024-11-24 21:00:09 -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:
Joe Poirier 2010-04-05 23:44:05 -07:00 committed by Russ Cox
parent 0085e35498
commit 1d37c11657
5 changed files with 94 additions and 2 deletions

2
src/libcgo/386.S Normal file → Executable file
View 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
View 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

View File

@ -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
View 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
View 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;
}