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 @@
4242 lw $31,28($sp)
4343 .set noreorder
4444 .set nomacro
45 j $31
45 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
46 jr $31
4647 addiu $sp,$sp,32
4748 .set macro
4849 .set reorder
......@@ -51,7 +52,8 @@
5152 lw $31,28($sp)
5253 .set noreorder
5354 .set nomacro
54 j $31
55 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
56 jr $31
5557 addiu $sp,$sp,32
5658 .set macro
5759 .set reorder
lib/libc/glibc/sysdeps/mips/mips64/n32/crtn.S+4-2
......@@ -43,7 +43,8 @@
4343 ld $28,0($sp)
4444 .set noreorder
4545 .set nomacro
46 j $31
46 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
47 jr $31
4748 addiu $sp,$sp,16
4849 .set macro
4950 .set reorder
......@@ -53,7 +54,8 @@
5354 ld $28,0($sp)
5455 .set noreorder
5556 .set nomacro
56 j $31
57 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
58 jr $31
5759 addiu $sp,$sp,16
5860 .set macro
5961 .set reorder
lib/libc/glibc/sysdeps/mips/mips64/n64/crtn.S+4-2
......@@ -43,7 +43,8 @@
4343 ld $28,0($sp)
4444 .set noreorder
4545 .set nomacro
46 j $31
46 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
47 jr $31
4748 daddiu $sp,$sp,16
4849 .set macro
4950 .set reorder
......@@ -53,7 +54,8 @@
5354 ld $28,0($sp)
5455 .set noreorder
5556 .set nomacro
56 j $31
57 /* zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315 */
58 jr $31
5759 daddiu $sp,$sp,16
5860 .set macro
5961 .set reorder
lib/libc/glibc/sysdeps/unix/mips/sysdep.h+2-1
......@@ -39,7 +39,8 @@
3939 .end function; \
4040 .size function,.-function
4141
42#define ret j ra ; nop
42// zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
43#define ret jr ra ; nop
4344
4445#undef PSEUDO_END
4546#define PSEUDO_END(sym) cfi_endproc; .end sym; .size sym,.-sym
lib/libc/musl/crt/mips/crtn.s+4-2
......@@ -3,11 +3,13 @@
33.section .init
44 lw $gp,24($sp)
55 lw $ra,28($sp)
6 j $ra
6 # zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
7 jr $ra
78 addu $sp,$sp,32
89
910.section .fini
1011 lw $gp,24($sp)
1112 lw $ra,28($sp)
12 j $ra
13 # zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
14 jr $ra
1315 addu $sp,$sp,32
lib/libc/musl/crt/mips64/crtn.s+4-2
......@@ -3,11 +3,13 @@
33.section .init
44 ld $gp,16($sp)
55 ld $ra,24($sp)
6 j $ra
6 # zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
7 jr $ra
78 daddu $sp,$sp,32
89
910.section .fini
1011 ld $gp,16($sp)
1112 ld $ra,24($sp)
12 j $ra
13 # zig patch: j <reg> -> jr <reg> for https://github.com/ziglang/zig/issues/21315
14 jr $ra
1315 daddu $sp,$sp,32