forked from github/multus-cni
gomodule is still in progress to migrate for now, hence multus team decide to keep vendor directory to support build without gomodule.
62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
// Copyright 2018 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
|
|
|
|
// mkasm_darwin.go generates assembly trampolines to call libSystem routines from Go.
|
|
//This program must be run after mksyscall.go.
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
func main() {
|
|
in1, err := ioutil.ReadFile("syscall_darwin.go")
|
|
if err != nil {
|
|
log.Fatalf("can't open syscall_darwin.go: %s", err)
|
|
}
|
|
arch := os.Args[1]
|
|
in2, err := ioutil.ReadFile(fmt.Sprintf("syscall_darwin_%s.go", arch))
|
|
if err != nil {
|
|
log.Fatalf("can't open syscall_darwin_%s.go: %s", arch, err)
|
|
}
|
|
in3, err := ioutil.ReadFile(fmt.Sprintf("zsyscall_darwin_%s.go", arch))
|
|
if err != nil {
|
|
log.Fatalf("can't open zsyscall_darwin_%s.go: %s", arch, err)
|
|
}
|
|
in := string(in1) + string(in2) + string(in3)
|
|
|
|
trampolines := map[string]bool{}
|
|
|
|
var out bytes.Buffer
|
|
|
|
fmt.Fprintf(&out, "// go run mkasm_darwin.go %s\n", strings.Join(os.Args[1:], " "))
|
|
fmt.Fprintf(&out, "// Code generated by the command above; DO NOT EDIT.\n")
|
|
fmt.Fprintf(&out, "\n")
|
|
fmt.Fprintf(&out, "// +build go1.12\n")
|
|
fmt.Fprintf(&out, "\n")
|
|
fmt.Fprintf(&out, "#include \"textflag.h\"\n")
|
|
for _, line := range strings.Split(in, "\n") {
|
|
if !strings.HasPrefix(line, "func ") || !strings.HasSuffix(line, "_trampoline()") {
|
|
continue
|
|
}
|
|
fn := line[5 : len(line)-13]
|
|
if !trampolines[fn] {
|
|
trampolines[fn] = true
|
|
fmt.Fprintf(&out, "TEXT ·%s_trampoline(SB),NOSPLIT,$0-0\n", fn)
|
|
fmt.Fprintf(&out, "\tJMP\t%s(SB)\n", fn)
|
|
}
|
|
}
|
|
err = ioutil.WriteFile(fmt.Sprintf("zsyscall_darwin_%s.s", arch), out.Bytes(), 0644)
|
|
if err != nil {
|
|
log.Fatalf("can't write zsyscall_darwin_%s.s: %s", arch, err)
|
|
}
|
|
}
|