diff options
Diffstat (limited to 'src/runtime/wincallback.go')
-rw-r--r-- | src/runtime/wincallback.go | 43 |
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) + } +} |