Commit 1d37c116 authored by Joe Poirier's avatar Joe Poirier Committed by Russ Cox

libcgo: initial mingw port work - builds but untested

R=rsc
CC=golang-dev
https://golang.org/cl/812041
parent 0085e354
......@@ -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
......
......@@ -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
......
// 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;
}
// 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment