| ... | @@ -34,6 +34,20 @@ fn alloc(_: *anyopaque, n: usize, log2_align: u8, ra: usize) ?[*]u8 { | ... | @@ -34,6 +34,20 @@ fn alloc(_: *anyopaque, n: usize, log2_align: u8, ra: usize) ?[*]u8 { |
| 34 | return @ptrCast(addr); | 34 | return @ptrCast(addr); |
| 35 | } | 35 | } |
| 36 | | 36 | |
| | 37 | if (builtin.zig_backend == .stage2_riscv64) { |
| | 38 | const aligned_len = mem.alignForward(usize, n, mem.page_size); |
| | 39 | const slice = posix.mmap( |
| | 40 | null, |
| | 41 | aligned_len, |
| | 42 | posix.PROT.READ | posix.PROT.WRITE, |
| | 43 | .{ .TYPE = .PRIVATE, .ANONYMOUS = true }, |
| | 44 | -1, |
| | 45 | 0, |
| | 46 | ) catch return null; |
| | 47 | assert(mem.isAligned(@intFromPtr(slice.ptr), mem.page_size)); |
| | 48 | return slice.ptr; |
| | 49 | } |
| | 50 | |
| 37 | const aligned_len = mem.alignForward(usize, n, mem.page_size); | 51 | const aligned_len = mem.alignForward(usize, n, mem.page_size); |
| 38 | const hint = @atomicLoad(@TypeOf(std.heap.next_mmap_addr_hint), &std.heap.next_mmap_addr_hint, .unordered); | 52 | const hint = @atomicLoad(@TypeOf(std.heap.next_mmap_addr_hint), &std.heap.next_mmap_addr_hint, .unordered); |
| 39 | const slice = posix.mmap( | 53 | const slice = posix.mmap( |