]> Cypherpunks repositories - gostls13.git/commitdiff
libcgo: initial mingw port work - builds but untested
authorJoe Poirier <jdpoirier@gmail.com>
Tue, 6 Apr 2010 06:44:05 +0000 (23:44 -0700)
committerRuss Cox <rsc@golang.org>
Tue, 6 Apr 2010 06:44:05 +0000 (23:44 -0700)
R=rsc
CC=golang-dev
https://golang.org/cl/812041

src/libcgo/386.S [changed mode: 0644->0755]
src/libcgo/Makefile [changed mode: 0644->0755]
src/libcgo/amd64.S
src/libcgo/mingw_386.c [new file with mode: 0755]
src/libcgo/mingw_amd64.c [new file with mode: 0755]

old mode 100644 (file)
new mode 100755 (executable)
index 3d7786d..278c529
@@ -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
old mode 100644 (file)
new mode 100755 (executable)
index b5ac6e3..deb6b48
@@ -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
index eaa346a143e732b11d896d06458a5386a5c449f7..a7adff9e97cae6ce3eeff0a7eee8636ca27852c8 100644 (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
diff --git a/src/libcgo/mingw_386.c b/src/libcgo/mingw_386.c
new file mode 100755 (executable)
index 0000000..62be930
--- /dev/null
@@ -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;
+}
diff --git a/src/libcgo/mingw_amd64.c b/src/libcgo/mingw_amd64.c
new file mode 100755 (executable)
index 0000000..56417e1
--- /dev/null
@@ -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;
+}