diff options
author | Vladimir Azarov <avm@intermediate-node.net> | 2024-10-01 15:47:05 +0200 |
---|---|---|
committer | Vladimir Azarov <avm@intermediate-node.net> | 2024-10-01 15:47:05 +0200 |
commit | 4abab5ad6c8465a7528ccdd5f49367da05f78bbd (patch) | |
tree | ebf009bf1376a5a223a915bc27cbbd791a1316bc /src/unistd/mipsn32 |
Initial version
Diffstat (limited to 'src/unistd/mipsn32')
-rw-r--r-- | src/unistd/mipsn32/lseek.c | 19 | ||||
-rw-r--r-- | src/unistd/mipsn32/pipe.s | 19 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/unistd/mipsn32/lseek.c b/src/unistd/mipsn32/lseek.c new file mode 100644 index 0000000..0f6cbca --- /dev/null +++ b/src/unistd/mipsn32/lseek.c @@ -0,0 +1,19 @@ +#include <unistd.h> +#include "syscall.h" + +off_t __lseek(int fd, off_t offset, int whence) +{ + register long long r4 __asm__("$4") = fd; + register long long r5 __asm__("$5") = offset; + register long long r6 __asm__("$6") = whence; + register long long r7 __asm__("$7"); + register long long r2 __asm__("$2") = SYS_lseek; + __asm__ __volatile__ ( + "syscall" + : "+&r"(r2), "=r"(r7) + : "r"(r4), "r"(r5), "r"(r6) + : SYSCALL_CLOBBERLIST); + return r7 ? __syscall_ret(-r2) : r2; +} + +weak_alias(__lseek, lseek); diff --git a/src/unistd/mipsn32/pipe.s b/src/unistd/mipsn32/pipe.s new file mode 100644 index 0000000..80f882e --- /dev/null +++ b/src/unistd/mipsn32/pipe.s @@ -0,0 +1,19 @@ +.set noreorder +.global pipe +.type pipe,@function +pipe: + lui $3, %hi(%neg(%gp_rel(pipe))) + addiu $3, $3, %lo(%neg(%gp_rel(pipe))) + addu $3, $3, $25 + li $2, 6021 + syscall + beq $7, $0, 1f + nop + lw $25, %got_disp(__syscall_ret)($3) + jr $25 + subu $4, $0, $2 +1: sw $2, 0($4) + sw $3, 4($4) + move $2, $0 + jr $ra + nop |