authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-04-02 22:25:53-04:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-04-03 17:45:16+02:00
logfde1ec5d0e57471b43bab226a78da2eb61e6bb66
tree463c6eff0089a919c6c004a9a83b2bac8b0c3770
parent1980f5479b2139112ff67de5d5f2e6af09fb215e

x86_64: remove returns from naked functions


2 files changed, 17 insertions(+), 6 deletions(-)

lib/std/os/linux/x86.zig+12-4
......@@ -125,36 +125,44 @@ pub extern fn clone(func: CloneFn, stack: usize, flags: u32, arg: usize, ptid: *
125125
126126pub fn restore() callconv(.Naked) void {
127127 switch (@import("builtin").zig_backend) {
128 .stage2_c => return asm volatile (
128 .stage2_c => asm volatile (
129129 \\ movl %[number], %%eax
130130 \\ int $0x80
131 \\ ret
131132 :
132133 : [number] "i" (@enumToInt(SYS.sigreturn)),
133134 : "memory"
134135 ),
135 else => return asm volatile ("int $0x80"
136 else => asm volatile (
137 \\ int $0x80
138 \\ ret
136139 :
137140 : [number] "{eax}" (@enumToInt(SYS.sigreturn)),
138141 : "memory"
139142 ),
140143 }
144 unreachable;
141145}
142146
143147pub fn restore_rt() callconv(.Naked) void {
144148 switch (@import("builtin").zig_backend) {
145 .stage2_c => return asm volatile (
149 .stage2_c => asm volatile (
146150 \\ movl %[number], %%eax
147151 \\ int $0x80
152 \\ ret
148153 :
149154 : [number] "i" (@enumToInt(SYS.rt_sigreturn)),
150155 : "memory"
151156 ),
152 else => return asm volatile ("int $0x80"
157 else => asm volatile (
158 \\ int $0x80
159 \\ ret
153160 :
154161 : [number] "{eax}" (@enumToInt(SYS.rt_sigreturn)),
155162 : "memory"
156163 ),
157164 }
165 unreachable;
158166}
159167
160168pub const O = struct {
lib/std/os/linux/x86_64.zig+5-2
......@@ -109,7 +109,7 @@ pub const restore = restore_rt;
109109
110110pub fn restore_rt() callconv(.Naked) void {
111111 switch (@import("builtin").zig_backend) {
112 .stage2_c => return asm volatile (
112 .stage2_c => asm volatile (
113113 \\ movl %[number], %%eax
114114 \\ syscall
115115 \\ retq
......@@ -117,12 +117,15 @@ pub fn restore_rt() callconv(.Naked) void {
117117 : [number] "i" (@enumToInt(SYS.rt_sigreturn)),
118118 : "rcx", "r11", "memory"
119119 ),
120 else => return asm volatile ("syscall"
120 else => asm volatile (
121 \\ syscall
122 \\ retq
121123 :
122124 : [number] "{rax}" (@enumToInt(SYS.rt_sigreturn)),
123125 : "rcx", "r11", "memory"
124126 ),
125127 }
128 unreachable;
126129}
127130
128131pub const mode_t = usize;