From 5aaa7d0fbb885db646ebd6557afc8def93ff860f Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Fri, 27 Sep 2019 18:18:38 +0200 Subject: [PATCH 1/3] Avoid truncating mmap2 offsets if not multiple of page size --- lib/std/os/linux.zig | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index eb2f71cf99..9550518842 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -193,9 +193,29 @@ pub fn umount2(special: [*]const u8, flags: u32) usize { pub fn mmap(address: ?[*]u8, length: usize, prot: usize, flags: u32, fd: i32, offset: u64) usize { if (@hasDecl(@This(), "SYS_mmap2")) { - return syscall6(SYS_mmap2, @ptrToInt(address), length, prot, flags, @bitCast(usize, isize(fd)), @truncate(usize, offset / MMAP2_UNIT)); + // Make sure the offset is also specified in multiples of page size + if ((offset & (MMAP2_UNIT - 1)) != 0) + return @bitCast(usize, isize(-EINVAL)); + + return syscall6( + SYS_mmap2, + @ptrToInt(address), + length, + prot, + flags, + @bitCast(usize, isize(fd)), + @truncate(usize, offset / MMAP2_UNIT), + ); } else { - return syscall6(SYS_mmap, @ptrToInt(address), length, prot, flags, @bitCast(usize, isize(fd)), offset); + return syscall6( + SYS_mmap, + @ptrToInt(address), + length, + prot, + flags, + @bitCast(usize, isize(fd)), + offset, + ); } } From a220648198aafbd067ddbdc806d5d7ba50ed885b Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Fri, 27 Sep 2019 18:20:00 +0200 Subject: [PATCH 2/3] Backport patch for Musl libc Allows musl to compile for mipsel targets. https://www.openwall.com/lists/musl/2019/09/27/1/2 --- lib/libc/musl/src/setjmp/mips/longjmp.S | 18 ++++++------------ lib/libc/musl/src/setjmp/mips/setjmp.S | 18 ++++++------------ 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/lib/libc/musl/src/setjmp/mips/longjmp.S b/lib/libc/musl/src/setjmp/mips/longjmp.S index fdb6c95d25..ecf4085538 100644 --- a/lib/libc/musl/src/setjmp/mips/longjmp.S +++ b/lib/libc/musl/src/setjmp/mips/longjmp.S @@ -12,18 +12,12 @@ longjmp: addu $2, $2, 1 1: #ifndef __mips_soft_float - lwc1 $20, 56($4) - lwc1 $21, 60($4) - lwc1 $22, 64($4) - lwc1 $23, 68($4) - lwc1 $24, 72($4) - lwc1 $25, 76($4) - lwc1 $26, 80($4) - lwc1 $27, 84($4) - lwc1 $28, 88($4) - lwc1 $29, 92($4) - lwc1 $30, 96($4) - lwc1 $31, 100($4) + l.d $f20, 56($4) + l.d $f22, 64($4) + l.d $f24, 72($4) + l.d $f26, 80($4) + l.d $f28, 88($4) + l.d $f30, 96($4) #endif lw $ra, 0($4) lw $sp, 4($4) diff --git a/lib/libc/musl/src/setjmp/mips/setjmp.S b/lib/libc/musl/src/setjmp/mips/setjmp.S index 501d5264e6..7ae8832d51 100644 --- a/lib/libc/musl/src/setjmp/mips/setjmp.S +++ b/lib/libc/musl/src/setjmp/mips/setjmp.S @@ -22,18 +22,12 @@ setjmp: sw $30, 40($4) sw $28, 44($4) #ifndef __mips_soft_float - swc1 $20, 56($4) - swc1 $21, 60($4) - swc1 $22, 64($4) - swc1 $23, 68($4) - swc1 $24, 72($4) - swc1 $25, 76($4) - swc1 $26, 80($4) - swc1 $27, 84($4) - swc1 $28, 88($4) - swc1 $29, 92($4) - swc1 $30, 96($4) - swc1 $31, 100($4) + s.d $f20, 56($4) + s.d $f22, 64($4) + s.d $f24, 72($4) + s.d $f26, 80($4) + s.d $f28, 88($4) + s.d $f30, 96($4) #endif jr $ra li $2, 0 From 9ad0541f2c06e0eb3419b3da7fe721affa3aa3b5 Mon Sep 17 00:00:00 2001 From: LemonBoy Date: Fri, 27 Sep 2019 18:20:17 +0200 Subject: [PATCH 3/3] Enable mipsel+libc tests on CI --- test/tests.zig | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/tests.zig b/test/tests.zig index 4a9b2c89e6..3c6baeb360 100644 --- a/test/tests.zig +++ b/test/tests.zig @@ -140,6 +140,16 @@ const test_targets = [_]TestTarget{ }, }, }, + TestTarget{ + .target = Target{ + .Cross = CrossTarget{ + .os = .linux, + .arch = .mipsel, + .abi = .musl, + }, + }, + .link_libc = true, + }, TestTarget{ .target = Target{