-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathstdlib_runtime_sys_arm64_test.go
More file actions
104 lines (94 loc) · 2.44 KB
/
Copy pathstdlib_runtime_sys_arm64_test.go
File metadata and controls
104 lines (94 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
//go:build !llgo
// +build !llgo
package plan9asm
import (
"os"
"path/filepath"
"strings"
"testing"
)
func TestStdlibInternalRuntimeSys_ARM64_Compile(t *testing.T) {
llc, _, ok := findLlcAndClang(t)
if !ok {
t.Skip("llc not found")
}
goroot := testGOROOT(t)
src, err := os.ReadFile(filepath.Join(goroot, "src", "internal", "runtime", "sys", "dit_arm64.s"))
if err != nil {
if os.IsNotExist(err) {
t.Skip("internal/runtime/sys/dit_arm64.s not present in this GOROOT")
}
t.Fatal(err)
}
file, err := Parse(ArchARM64, string(src))
if err != nil {
t.Fatal(err)
}
resolve := func(sym string) string {
if strings.HasPrefix(sym, "·") {
return "internal/runtime/sys." + strings.TrimPrefix(sym, "·")
}
return strings.ReplaceAll(sym, "·", ".")
}
sigs := map[string]FuncSig{
"internal/runtime/sys.EnableDIT": {
Name: "internal/runtime/sys.EnableDIT",
Ret: I1,
Frame: FrameLayout{
Results: []FrameSlot{{Offset: 0, Type: I1, Index: 0}},
},
},
"internal/runtime/sys.DITEnabled": {
Name: "internal/runtime/sys.DITEnabled",
Ret: I1,
Frame: FrameLayout{
Results: []FrameSlot{{Offset: 0, Type: I1, Index: 0}},
},
},
"internal/runtime/sys.DisableDIT": {
Name: "internal/runtime/sys.DisableDIT",
Ret: Void,
},
}
ll, err := Translate(file, Options{
TargetTriple: arm64LinuxGNUTriple,
ResolveSym: resolve,
Sigs: sigs,
Goarch: "arm64",
})
if err != nil {
t.Fatal(err)
}
compileLLVMToObject(t, llc, arm64LinuxGNUTriple, "dit.ll", "dit.o", ll)
}
func TestTranslateGoModule_StdlibInternalRuntimeSys_ARM64_Compile(t *testing.T) {
llc, _, ok := findLlcAndClang(t)
if !ok {
t.Skip("llc not found")
}
goroot := testGOROOT(t)
src, err := os.ReadFile(filepath.Join(goroot, "src", "internal", "runtime", "sys", "dit_arm64.s"))
if err != nil {
if os.IsNotExist(err) {
t.Skip("internal/runtime/sys/dit_arm64.s not present in this GOROOT")
}
t.Fatal(err)
}
pkg := mustGoPackage(t, "internal/runtime/sys", `package sys
func EnableDIT() bool
func DITEnabled() bool
func DisableDIT()
`)
tr, err := TranslateGoModule(pkg, src, GoModuleOptions{
FileName: "dit_arm64.s",
GOOS: "linux",
GOARCH: "arm64",
TargetTriple: arm64LinuxGNUTriple,
ResolveSym: testResolveSym("internal/runtime/sys"),
})
if err != nil {
t.Fatal(err)
}
defer tr.Module.Dispose()
compileLLVMToObject(t, llc, arm64LinuxGNUTriple, "dit-gomod.ll", "dit-gomod.o", tr.Module.String())
}