authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-04-15 18:59:10+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-04-16 16:00:18+02:00
loge7ee61cd64e8b84f195efbe5b05920d50da1e949
tree63fb30235a5f206fe1737482ff837a0a4e4f2def
parent0dd99c37cca1894ad7219e5944e7eef25902e44e
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

musl: fix syscall argument width for mipsn32

https://www.openwall.com/lists/musl/2026/04/16/1

1 files changed, 35 insertions(+), 32 deletions(-)

lib/libc/musl/arch/mipsn32/syscall_arch.h+35-32
...@@ -1,6 +1,9 @@...@@ -1,6 +1,9 @@
1#define __SYSCALL_LL_E(x) (x)1#define __SYSCALL_LL_E(x) (x)
2#define __SYSCALL_LL_O(x) (x)2#define __SYSCALL_LL_O(x) (x)
33
4#define __scc(X) sizeof(1?(X):0ULL) < 8 ? (unsigned long) (X) : (long long) (X)
5typedef long long syscall_arg_t;
6
4#define SYSCALL_RLIM_INFINITY (-1UL/2)7#define SYSCALL_RLIM_INFINITY (-1UL/2)
58
6#if __mips_isa_rev >= 69#if __mips_isa_rev >= 6
...@@ -13,9 +16,9 @@...@@ -13,9 +16,9 @@
13 "$14", "$15", "$24", "$25", "hi", "lo", "memory"16 "$14", "$15", "$24", "$25", "hi", "lo", "memory"
14#endif17#endif
1518
16static inline long __syscall0(long n)19static inline long __syscall0(long long n)
17{20{
18 register long r7 __asm__("$7");21 register long long r7 __asm__("$7");
19 register long r2 __asm__("$2");22 register long r2 __asm__("$2");
20 __asm__ __volatile__ (23 __asm__ __volatile__ (
21 "daddu $2,$0,%2 ; syscall"24 "daddu $2,$0,%2 ; syscall"
...@@ -25,10 +28,10 @@ static inline long __syscall0(long n)...@@ -25,10 +28,10 @@ static inline long __syscall0(long n)
25 return r7 && r2>0 ? -r2 : r2;28 return r7 && r2>0 ? -r2 : r2;
26}29}
2730
28static inline long __syscall1(long n, long a)31static inline long __syscall1(long long n, long long a)
29{32{
30 register long r4 __asm__("$4") = a;33 register long long r4 __asm__("$4") = a;
31 register long r7 __asm__("$7");34 register long long r7 __asm__("$7");
32 register long r2 __asm__("$2");35 register long r2 __asm__("$2");
33 __asm__ __volatile__ (36 __asm__ __volatile__ (
34 "daddu $2,$0,%2 ; syscall"37 "daddu $2,$0,%2 ; syscall"
...@@ -38,11 +41,11 @@ static inline long __syscall1(long n, long a)...@@ -38,11 +41,11 @@ static inline long __syscall1(long n, long a)
38 return r7 && r2>0 ? -r2 : r2;41 return r7 && r2>0 ? -r2 : r2;
39}42}
4043
41static inline long __syscall2(long n, long a, long b)44static inline long __syscall2(long long n, long long a, long long b)
42{45{
43 register long r4 __asm__("$4") = a;46 register long long r4 __asm__("$4") = a;
44 register long r5 __asm__("$5") = b;47 register long long r5 __asm__("$5") = b;
45 register long r7 __asm__("$7");48 register long long r7 __asm__("$7");
46 register long r2 __asm__("$2");49 register long r2 __asm__("$2");
4750
48 __asm__ __volatile__ (51 __asm__ __volatile__ (
...@@ -53,12 +56,12 @@ static inline long __syscall2(long n, long a, long b)...@@ -53,12 +56,12 @@ static inline long __syscall2(long n, long a, long b)
53 return r7 && r2>0 ? -r2 : r2;56 return r7 && r2>0 ? -r2 : r2;
54}57}
5558
56static inline long __syscall3(long n, long a, long b, long c)59static inline long __syscall3(long long n, long long a, long long b, long long c)
57{60{
58 register long r4 __asm__("$4") = a;61 register long long r4 __asm__("$4") = a;
59 register long r5 __asm__("$5") = b;62 register long long r5 __asm__("$5") = b;
60 register long r6 __asm__("$6") = c;63 register long long r6 __asm__("$6") = c;
61 register long r7 __asm__("$7");64 register long long r7 __asm__("$7");
62 register long r2 __asm__("$2");65 register long r2 __asm__("$2");
6366
64 __asm__ __volatile__ (67 __asm__ __volatile__ (
...@@ -69,12 +72,12 @@ static inline long __syscall3(long n, long a, long b, long c)...@@ -69,12 +72,12 @@ static inline long __syscall3(long n, long a, long b, long c)
69 return r7 && r2>0 ? -r2 : r2;72 return r7 && r2>0 ? -r2 : r2;
70}73}
7174
72static inline long __syscall4(long n, long a, long b, long c, long d)75static inline long __syscall4(long long n, long long a, long long b, long long c, long long d)
73{76{
74 register long r4 __asm__("$4") = a;77 register long long r4 __asm__("$4") = a;
75 register long r5 __asm__("$5") = b;78 register long long r5 __asm__("$5") = b;
76 register long r6 __asm__("$6") = c;79 register long long r6 __asm__("$6") = c;
77 register long r7 __asm__("$7") = d;80 register long long r7 __asm__("$7") = d;
78 register long r2 __asm__("$2");81 register long r2 __asm__("$2");
7982
80 __asm__ __volatile__ (83 __asm__ __volatile__ (
...@@ -85,13 +88,13 @@ static inline long __syscall4(long n, long a, long b, long c, long d)...@@ -85,13 +88,13 @@ static inline long __syscall4(long n, long a, long b, long c, long d)
85 return r7 && r2>0 ? -r2 : r2;88 return r7 && r2>0 ? -r2 : r2;
86}89}
8790
88static inline long __syscall5(long n, long a, long b, long c, long d, long e)91static inline long __syscall5(long long n, long long a, long long b, long long c, long long d, long long e)
89{92{
90 register long r4 __asm__("$4") = a;93 register long long r4 __asm__("$4") = a;
91 register long r5 __asm__("$5") = b;94 register long long r5 __asm__("$5") = b;
92 register long r6 __asm__("$6") = c;95 register long long r6 __asm__("$6") = c;
93 register long r7 __asm__("$7") = d;96 register long long r7 __asm__("$7") = d;
94 register long r8 __asm__("$8") = e;97 register long long r8 __asm__("$8") = e;
95 register long r2 __asm__("$2");98 register long r2 __asm__("$2");
9699
97 __asm__ __volatile__ (100 __asm__ __volatile__ (
...@@ -102,14 +105,14 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e)...@@ -102,14 +105,14 @@ static inline long __syscall5(long n, long a, long b, long c, long d, long e)
102 return r7 && r2>0 ? -r2 : r2;105 return r7 && r2>0 ? -r2 : r2;
103}106}
104107
105static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)108static inline long __syscall6(long long n, long long a, long long b, long long c, long long d, long long e, long long f)
106{109{
107 register long r4 __asm__("$4") = a;110 register long long r4 __asm__("$4") = a;
108 register long r5 __asm__("$5") = b;111 register long long r5 __asm__("$5") = b;
109 register long r6 __asm__("$6") = c;112 register long long r6 __asm__("$6") = c;
110 register long r7 __asm__("$7") = d;113 register long long r7 __asm__("$7") = d;
111 register long r8 __asm__("$8") = e;114 register long long r8 __asm__("$8") = e;
112 register long r9 __asm__("$9") = f;115 register long long r9 __asm__("$9") = f;
113 register long r2 __asm__("$2");116 register long r2 __asm__("$2");
114117
115 __asm__ __volatile__ (118 __asm__ __volatile__ (