summaryrefslogtreecommitdiff
path: root/src/runtime/wincallback.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-12-05 20:34:45 -0500
committerRuss Cox <rsc@golang.org>2014-12-05 20:34:45 -0500
commit9ec47922b8593000b20bd3bac2db330a98229949 (patch)
treeedc89cf42f596da1464550c2e01605bfd826aa67 /src/runtime/wincallback.go
parentf83565bc02ff8dbf9bb7d72a863f63c18361665d (diff)
parentffc214da93bb6958b83ded0eff1bd2de21e82431 (diff)
downloadgo-9ec47922b8593000b20bd3bac2db330a98229949.tar.gz
all: merge dev.garbage (d1238958d4ae) into default branch
When we start work on Gerrit, ppc64 and garbage collection work will continue in the master branch, not the dev branches. (We may still use dev branches for other things later, but these are ready to be merged, and doing it now, before moving to Git means we don't have to have dev branches working in the Gerrit workflow on day one.) TBR=rlh CC=golang-codereviews https://codereview.appspot.com/183140043
Diffstat (limited to 'src/runtime/wincallback.go')
-rw-r--r--src/runtime/wincallback.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/runtime/wincallback.go b/src/runtime/wincallback.go
new file mode 100644
index 000000000..4c0daf17c
--- /dev/null
+++ b/src/runtime/wincallback.go
@@ -0,0 +1,43 @@
+// Copyright 2014 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.
+
+// +build ignore
+
+// Generate Windows callback assembly file.
+
+package main
+
+import (
+ "bytes"
+ "fmt"
+ "io/ioutil"
+ "os"
+)
+
+const maxCallback = 2000
+
+func main() {
+ var buf bytes.Buffer
+
+ buf.WriteString(`// generated by wincallback.go; run go generate
+
+// runtime·callbackasm is called by external code to
+// execute Go implemented callback function. It is not
+// called from the start, instead runtime·compilecallback
+// always returns address into runtime·callbackasm offset
+// appropriately so different callbacks start with different
+// CALL instruction in runtime·callbackasm. This determines
+// which Go callback function is executed later on.
+TEXT runtime·callbackasm(SB),7,$0
+`)
+ for i := 0; i < maxCallback; i++ {
+ buf.WriteString("\tCALL\truntime·callbackasm1(SB)\n")
+ }
+
+ err := ioutil.WriteFile("zcallback_windows.s", buf.Bytes(), 0666)
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "wincallback: %s\n", err)
+ os.Exit(2)
+ }
+}