[klibc] [PATCH] mips/mips64: Get rid of delay slot hacks
Jiaxun Yang
jiaxun.yang at flygoat.com
Sat Aug 13 09:45:04 PDT 2022
There are some MIPS assembly code trying to take advantage of
delay slots. However nowadays MIPS Release 6 removed delay slots
so they become an ordering problem.
Moreover, nowadays assmbler are smart enough to fill delay slots
properly. All those hacks can actually be archived by binutils.
Signed-off-by: Jiaxun Yang <jiaxun.yang at flygoat.com>
---
usr/klibc/arch/mips/syscall.S | 4 ----
usr/klibc/arch/mips/sysstub.ph | 4 +---
usr/klibc/arch/mips/vfork.S | 3 +--
usr/klibc/arch/mips64/sysstub.ph | 4 +---
4 files changed, 3 insertions(+), 12 deletions(-)
diff --git a/usr/klibc/arch/mips/syscall.S b/usr/klibc/arch/mips/syscall.S
index cca0db22..a5cc73de 100644
--- a/usr/klibc/arch/mips/syscall.S
+++ b/usr/klibc/arch/mips/syscall.S
@@ -1,14 +1,10 @@
#include <machine/asm.h>
#include <asm/unistd.h>
- .set noreorder
LEAF(__syscall_common)
syscall
beqz a3, 1f
- # sw is actually two instructions; the first one goes
- # in the branch delay slot
- # XXX: Break this up manually; as it is now it generates warnings.
sw v0, errno
li v0, -1
1: jr ra
diff --git a/usr/klibc/arch/mips/sysstub.ph b/usr/klibc/arch/mips/sysstub.ph
index 36895291..a3475b70 100644
--- a/usr/klibc/arch/mips/sysstub.ph
+++ b/usr/klibc/arch/mips/sysstub.ph
@@ -17,11 +17,9 @@ sub make_sysstub($$$$$@) {
print OUT "#include <machine/asm.h>\n";
print OUT "#include <asm/unistd.h>\n";
print OUT "\n";
- print OUT "\t.set noreorder\n";
- print OUT "\n";
print OUT "LEAF(${fname})\n";
- print OUT "\tj\t__syscall_${stype}\n";
print OUT "\t li\tv0, __NR_${sname}\n";
+ print OUT "\tj\t__syscall_${stype}\n";
print OUT "\tEND(${fname})\n";
close(OUT);
}
diff --git a/usr/klibc/arch/mips/vfork.S b/usr/klibc/arch/mips/vfork.S
index 9aa955ae..ae36d5fd 100644
--- a/usr/klibc/arch/mips/vfork.S
+++ b/usr/klibc/arch/mips/vfork.S
@@ -5,11 +5,10 @@
#define CLONE_VFORK 0x00004000
#define SIGCHLD 18
- .set noreorder
LEAF(vfork)
li a0, CLONE_VFORK | CLONE_VM | SIGCHLD
li a1, 0
+ li v0, __NR_clone
j __syscall_common
- li v0, __NR_clone
END(vfork)
diff --git a/usr/klibc/arch/mips64/sysstub.ph b/usr/klibc/arch/mips64/sysstub.ph
index e8a02009..57af657f 100644
--- a/usr/klibc/arch/mips64/sysstub.ph
+++ b/usr/klibc/arch/mips64/sysstub.ph
@@ -17,11 +17,9 @@ sub make_sysstub($$$$$@) {
print OUT "#include <machine/asm.h>\n";
print OUT "#include <asm/unistd.h>\n";
print OUT "\n";
- print OUT "\t.set noreorder\n";
- print OUT "\n";
print OUT "LEAF(${fname})\n";
- print OUT "\tj\t__syscall_${stype}\n";
print OUT "\t li\tv0, __NR_${sname}\n";
+ print OUT "\tj\t__syscall_${stype}\n";
print OUT "\tEND(${fname})\n";
close(OUT);
}
--
2.32.1 (Apple Git-133)
More information about the klibc
mailing list