authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2024-09-18 03:33:08+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-09-23 17:26:30-07:00
logc1cc63e5ff1f2a9b7621051475085cb0b6303ecb
tree1e1c2a03337a72f8858ebade7c7be8802cb85151
parentb19d0fb0fd3e4ff023968e77f01848ffb9dce360

libc: Work around LLVM's misassembly of `j <reg>` on mips r6.

See: https://github.com/ziglang/zig/issues/21315

6 files changed, 22 insertions(+), 11 deletions(-)

lib/libc/glibc/sysdeps/mips/mips32/crtn.S+4-2
...@@ -42,7 +42,8 @@...@@ -42,7 +42,8 @@
42 lw $31,28($sp)42 lw $31,28($sp)
43 .set noreorder43 .set noreorder
44 .set nomacro44 .set nomacro
45 j $3145 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
46 jr $31
46 addiu $sp,$sp,3247 addiu $sp,$sp,32
47 .set macro48 .set macro
48 .set reorder49 .set reorder
...@@ -51,7 +52,8 @@...@@ -51,7 +52,8 @@
51 lw $31,28($sp)52 lw $31,28($sp)
52 .set noreorder53 .set noreorder
53 .set nomacro54 .set nomacro
54 j $3155 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
56 jr $31
55 addiu $sp,$sp,3257 addiu $sp,$sp,32
56 .set macro58 .set macro
57 .set reorder59 .set reorder
lib/libc/glibc/sysdeps/mips/mips64/n32/crtn.S+4-2
...@@ -43,7 +43,8 @@...@@ -43,7 +43,8 @@
43 ld $28,0($sp)43 ld $28,0($sp)
44 .set noreorder44 .set noreorder
45 .set nomacro45 .set nomacro
46 j $3146 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
47 jr $31
47 addiu $sp,$sp,1648 addiu $sp,$sp,16
48 .set macro49 .set macro
49 .set reorder50 .set reorder
...@@ -53,7 +54,8 @@...@@ -53,7 +54,8 @@
53 ld $28,0($sp)54 ld $28,0($sp)
54 .set noreorder55 .set noreorder
55 .set nomacro56 .set nomacro
56 j $3157 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
58 jr $31
57 addiu $sp,$sp,1659 addiu $sp,$sp,16
58 .set macro60 .set macro
59 .set reorder61 .set reorder
lib/libc/glibc/sysdeps/mips/mips64/n64/crtn.S+4-2
...@@ -43,7 +43,8 @@...@@ -43,7 +43,8 @@
43 ld $28,0($sp)43 ld $28,0($sp)
44 .set noreorder44 .set noreorder
45 .set nomacro45 .set nomacro
46 j $3146 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
47 jr $31
47 daddiu $sp,$sp,1648 daddiu $sp,$sp,16
48 .set macro49 .set macro
49 .set reorder50 .set reorder
...@@ -53,7 +54,8 @@...@@ -53,7 +54,8 @@
53 ld $28,0($sp)54 ld $28,0($sp)
54 .set noreorder55 .set noreorder
55 .set nomacro56 .set nomacro
56 j $3157 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
58 jr $31
57 daddiu $sp,$sp,1659 daddiu $sp,$sp,16
58 .set macro60 .set macro
59 .set reorder61 .set reorder
lib/libc/glibc/sysdeps/unix/mips/sysdep.h+2-1
...@@ -39,7 +39,8 @@...@@ -39,7 +39,8 @@
39 .end function; \39 .end function; \
40 .size function,.-function40 .size function,.-function
4141
42#define ret j ra ; nop42// zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
43#define ret jr ra ; nop
4344
44#undef PSEUDO_END45#undef PSEUDO_END
45#define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym46#define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
lib/libc/musl/crt/mips/crtn.s+4-2
...@@ -3,11 +3,13 @@...@@ -3,11 +3,13 @@
3.section .init3.section .init
4 lw $gp,24($sp)4 lw $gp,24($sp)
5 lw $ra,28($sp)5 lw $ra,28($sp)
6 j $ra6 # zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
7 jr $ra
7 addu $sp,$sp,328 addu $sp,$sp,32
89
9.section .fini10.section .fini
10 lw $gp,24($sp)11 lw $gp,24($sp)
11 lw $ra,28($sp)12 lw $ra,28($sp)
12 j $ra13 # zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
14 jr $ra
13 addu $sp,$sp,3215 addu $sp,$sp,32
lib/libc/musl/crt/mips64/crtn.s+4-2
...@@ -3,11 +3,13 @@...@@ -3,11 +3,13 @@
3.section .init3.section .init
4 ld $gp,16($sp)4 ld $gp,16($sp)
5 ld $ra,24($sp)5 ld $ra,24($sp)
6 j $ra6 # zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
7 jr $ra
7 daddu $sp,$sp,328 daddu $sp,$sp,32
89
9.section .fini10.section .fini
10 ld $gp,16($sp)11 ld $gp,16($sp)
11 ld $ra,24($sp)12 ld $ra,24($sp)
12 j $ra13 # zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
14 jr $ra
13 daddu $sp,$sp,3215 daddu $sp,$sp,32