authorgravatar for contact@taylor.fishtaylor.fish <contact@taylor.fish> 2025-06-22 16:36:44-07:00
committergravatar for contact@taylor.fishtaylor.fish <contact@taylor.fish> 2025-06-22 16:48:36-07:00
log95b638f613406c6bd609c7addd666dbe1758486a
treeb443561403ca23a7041dc81ffbbc353600e74c1c
parent79807468e747bac056cfea4340065e49a5d97120

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 files changed, 7 insertions(+), 7 deletions(-)

lib/std/os/linux/powerpc.zig+7-7
......@@ -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