Skip to content

Commit 9c8b6b3

Browse files
authored
Merge pull request #1621 from cpunion/stdlib-opt-trim-internal-lib
stdlib-opt: trim runtime/internal/lib patches
2 parents 83933e2 + b3ad65e commit 9c8b6b3

File tree

274 files changed

+4459
-19921
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

274 files changed

+4459
-19921
lines changed

_demo/go/syscall/main.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package main
2+
3+
import (
4+
"syscall"
5+
"unsafe"
6+
7+
"github.com/goplus/lib/c"
8+
)
9+
10+
func printErr(prefix string, err error) {
11+
if err == nil {
12+
return
13+
}
14+
if errno, ok := err.(syscall.Errno); ok {
15+
c.Printf(c.Str("%s: errno=%d\n"), c.AllocaCStr(prefix), errno)
16+
return
17+
}
18+
c.Printf(c.Str("%s: error\n"), c.AllocaCStr(prefix))
19+
}
20+
21+
func main() {
22+
pid := syscall.Getpid()
23+
c.Printf(c.Str("pid=%d\n"), pid)
24+
25+
if wd, err := syscall.Getwd(); err != nil {
26+
printErr("getwd", err)
27+
} else {
28+
c.Printf(c.Str("cwd=%s\n"), c.AllocaCStr(wd))
29+
}
30+
31+
fd, err := syscall.Open("/etc/hosts", 0, 0)
32+
if err != nil {
33+
printErr("open /etc/hosts", err)
34+
return
35+
}
36+
37+
var buf [128]byte
38+
if n, err := syscall.Read(fd, buf[:]); err != nil {
39+
printErr("read /etc/hosts", err)
40+
} else {
41+
c.Printf(c.Str("read=%d\n"), n)
42+
if n > 0 {
43+
c.Printf(c.Str("head: %.*s\n"), n, (*c.Char)(unsafe.Pointer(&buf[0])))
44+
}
45+
}
46+
_ = syscall.Close(fd)
47+
}

cl/_testdata/embedunexport/expect.txt

Whitespace-only changes.

cl/_testdata/llgointrinsics/expect.txt

Whitespace-only changes.

cl/_testdata/llgointrinsics/in.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package llgointrinsics
2+
3+
import (
4+
"unsafe"
5+
)
6+
7+
//go:linkname funcPCABI0 llgo.funcPCABI0
8+
func funcPCABI0(fn interface{}) uintptr
9+
10+
//go:linkname skip llgo.skip
11+
func skip()
12+
13+
//go:linkname skipWithRet llgo.skip
14+
func skipWithRet() uintptr
15+
16+
//go:linkname skipWithMultiRet llgo.skip
17+
func skipWithMultiRet() (uintptr, uintptr)
18+
19+
//go:linkname libc_foo_trampoline C.foo
20+
func libc_foo_trampoline()
21+
22+
//go:linkname bar_trampoline bar_trampoline
23+
func bar_trampoline()
24+
25+
//go:linkname write C.write
26+
func write(fd int, buf unsafe.Pointer, count int) int
27+
28+
//go:linkname write_trampoline C.write
29+
func write_trampoline()
30+
31+
func UseC() uintptr {
32+
return funcPCABI0(write)
33+
}
34+
35+
func UseCTrampoline() uintptr {
36+
return funcPCABI0(write_trampoline)
37+
}
38+
39+
func UseLibc() uintptr {
40+
return funcPCABI0(libc_foo_trampoline)
41+
}
42+
43+
func UseBare() uintptr {
44+
return funcPCABI0(bar_trampoline)
45+
}
46+
47+
func UseFunc() uintptr {
48+
return funcPCABI0(func() {})
49+
}
50+
51+
func UseClosure() uintptr {
52+
var x int
53+
return funcPCABI0(func() {
54+
x++
55+
})
56+
}
57+
58+
func UseSkip() {
59+
skip()
60+
i := skipWithRet()
61+
print(i)
62+
a, b := skipWithMultiRet()
63+
print(a, b)
64+
}

cl/_testdata/llgointrinsics/out.ll

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
; ModuleID = 'github.com/goplus/llgo/cl/_testdata/llgointrinsics'
2+
source_filename = "github.com/goplus/llgo/cl/_testdata/llgointrinsics"
3+
4+
@"github.com/goplus/llgo/cl/_testdata/llgointrinsics.init$guard" = global i1 false, align 1
5+
6+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseBare"() {
7+
_llgo_0:
8+
ret i64 ptrtoint (ptr @bar to i64)
9+
}
10+
11+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseC"() {
12+
_llgo_0:
13+
ret i64 ptrtoint (ptr @write to i64)
14+
}
15+
16+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseCTrampoline"() {
17+
_llgo_0:
18+
ret i64 ptrtoint (ptr @write to i64)
19+
}
20+
21+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseClosure"() {
22+
_llgo_0:
23+
%0 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64 8)
24+
%1 = call ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64 8)
25+
%2 = getelementptr inbounds { ptr }, ptr %1, i32 0, i32 0
26+
store ptr %0, ptr %2, align 8
27+
%3 = insertvalue { ptr, ptr } { ptr @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseClosure$1", ptr undef }, ptr %1, 1
28+
ret i64 ptrtoint (ptr @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseClosure$1" to i64)
29+
}
30+
31+
define void @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseClosure$1"(ptr %0) {
32+
_llgo_0:
33+
%1 = load { ptr }, ptr %0, align 8
34+
%2 = extractvalue { ptr } %1, 0
35+
%3 = load i64, ptr %2, align 4
36+
%4 = add i64 %3, 1
37+
%5 = extractvalue { ptr } %1, 0
38+
store i64 %4, ptr %5, align 4
39+
ret void
40+
}
41+
42+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseFunc"() {
43+
_llgo_0:
44+
ret i64 ptrtoint (ptr @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseFunc$1" to i64)
45+
}
46+
47+
define void @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseFunc$1"() {
48+
_llgo_0:
49+
ret void
50+
}
51+
52+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseLibc"() {
53+
_llgo_0:
54+
ret i64 ptrtoint (ptr @foo to i64)
55+
}
56+
57+
define void @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.UseSkip"() {
58+
_llgo_0:
59+
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 0)
60+
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 0)
61+
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64 0)
62+
ret void
63+
}
64+
65+
define void @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.init"() {
66+
_llgo_0:
67+
%0 = load i1, ptr @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.init$guard", align 1
68+
br i1 %0, label %_llgo_2, label %_llgo_1
69+
70+
_llgo_1: ; preds = %_llgo_0
71+
store i1 true, ptr @"github.com/goplus/llgo/cl/_testdata/llgointrinsics.init$guard", align 1
72+
br label %_llgo_2
73+
74+
_llgo_2: ; preds = %_llgo_1, %_llgo_0
75+
ret void
76+
}
77+
78+
declare i64 @bar(...)
79+
80+
declare i64 @write(i64, ptr, i64)
81+
82+
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocZ"(i64)
83+
84+
declare ptr @"github.com/goplus/llgo/runtime/internal/runtime.AllocU"(i64)
85+
86+
declare i64 @foo(...)
87+
88+
declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintUint"(i64)

cl/_testdata/llgosyscall/expect.txt

Whitespace-only changes.

cl/_testdata/llgosyscall/in.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package llgosyscall
2+
3+
import _ "unsafe"
4+
5+
//go:linkname syscall llgo.syscall
6+
func syscall(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr)
7+
8+
//go:linkname syscall6 llgo.syscall
9+
func syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
10+
11+
//go:linkname syscall6X llgo.syscall
12+
func syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
13+
14+
//go:linkname syscallPtr llgo.syscall
15+
func syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr)
16+
17+
//go:linkname rawSyscall llgo.syscall
18+
func rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr)
19+
20+
//go:linkname rawSyscall6 llgo.syscall
21+
func rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)
22+
23+
func Use() uintptr {
24+
r1, _, _ := syscall(0, 1, 2, 3)
25+
return r1
26+
}
27+
28+
func Use6() uintptr {
29+
r1, _, _ := syscall6(0, 1, 2, 3, 4, 5, 6)
30+
return r1
31+
}
32+
33+
func Use6X() uintptr {
34+
r1, _, _ := syscall6X(0, 1, 2, 3, 4, 5, 6)
35+
return r1
36+
}
37+
38+
func UsePtr() uintptr {
39+
r1, _, _ := syscallPtr(0, 1, 2, 3)
40+
return r1
41+
}
42+
43+
func UseRaw() uintptr {
44+
r1, _, _ := rawSyscall(0, 1, 2, 3)
45+
return r1
46+
}
47+
48+
func UseRaw6() uintptr {
49+
r1, _, _ := rawSyscall6(0, 1, 2, 3, 4, 5, 6)
50+
return r1
51+
}

cl/_testdata/llgosyscall/out.ll

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
; ModuleID = 'github.com/goplus/llgo/cl/_testdata/llgosyscall'
2+
source_filename = "github.com/goplus/llgo/cl/_testdata/llgosyscall"
3+
4+
@"github.com/goplus/llgo/cl/_testdata/llgosyscall.init$guard" = global i1 false, align 1
5+
6+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgosyscall.Use"() {
7+
_llgo_0:
8+
%0 = call i64 null(i64 1, i64 2, i64 3)
9+
%1 = icmp eq i64 %0, -1
10+
%2 = call i32 @cliteErrno()
11+
%3 = sext i32 %2 to i64
12+
%4 = select i1 %1, i64 %3, i64 0
13+
%5 = insertvalue { i64, i64, i64 } undef, i64 %0, 0
14+
%6 = insertvalue { i64, i64, i64 } %5, i64 0, 1
15+
%7 = insertvalue { i64, i64, i64 } %6, i64 %4, 2
16+
%8 = extractvalue { i64, i64, i64 } %7, 0
17+
%9 = extractvalue { i64, i64, i64 } %7, 1
18+
%10 = extractvalue { i64, i64, i64 } %7, 2
19+
ret i64 %8
20+
}
21+
22+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgosyscall.Use6"() {
23+
_llgo_0:
24+
%0 = call i64 null(i64 1, i64 2, i64 3, i64 4, i64 5, i64 6)
25+
%1 = icmp eq i64 %0, -1
26+
%2 = call i32 @cliteErrno()
27+
%3 = sext i32 %2 to i64
28+
%4 = select i1 %1, i64 %3, i64 0
29+
%5 = insertvalue { i64, i64, i64 } undef, i64 %0, 0
30+
%6 = insertvalue { i64, i64, i64 } %5, i64 0, 1
31+
%7 = insertvalue { i64, i64, i64 } %6, i64 %4, 2
32+
%8 = extractvalue { i64, i64, i64 } %7, 0
33+
%9 = extractvalue { i64, i64, i64 } %7, 1
34+
%10 = extractvalue { i64, i64, i64 } %7, 2
35+
ret i64 %8
36+
}
37+
38+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgosyscall.Use6X"() {
39+
_llgo_0:
40+
%0 = call i64 null(i64 1, i64 2, i64 3, i64 4, i64 5, i64 6)
41+
%1 = icmp eq i64 %0, -1
42+
%2 = call i32 @cliteErrno()
43+
%3 = sext i32 %2 to i64
44+
%4 = select i1 %1, i64 %3, i64 0
45+
%5 = insertvalue { i64, i64, i64 } undef, i64 %0, 0
46+
%6 = insertvalue { i64, i64, i64 } %5, i64 0, 1
47+
%7 = insertvalue { i64, i64, i64 } %6, i64 %4, 2
48+
%8 = extractvalue { i64, i64, i64 } %7, 0
49+
%9 = extractvalue { i64, i64, i64 } %7, 1
50+
%10 = extractvalue { i64, i64, i64 } %7, 2
51+
ret i64 %8
52+
}
53+
54+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgosyscall.UsePtr"() {
55+
_llgo_0:
56+
%0 = call i64 null(i64 1, i64 2, i64 3)
57+
%1 = icmp eq i64 %0, -1
58+
%2 = call i32 @cliteErrno()
59+
%3 = sext i32 %2 to i64
60+
%4 = select i1 %1, i64 %3, i64 0
61+
%5 = insertvalue { i64, i64, i64 } undef, i64 %0, 0
62+
%6 = insertvalue { i64, i64, i64 } %5, i64 0, 1
63+
%7 = insertvalue { i64, i64, i64 } %6, i64 %4, 2
64+
%8 = extractvalue { i64, i64, i64 } %7, 0
65+
%9 = extractvalue { i64, i64, i64 } %7, 1
66+
%10 = extractvalue { i64, i64, i64 } %7, 2
67+
ret i64 %8
68+
}
69+
70+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgosyscall.UseRaw"() {
71+
_llgo_0:
72+
%0 = call i64 null(i64 1, i64 2, i64 3)
73+
%1 = icmp eq i64 %0, -1
74+
%2 = call i32 @cliteErrno()
75+
%3 = sext i32 %2 to i64
76+
%4 = select i1 %1, i64 %3, i64 0
77+
%5 = insertvalue { i64, i64, i64 } undef, i64 %0, 0
78+
%6 = insertvalue { i64, i64, i64 } %5, i64 0, 1
79+
%7 = insertvalue { i64, i64, i64 } %6, i64 %4, 2
80+
%8 = extractvalue { i64, i64, i64 } %7, 0
81+
%9 = extractvalue { i64, i64, i64 } %7, 1
82+
%10 = extractvalue { i64, i64, i64 } %7, 2
83+
ret i64 %8
84+
}
85+
86+
define i64 @"github.com/goplus/llgo/cl/_testdata/llgosyscall.UseRaw6"() {
87+
_llgo_0:
88+
%0 = call i64 null(i64 1, i64 2, i64 3, i64 4, i64 5, i64 6)
89+
%1 = icmp eq i64 %0, -1
90+
%2 = call i32 @cliteErrno()
91+
%3 = sext i32 %2 to i64
92+
%4 = select i1 %1, i64 %3, i64 0
93+
%5 = insertvalue { i64, i64, i64 } undef, i64 %0, 0
94+
%6 = insertvalue { i64, i64, i64 } %5, i64 0, 1
95+
%7 = insertvalue { i64, i64, i64 } %6, i64 %4, 2
96+
%8 = extractvalue { i64, i64, i64 } %7, 0
97+
%9 = extractvalue { i64, i64, i64 } %7, 1
98+
%10 = extractvalue { i64, i64, i64 } %7, 2
99+
ret i64 %8
100+
}
101+
102+
define void @"github.com/goplus/llgo/cl/_testdata/llgosyscall.init"() {
103+
_llgo_0:
104+
%0 = load i1, ptr @"github.com/goplus/llgo/cl/_testdata/llgosyscall.init$guard", align 1
105+
br i1 %0, label %_llgo_2, label %_llgo_1
106+
107+
_llgo_1: ; preds = %_llgo_0
108+
store i1 true, ptr @"github.com/goplus/llgo/cl/_testdata/llgosyscall.init$guard", align 1
109+
br label %_llgo_2
110+
111+
_llgo_2: ; preds = %_llgo_1, %_llgo_0
112+
ret void
113+
}
114+
115+
declare i32 @cliteErrno()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
modified

cl/_testlibgo/complex/out.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ source_filename = "github.com/goplus/llgo/cl/_testlibgo/complex"
1010

1111
define void @"github.com/goplus/llgo/cl/_testlibgo/complex.f"({ double, double } %0, { double, double } %1) {
1212
_llgo_0:
13-
%2 = call double @cabs({ double, double } %0)
13+
%2 = call double @"math/cmplx.Abs"({ double, double } %0)
1414
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String" { ptr @0, i64 10 })
1515
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintByte"(i8 32)
1616
call void @"github.com/goplus/llgo/runtime/internal/runtime.PrintFloat"(double %2)
@@ -48,7 +48,7 @@ _llgo_0:
4848
ret void
4949
}
5050

51-
declare double @cabs({ double, double })
51+
declare double @"math/cmplx.Abs"({ double, double })
5252

5353
declare void @"github.com/goplus/llgo/runtime/internal/runtime.PrintString"(%"github.com/goplus/llgo/runtime/internal/runtime.String")
5454

0 commit comments

Comments
 (0)