detached 58d7177

internal/fakecgo: remove unnecessary RET instruction (#380)

A function called using a JMP instruction doesn't return to the instruction that follows the JMP,
but to the JMP parent frame. This means that there is no need to follow that instruction with a RET,
it will not be reached.

Updates #343
commit
58d717780d127fa53e8eea1da9e9c7d152797519
author
Quim Muntal · · 2025-12-17 14:28 UTC
committer
GitHub · · 2025-12-17 14:28 UTC
parent
da396f9
signature
GPG UnverifiedB5690EEEBB952194 The key is unknown
3 files · +0 -26
M dlfcn_stubs.s +0 -4
@@ -8,19 +8,15 @@
88 // func dlopen(path *byte, mode int) (ret uintptr)
99 TEXT dlopen(SB), NOSPLIT|NOFRAME, $0-0
1010 JMP purego_dlopen(SB)
11- RET
1211
1312 // func dlsym(handle uintptr, symbol *byte) (ret uintptr)
1413 TEXT dlsym(SB), NOSPLIT|NOFRAME, $0-0
1514 JMP purego_dlsym(SB)
16- RET
1715
1816 // func dlerror() (ret *byte)
1917 TEXT dlerror(SB), NOSPLIT|NOFRAME, $0-0
2018 JMP purego_dlerror(SB)
21- RET
2219
2320 // func dlclose(handle uintptr) (ret int)
2421 TEXT dlclose(SB), NOSPLIT|NOFRAME, $0-0
2522 JMP purego_dlclose(SB)
26- RET
@@ -8,19 +8,15 @@
8 // func dlopen(path *byte, mode int) (ret uintptr)8 // func dlopen(path *byte, mode int) (ret uintptr)
9 TEXT dlopen(SB), NOSPLIT|NOFRAME, $0-09 TEXT dlopen(SB), NOSPLIT|NOFRAME, $0-0
10 JMP purego_dlopen(SB)10 JMP purego_dlopen(SB)
11- RET
12 11
13 // func dlsym(handle uintptr, symbol *byte) (ret uintptr)12 // func dlsym(handle uintptr, symbol *byte) (ret uintptr)
14 TEXT dlsym(SB), NOSPLIT|NOFRAME, $0-013 TEXT dlsym(SB), NOSPLIT|NOFRAME, $0-0
15 JMP purego_dlsym(SB)14 JMP purego_dlsym(SB)
16- RET
17 15
18 // func dlerror() (ret *byte)16 // func dlerror() (ret *byte)
19 TEXT dlerror(SB), NOSPLIT|NOFRAME, $0-017 TEXT dlerror(SB), NOSPLIT|NOFRAME, $0-0
20 JMP purego_dlerror(SB)18 JMP purego_dlerror(SB)
21- RET
22 19
23 // func dlclose(handle uintptr) (ret int)20 // func dlclose(handle uintptr) (ret int)
24 TEXT dlclose(SB), NOSPLIT|NOFRAME, $0-021 TEXT dlclose(SB), NOSPLIT|NOFRAME, $0-0
25 JMP purego_dlclose(SB)22 JMP purego_dlclose(SB)
26- RET
M internal/fakecgo/gen.go +0 -1
@@ -95,7 +95,6 @@ const templateTrampolinesStubs = `// Code generated by 'go generate' with gen.go
9595 {{ range . }}
9696 TEXT _{{.Name}}(SB), NOSPLIT|NOFRAME, $0-0
9797 JMP purego_{{.Name}}(SB)
98- RET
9998 {{ end -}}
10099 `
101100
@@ -95,7 +95,6 @@ const templateTrampolinesStubs = `// Code generated by 'go generate' with gen.go
95 {{ range . }}95 {{ range . }}
96 TEXT _{{.Name}}(SB), NOSPLIT|NOFRAME, $0-096 TEXT _{{.Name}}(SB), NOSPLIT|NOFRAME, $0-0
97 JMP purego_{{.Name}}(SB)97 JMP purego_{{.Name}}(SB)
98- RET
99 {{ end -}}98 {{ end -}}
100 `99 `
101 100
M internal/fakecgo/ztrampolines_stubs.s +0 -21
@@ -11,84 +11,63 @@
1111
1212 TEXT _malloc(SB), NOSPLIT|NOFRAME, $0-0
1313 JMP purego_malloc(SB)
14- RET
1514
1615 TEXT _free(SB), NOSPLIT|NOFRAME, $0-0
1716 JMP purego_free(SB)
18- RET
1917
2018 TEXT _setenv(SB), NOSPLIT|NOFRAME, $0-0
2119 JMP purego_setenv(SB)
22- RET
2320
2421 TEXT _unsetenv(SB), NOSPLIT|NOFRAME, $0-0
2522 JMP purego_unsetenv(SB)
26- RET
2723
2824 TEXT _sigfillset(SB), NOSPLIT|NOFRAME, $0-0
2925 JMP purego_sigfillset(SB)
30- RET
3126
3227 TEXT _nanosleep(SB), NOSPLIT|NOFRAME, $0-0
3328 JMP purego_nanosleep(SB)
34- RET
3529
3630 TEXT _abort(SB), NOSPLIT|NOFRAME, $0-0
3731 JMP purego_abort(SB)
38- RET
3932
4033 TEXT _sigaltstack(SB), NOSPLIT|NOFRAME, $0-0
4134 JMP purego_sigaltstack(SB)
42- RET
4335
4436 TEXT _pthread_attr_init(SB), NOSPLIT|NOFRAME, $0-0
4537 JMP purego_pthread_attr_init(SB)
46- RET
4738
4839 TEXT _pthread_create(SB), NOSPLIT|NOFRAME, $0-0
4940 JMP purego_pthread_create(SB)
50- RET
5141
5242 TEXT _pthread_detach(SB), NOSPLIT|NOFRAME, $0-0
5343 JMP purego_pthread_detach(SB)
54- RET
5544
5645 TEXT _pthread_sigmask(SB), NOSPLIT|NOFRAME, $0-0
5746 JMP purego_pthread_sigmask(SB)
58- RET
5947
6048 TEXT _pthread_self(SB), NOSPLIT|NOFRAME, $0-0
6149 JMP purego_pthread_self(SB)
62- RET
6350
6451 TEXT _pthread_get_stacksize_np(SB), NOSPLIT|NOFRAME, $0-0
6552 JMP purego_pthread_get_stacksize_np(SB)
66- RET
6753
6854 TEXT _pthread_attr_getstacksize(SB), NOSPLIT|NOFRAME, $0-0
6955 JMP purego_pthread_attr_getstacksize(SB)
70- RET
7156
7257 TEXT _pthread_attr_setstacksize(SB), NOSPLIT|NOFRAME, $0-0
7358 JMP purego_pthread_attr_setstacksize(SB)
74- RET
7559
7660 TEXT _pthread_attr_destroy(SB), NOSPLIT|NOFRAME, $0-0
7761 JMP purego_pthread_attr_destroy(SB)
78- RET
7962
8063 TEXT _pthread_mutex_lock(SB), NOSPLIT|NOFRAME, $0-0
8164 JMP purego_pthread_mutex_lock(SB)
82- RET
8365
8466 TEXT _pthread_mutex_unlock(SB), NOSPLIT|NOFRAME, $0-0
8567 JMP purego_pthread_mutex_unlock(SB)
86- RET
8768
8869 TEXT _pthread_cond_broadcast(SB), NOSPLIT|NOFRAME, $0-0
8970 JMP purego_pthread_cond_broadcast(SB)
90- RET
9171
9272 TEXT _pthread_setspecific(SB), NOSPLIT|NOFRAME, $0-0
9373 JMP purego_pthread_setspecific(SB)
94- RET
@@ -11,84 +11,63 @@
11 11
12 TEXT _malloc(SB), NOSPLIT|NOFRAME, $0-012 TEXT _malloc(SB), NOSPLIT|NOFRAME, $0-0
13 JMP purego_malloc(SB)13 JMP purego_malloc(SB)
14- RET
15 14
16 TEXT _free(SB), NOSPLIT|NOFRAME, $0-015 TEXT _free(SB), NOSPLIT|NOFRAME, $0-0
17 JMP purego_free(SB)16 JMP purego_free(SB)
18- RET
19 17
20 TEXT _setenv(SB), NOSPLIT|NOFRAME, $0-018 TEXT _setenv(SB), NOSPLIT|NOFRAME, $0-0
21 JMP purego_setenv(SB)19 JMP purego_setenv(SB)
22- RET
23 20
24 TEXT _unsetenv(SB), NOSPLIT|NOFRAME, $0-021 TEXT _unsetenv(SB), NOSPLIT|NOFRAME, $0-0
25 JMP purego_unsetenv(SB)22 JMP purego_unsetenv(SB)
26- RET
27 23
28 TEXT _sigfillset(SB), NOSPLIT|NOFRAME, $0-024 TEXT _sigfillset(SB), NOSPLIT|NOFRAME, $0-0
29 JMP purego_sigfillset(SB)25 JMP purego_sigfillset(SB)
30- RET
31 26
32 TEXT _nanosleep(SB), NOSPLIT|NOFRAME, $0-027 TEXT _nanosleep(SB), NOSPLIT|NOFRAME, $0-0
33 JMP purego_nanosleep(SB)28 JMP purego_nanosleep(SB)
34- RET
35 29
36 TEXT _abort(SB), NOSPLIT|NOFRAME, $0-030 TEXT _abort(SB), NOSPLIT|NOFRAME, $0-0
37 JMP purego_abort(SB)31 JMP purego_abort(SB)
38- RET
39 32
40 TEXT _sigaltstack(SB), NOSPLIT|NOFRAME, $0-033 TEXT _sigaltstack(SB), NOSPLIT|NOFRAME, $0-0
41 JMP purego_sigaltstack(SB)34 JMP purego_sigaltstack(SB)
42- RET
43 35
44 TEXT _pthread_attr_init(SB), NOSPLIT|NOFRAME, $0-036 TEXT _pthread_attr_init(SB), NOSPLIT|NOFRAME, $0-0
45 JMP purego_pthread_attr_init(SB)37 JMP purego_pthread_attr_init(SB)
46- RET
47 38
48 TEXT _pthread_create(SB), NOSPLIT|NOFRAME, $0-039 TEXT _pthread_create(SB), NOSPLIT|NOFRAME, $0-0
49 JMP purego_pthread_create(SB)40 JMP purego_pthread_create(SB)
50- RET
51 41
52 TEXT _pthread_detach(SB), NOSPLIT|NOFRAME, $0-042 TEXT _pthread_detach(SB), NOSPLIT|NOFRAME, $0-0
53 JMP purego_pthread_detach(SB)43 JMP purego_pthread_detach(SB)
54- RET
55 44
56 TEXT _pthread_sigmask(SB), NOSPLIT|NOFRAME, $0-045 TEXT _pthread_sigmask(SB), NOSPLIT|NOFRAME, $0-0
57 JMP purego_pthread_sigmask(SB)46 JMP purego_pthread_sigmask(SB)
58- RET
59 47
60 TEXT _pthread_self(SB), NOSPLIT|NOFRAME, $0-048 TEXT _pthread_self(SB), NOSPLIT|NOFRAME, $0-0
61 JMP purego_pthread_self(SB)49 JMP purego_pthread_self(SB)
62- RET
63 50
64 TEXT _pthread_get_stacksize_np(SB), NOSPLIT|NOFRAME, $0-051 TEXT _pthread_get_stacksize_np(SB), NOSPLIT|NOFRAME, $0-0
65 JMP purego_pthread_get_stacksize_np(SB)52 JMP purego_pthread_get_stacksize_np(SB)
66- RET
67 53
68 TEXT _pthread_attr_getstacksize(SB), NOSPLIT|NOFRAME, $0-054 TEXT _pthread_attr_getstacksize(SB), NOSPLIT|NOFRAME, $0-0
69 JMP purego_pthread_attr_getstacksize(SB)55 JMP purego_pthread_attr_getstacksize(SB)
70- RET
71 56
72 TEXT _pthread_attr_setstacksize(SB), NOSPLIT|NOFRAME, $0-057 TEXT _pthread_attr_setstacksize(SB), NOSPLIT|NOFRAME, $0-0
73 JMP purego_pthread_attr_setstacksize(SB)58 JMP purego_pthread_attr_setstacksize(SB)
74- RET
75 59
76 TEXT _pthread_attr_destroy(SB), NOSPLIT|NOFRAME, $0-060 TEXT _pthread_attr_destroy(SB), NOSPLIT|NOFRAME, $0-0
77 JMP purego_pthread_attr_destroy(SB)61 JMP purego_pthread_attr_destroy(SB)
78- RET
79 62
80 TEXT _pthread_mutex_lock(SB), NOSPLIT|NOFRAME, $0-063 TEXT _pthread_mutex_lock(SB), NOSPLIT|NOFRAME, $0-0
81 JMP purego_pthread_mutex_lock(SB)64 JMP purego_pthread_mutex_lock(SB)
82- RET
83 65
84 TEXT _pthread_mutex_unlock(SB), NOSPLIT|NOFRAME, $0-066 TEXT _pthread_mutex_unlock(SB), NOSPLIT|NOFRAME, $0-0
85 JMP purego_pthread_mutex_unlock(SB)67 JMP purego_pthread_mutex_unlock(SB)
86- RET
87 68
88 TEXT _pthread_cond_broadcast(SB), NOSPLIT|NOFRAME, $0-069 TEXT _pthread_cond_broadcast(SB), NOSPLIT|NOFRAME, $0-0
89 JMP purego_pthread_cond_broadcast(SB)70 JMP purego_pthread_cond_broadcast(SB)
90- RET
91 71
92 TEXT _pthread_setspecific(SB), NOSPLIT|NOFRAME, $0-072 TEXT _pthread_setspecific(SB), NOSPLIT|NOFRAME, $0-0
93 JMP purego_pthread_setspecific(SB)73 JMP purego_pthread_setspecific(SB)
94- RET

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 102

↑↓ moveenter openesc close