Skip to content

Commit 95b638f

Browse files
committed
Update 32-bit PowerPC syscall functions
musl and glibc both specify r0 as an output register because its value may be overwritten by system calls. As with the updates for 64-bit PowerPC in the previous commit, this commit brings Zig's syscall functions for 32-bit PowerPC in line with musl and glibc by adding r0 to the list of clobbers. (Listing r0 as both an input and a clobber is as close as we can get to musl, which declares it as a "+r" read-write output, since Zig doesn't support multiple outputs or the "+" specifier.)
1 parent 7980746 commit 95b638f

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

lib/std/os/linux/powerpc.zig

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ pub fn syscall0(number: SYS) usize {
2222
\\ 1:
2323
: [ret] "={r3}" (-> usize),
2424
: [number] "{r0}" (@intFromEnum(number)),
25-
: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
25+
: "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
2626
);
2727
}
2828

@@ -35,7 +35,7 @@ pub fn syscall1(number: SYS, arg1: usize) usize {
3535
: [ret] "={r3}" (-> usize),
3636
: [number] "{r0}" (@intFromEnum(number)),
3737
[arg1] "{r3}" (arg1),
38-
: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
38+
: "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
3939
);
4040
}
4141

@@ -49,7 +49,7 @@ pub fn syscall2(number: SYS, arg1: usize, arg2: usize) usize {
4949
: [number] "{r0}" (@intFromEnum(number)),
5050
[arg1] "{r3}" (arg1),
5151
[arg2] "{r4}" (arg2),
52-
: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
52+
: "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
5353
);
5454
}
5555

@@ -64,7 +64,7 @@ pub fn syscall3(number: SYS, arg1: usize, arg2: usize, arg3: usize) usize {
6464
[arg1] "{r3}" (arg1),
6565
[arg2] "{r4}" (arg2),
6666
[arg3] "{r5}" (arg3),
67-
: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
67+
: "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
6868
);
6969
}
7070

@@ -80,7 +80,7 @@ pub fn syscall4(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize)
8080
[arg2] "{r4}" (arg2),
8181
[arg3] "{r5}" (arg3),
8282
[arg4] "{r6}" (arg4),
83-
: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
83+
: "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
8484
);
8585
}
8686

@@ -97,7 +97,7 @@ pub fn syscall5(number: SYS, arg1: usize, arg2: usize, arg3: usize, arg4: usize,
9797
[arg3] "{r5}" (arg3),
9898
[arg4] "{r6}" (arg4),
9999
[arg5] "{r7}" (arg5),
100-
: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
100+
: "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
101101
);
102102
}
103103

@@ -123,7 +123,7 @@ pub fn syscall6(
123123
[arg4] "{r6}" (arg4),
124124
[arg5] "{r7}" (arg5),
125125
[arg6] "{r8}" (arg6),
126-
: "memory", "cr0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
126+
: "memory", "cr0", "r0", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
127127
);
128128
}
129129

0 commit comments

Comments
 (0)