Jiaxun Yang
2022-Aug-13 16:45 UTC
[klibc] [PATCH] mips/mips64: Get rid of delay slot hacks
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)
Ben Hutchings
2022-Aug-28 20:43 UTC
[klibc] [PATCH] mips/mips64: Get rid of delay slot hacks
On Sat, 2022-08-13 at 17:45 +0100, Jiaxun Yang wrote:> 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.It didn't remove delay slots. It added "compact" branch instructions that don't have them, but after this patch the new instructions still aren't used.> Moreover, nowadays assmbler are smart enough to fill delay slots > properly. All those hacks can actually be archived by binutils.I can see that it does move instructions into the delay slot for a "j" instruction. However, in this case: [...]> --- 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[...] the delay slot gets filled with a nop. I don't think that matters much, but this means the commit message is not really accurate. I think I would be happy to accept this as cleanup if you correct the commit message. Ben. -- Ben Hutchings It is a miracle that curiosity survives formal education. - Albert Einstein -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: <https://lists.zytor.com/archives/klibc/attachments/20220828/ceecd99f/attachment.sig>