mirror of
https://github.com/rwinkhart/sys.git
synced 2026-09-03 15:47:35 -04:00
unix: make mkasm_darwin.go usable with other operating systems
Rename mkasm_darwin.go to mkasm.go and pass the operating system as an argument. This will allow mkasm to be used to generate assembly for OpenBSD. Updates golang/go#36435 Change-Id: I42f54f5c6edc3a18a156e0e8e3c38d07ecf26d0b Reviewed-on: https://go-review.googlesource.com/c/sys/+/421795 Run-TryBot: Joel Sing <joel@sing.id.au> Run-TryBot: Ian Lance Taylor <iant@google.com> Reviewed-by: Than McIntosh <thanm@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
// go run mkasm_darwin.go amd64
|
// go run mkasm.go darwin amd64
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
//go:build darwin && go1.12
|
//go:build darwin && go1.12
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// go run mkasm_darwin.go arm64
|
// go run mkasm.go darwin arm64
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
//go:build darwin && go1.12
|
//go:build darwin && go1.12
|
||||||
|
|||||||
+3
-3
@@ -73,12 +73,12 @@ aix_ppc64)
|
|||||||
darwin_amd64)
|
darwin_amd64)
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
mkasm="go run mkasm_darwin.go"
|
mkasm="go run mkasm.go"
|
||||||
;;
|
;;
|
||||||
darwin_arm64)
|
darwin_arm64)
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
mkasm="go run mkasm_darwin.go"
|
mkasm="go run mkasm.go"
|
||||||
;;
|
;;
|
||||||
dragonfly_amd64)
|
dragonfly_amd64)
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
@@ -232,5 +232,5 @@ esac
|
|||||||
if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
|
if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi
|
||||||
if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
|
if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi
|
||||||
if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi
|
if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; fi
|
||||||
if [ -n "$mkasm" ]; then echo "$mkasm $GOARCH"; fi
|
if [ -n "$mkasm" ]; then echo "$mkasm $GOOS $GOARCH"; fi
|
||||||
) | $run
|
) | $run
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
//go:build ignore
|
//go:build ignore
|
||||||
// +build ignore
|
// +build ignore
|
||||||
|
|
||||||
// mkasm_darwin.go generates assembly trampolines to call libSystem routines from Go.
|
// mkasm.go generates assembly trampolines to call library routines from Go.
|
||||||
// This program must be run after mksyscall.go.
|
// This program must be run after mksyscall.go.
|
||||||
package main
|
package main
|
||||||
|
|
||||||
@@ -19,9 +19,19 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const ptrsize = 8 // Pointer size. All supported platforms are 64-bit.
|
func archPtrSize(arch string) int {
|
||||||
|
switch arch {
|
||||||
|
case "386", "arm":
|
||||||
|
return 4
|
||||||
|
case "amd64", "arm64", "mips64":
|
||||||
|
return 8
|
||||||
|
default:
|
||||||
|
log.Fatalf("Unknown arch %q", arch)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func generateASMFile(inFileNames []string, outFileName string, buildTags string) map[string]bool {
|
func generateASMFile(arch string, inFileNames []string, outFileName, buildTags string) map[string]bool {
|
||||||
trampolines := map[string]bool{}
|
trampolines := map[string]bool{}
|
||||||
var orderedTrampolines []string
|
var orderedTrampolines []string
|
||||||
for _, inFileName := range inFileNames {
|
for _, inFileName := range inFileNames {
|
||||||
@@ -43,19 +53,23 @@ func generateASMFile(inFileNames []string, outFileName string, buildTags string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ptrSize := archPtrSize(arch)
|
||||||
|
|
||||||
var out bytes.Buffer
|
var out bytes.Buffer
|
||||||
fmt.Fprintf(&out, "// go run mkasm_darwin.go %s\n", strings.Join(os.Args[1:], " "))
|
fmt.Fprintf(&out, "// go run mkasm.go %s\n", strings.Join(os.Args[1:], " "))
|
||||||
fmt.Fprintf(&out, "// Code generated by the command above; DO NOT EDIT.\n")
|
fmt.Fprintf(&out, "// Code generated by the command above; DO NOT EDIT.\n")
|
||||||
fmt.Fprintf(&out, "\n")
|
fmt.Fprintf(&out, "\n")
|
||||||
fmt.Fprintf(&out, "//go:build %s\n", buildTags)
|
if buildTags != "" {
|
||||||
fmt.Fprintf(&out, "// +build %s\n", buildTags)
|
fmt.Fprintf(&out, "//go:build %s\n", buildTags)
|
||||||
fmt.Fprintf(&out, "\n")
|
fmt.Fprintf(&out, "// +build %s\n", buildTags)
|
||||||
|
fmt.Fprintf(&out, "\n")
|
||||||
|
}
|
||||||
fmt.Fprintf(&out, "#include \"textflag.h\"\n")
|
fmt.Fprintf(&out, "#include \"textflag.h\"\n")
|
||||||
for _, fn := range orderedTrampolines {
|
for _, fn := range orderedTrampolines {
|
||||||
fmt.Fprintf(&out, "\nTEXT %s_trampoline<>(SB),NOSPLIT,$0-0\n", fn)
|
fmt.Fprintf(&out, "\nTEXT %s_trampoline<>(SB),NOSPLIT,$0-0\n", fn)
|
||||||
fmt.Fprintf(&out, "\tJMP\t%s(SB)\n\n", fn)
|
fmt.Fprintf(&out, "\tJMP\t%s(SB)\n\n", fn)
|
||||||
fmt.Fprintf(&out, "GLOBL\t·%s_trampoline_addr(SB), RODATA, $%d\n", fn, ptrsize)
|
fmt.Fprintf(&out, "GLOBL\t·%s_trampoline_addr(SB), RODATA, $%d\n", fn, ptrSize)
|
||||||
fmt.Fprintf(&out, "DATA\t·%s_trampoline_addr(SB)/%d, $%s_trampoline<>(SB)\n", fn, ptrsize, fn)
|
fmt.Fprintf(&out, "DATA\t·%s_trampoline_addr(SB)/%d, $%s_trampoline<>(SB)\n", fn, ptrSize, fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ioutil.WriteFile(outFileName, out.Bytes(), 0644); err != nil {
|
if err := ioutil.WriteFile(outFileName, out.Bytes(), 0644); err != nil {
|
||||||
@@ -65,7 +79,7 @@ func generateASMFile(inFileNames []string, outFileName string, buildTags string)
|
|||||||
return trampolines
|
return trampolines
|
||||||
}
|
}
|
||||||
|
|
||||||
const darwinTestTemplate = `// go run mkasm_darwin.go %s
|
const darwinTestTemplate = `// go run mkasm.go %s
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
//go:build darwin && go1.12
|
//go:build darwin && go1.12
|
||||||
@@ -102,23 +116,37 @@ func writeDarwinTest(trampolines map[string]bool, fileName, arch string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if len(os.Args) != 2 {
|
if len(os.Args) != 3 {
|
||||||
log.Fatalf("Usage: %s <arch>", os.Args[0])
|
log.Fatalf("Usage: %s <goos> <arch>", os.Args[0])
|
||||||
}
|
}
|
||||||
arch := os.Args[1]
|
goos, arch := os.Args[1], os.Args[2]
|
||||||
|
|
||||||
|
buildTags := ""
|
||||||
|
syscallFilename := fmt.Sprintf("syscall_%s.go", goos)
|
||||||
|
syscallArchFilename := fmt.Sprintf("syscall_%s_%s.go", goos, arch)
|
||||||
|
zsyscallArchFilename := fmt.Sprintf("zsyscall_%s_%s.go", goos, arch)
|
||||||
|
zsyscallASMFileName := fmt.Sprintf("zsyscall_%s_%s.s", goos, arch)
|
||||||
|
|
||||||
inFileNames := []string{
|
inFileNames := []string{
|
||||||
"syscall_darwin.go",
|
syscallFilename,
|
||||||
fmt.Sprintf("syscall_darwin_%s.go", arch),
|
syscallArchFilename,
|
||||||
fmt.Sprintf("zsyscall_darwin_%s.go", arch),
|
zsyscallArchFilename,
|
||||||
|
}
|
||||||
|
|
||||||
|
if goos == "darwin" {
|
||||||
|
buildTags = "go1.12"
|
||||||
|
}
|
||||||
|
trampolines := generateASMFile(arch, inFileNames, zsyscallASMFileName, buildTags)
|
||||||
|
|
||||||
|
if goos != "darwin" {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
trampolines := generateASMFile(inFileNames, fmt.Sprintf("zsyscall_darwin_%s.s", arch), "go1.12")
|
|
||||||
|
|
||||||
inFileNames = []string{
|
inFileNames = []string{
|
||||||
"syscall_darwin.1_13.go",
|
"syscall_darwin.1_13.go",
|
||||||
fmt.Sprintf("zsyscall_darwin_%s.1_13.go", arch),
|
fmt.Sprintf("zsyscall_darwin_%s.1_13.go", arch),
|
||||||
}
|
}
|
||||||
trampolines2 := generateASMFile(inFileNames, fmt.Sprintf("zsyscall_darwin_%s.1_13.s", arch), "go1.13")
|
trampolines2 := generateASMFile(arch, inFileNames, fmt.Sprintf("zsyscall_darwin_%s.1_13.s", arch), "go1.13")
|
||||||
|
|
||||||
// merge trampolines
|
// merge trampolines
|
||||||
for trampoline := range trampolines2 {
|
for trampoline := range trampolines2 {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// go run mkasm_darwin.go amd64
|
// go run mkasm.go darwin amd64
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
//go:build go1.13
|
//go:build go1.13
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// go run mkasm_darwin.go amd64
|
// go run mkasm.go darwin amd64
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
//go:build go1.12
|
//go:build go1.12
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// go run mkasm_darwin.go arm64
|
// go run mkasm.go darwin arm64
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
//go:build go1.13
|
//go:build go1.13
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// go run mkasm_darwin.go arm64
|
// go run mkasm.go darwin arm64
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
|
||||||
//go:build go1.12
|
//go:build go1.12
|
||||||
|
|||||||
Reference in New Issue
Block a user