| author | |
| committer | |
| log | 1cc388d5263058f9e9eecc410eea825a9a58e143 |
| tree | 90a02eaeeb263bd175a9525fd27e16d8eb269acb |
| parent | ecc76348e6858f00b920d8dc9e44a6e703d8e497 |
3 files changed, 10 insertions(+), 2 deletions(-)
lib/std/Thread.zig+1| ... | @@ -1420,6 +1420,7 @@ const LinuxThreadImpl = struct { | ... | @@ -1420,6 +1420,7 @@ const LinuxThreadImpl = struct { |
| 1420 | error.PermissionDenied => unreachable, | 1420 | error.PermissionDenied => unreachable, |
| 1421 | error.ProcessFdQuotaExceeded => unreachable, | 1421 | error.ProcessFdQuotaExceeded => unreachable, |
| 1422 | error.SystemFdQuotaExceeded => unreachable, | 1422 | error.SystemFdQuotaExceeded => unreachable, |
| 1423 | error.MappingAlreadyExists => unreachable, | ||
| 1423 | else => |e| return e, | 1424 | else => |e| return e, |
| 1424 | }; | 1425 | }; |
| 1425 | assert(mapped.len >= map_bytes); | 1426 | assert(mapped.len >= map_bytes); |
lib/std/debug/Dwarf.zig+5-2| ... | @@ -2434,14 +2434,17 @@ pub const ElfModule = struct { | ... | @@ -2434,14 +2434,17 @@ pub const ElfModule = struct { |
| 2434 | const end_pos = elf_file.getEndPos() catch return bad(); | 2434 | const end_pos = elf_file.getEndPos() catch return bad(); |
| 2435 | const file_len = cast(usize, end_pos) orelse return error.Overflow; | 2435 | const file_len = cast(usize, end_pos) orelse return error.Overflow; |
| 2436 | 2436 | ||
| 2437 | const mapped_mem = try std.posix.mmap( | 2437 | const mapped_mem = std.posix.mmap( |
| 2438 | null, | 2438 | null, |
| 2439 | file_len, | 2439 | file_len, |
| 2440 | std.posix.PROT.READ, | 2440 | std.posix.PROT.READ, |
| 2441 | .{ .TYPE = .SHARED }, | 2441 | .{ .TYPE = .SHARED }, |
| 2442 | elf_file.handle, | 2442 | elf_file.handle, |
| 2443 | 0, | 2443 | 0, |
| 2444 | ); | 2444 | ) catch |err| switch (err) { |
| 2445 | error.MappingAlreadyExists => unreachable, | ||
| 2446 | else => |e| return e, | ||
| 2447 | }; | ||
| 2445 | errdefer std.posix.munmap(mapped_mem); | 2448 | errdefer std.posix.munmap(mapped_mem); |
| 2446 | 2449 | ||
| 2447 | return load( | 2450 | return load( |
lib/std/posix.zig+4| ... | @@ -4754,6 +4754,9 @@ pub const MMapError = error{ | ... | @@ -4754,6 +4754,9 @@ pub const MMapError = error{ |
| 4754 | ProcessFdQuotaExceeded, | 4754 | ProcessFdQuotaExceeded, |
| 4755 | SystemFdQuotaExceeded, | 4755 | SystemFdQuotaExceeded, |
| 4756 | OutOfMemory, | 4756 | OutOfMemory, |
| 4757 | |||
| 4758 | /// Using FIXED_NOREPLACE flag and the process has already mapped memory at the given address | ||
| 4759 | MappingAlreadyExists, | ||
| 4757 | } || UnexpectedError; | 4760 | } || UnexpectedError; |
| 4758 | 4761 | ||
| 4759 | /// Map files or devices into memory. | 4762 | /// Map files or devices into memory. |
| ... | @@ -4792,6 +4795,7 @@ pub fn mmap( | ... | @@ -4792,6 +4795,7 @@ pub fn mmap( |
| 4792 | .MFILE => return error.ProcessFdQuotaExceeded, | 4795 | .MFILE => return error.ProcessFdQuotaExceeded, |
| 4793 | .NFILE => return error.SystemFdQuotaExceeded, | 4796 | .NFILE => return error.SystemFdQuotaExceeded, |
| 4794 | .NOMEM => return error.OutOfMemory, | 4797 | .NOMEM => return error.OutOfMemory, |
| 4798 | .EXIST => return error.MappingAlreadyExists, | ||
| 4795 | else => return unexpectedErrno(err), | 4799 | else => return unexpectedErrno(err), |
| 4796 | } | 4800 | } |
| 4797 | } | 4801 | } |