Source file
src/syscall/mkpost.go
1
2
3
4
5
6
7
8
9
10
11
12 package main
13
14 import (
15 "fmt"
16 "go/format"
17 "io"
18 "log"
19 "os"
20 "regexp"
21 "strings"
22 )
23
24 func main() {
25 b, err := io.ReadAll(os.Stdin)
26 if err != nil {
27 log.Fatal(err)
28 }
29 s := string(b)
30
31 goarch := os.Getenv("GOARCH")
32 goos := os.Getenv("GOOS")
33 switch {
34 case goarch == "s390x" && goos == "linux":
35
36 re := regexp.MustCompile("ptrace(Psw|Fpregs|Per)")
37 s = re.ReplaceAllString(s, "Ptrace$1")
38
39
40 re = regexp.MustCompile("Pad_cgo[A-Za-z0-9_]*")
41 s = re.ReplaceAllString(s, "_")
42
43
44
45
46 s = strings.Replace(s, "X__val", "MKPOSTFSIDVAL", 1)
47 s = strings.Replace(s, "X__ifi_pad", "MKPOSTIFIPAD", 1)
48 s = strings.Replace(s, "X_f", "MKPOSTSYSINFOTF", 1)
49
50
51 re = regexp.MustCompile("X_[A-Za-z0-9_]*")
52 s = re.ReplaceAllString(s, "_")
53
54
55 s = strings.Replace(s, "MKPOSTFSIDVAL", "X__val", 1)
56 s = strings.Replace(s, "MKPOSTIFIPAD", "X__ifi_pad", 1)
57 s = strings.Replace(s, "MKPOSTSYSINFOTF", "X_f", 1)
58
59
60
61 re = regexp.MustCompile("(Data\\s+\\[14\\])uint8")
62 s = re.ReplaceAllString(s, "${1}int8")
63
64 case goos == "freebsd":
65
66 re := regexp.MustCompile("(A|M|C|Birth)tim\\s+Timespec")
67 s = re.ReplaceAllString(s, "${1}timespec Timespec")
68 }
69
70
71 b, err = format.Source([]byte(s))
72 if err != nil {
73 log.Fatal(err)
74 }
75
76
77
78 re := regexp.MustCompile("(cgo -godefs [a-zA-Z0-9_]+\\.go.*)")
79 s = re.ReplaceAllString(string(b), "$1 | go run mkpost.go")
80
81 fmt.Print(s)
82 }
83
View as plain text