| ... | ... | @@ -447,7 +447,7 @@ const usage_build_generic = |
| 447 | 447 | \\ -F[dir] (Darwin) add search path for frameworks |
| 448 | 448 | \\ -install_name=[value] (Darwin) add dylib's install name |
| 449 | 449 | \\ --entitlements [path] (Darwin) add path to entitlements file for embedding in code signature |
| 450 | | \\ -pagezero_size [value] (Darwin) size of the __PAGEZERO segment |
| 450 | \\ -pagezero_size [value] (Darwin) size of the __PAGEZERO segment in hexadecimal notation |
| 451 | 451 | \\ --import-memory (WebAssembly) import memory from the environment |
| 452 | 452 | \\ --import-table (WebAssembly) import function table from the host environment |
| 453 | 453 | \\ --export-table (WebAssembly) export function table to the host environment |
| ... | ... | @@ -914,7 +914,7 @@ fn buildOutputType( |
| 914 | 914 | const next_arg = args_iter.next() orelse { |
| 915 | 915 | fatal("expected parameter after {s}", .{arg}); |
| 916 | 916 | }; |
| 917 | | pagezero_size = std.fmt.parseUnsigned(u64, next_arg, 0) catch |err| { |
| 917 | pagezero_size = std.fmt.parseUnsigned(u64, eatIntPrefix(next_arg, 16), 16) catch |err| { |
| 918 | 918 | fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) }); |
| 919 | 919 | }; |
| 920 | 920 | } else if (mem.eql(u8, arg, "-T") or mem.eql(u8, arg, "--script")) { |
| ... | ... | @@ -1662,7 +1662,7 @@ fn buildOutputType( |
| 1662 | 1662 | fatal("expected linker arg after '{s}'", .{arg}); |
| 1663 | 1663 | } |
| 1664 | 1664 | const next_arg = linker_args.items[i]; |
| 1665 | | pagezero_size = std.fmt.parseUnsigned(u64, next_arg, 0) catch |err| { |
| 1665 | pagezero_size = std.fmt.parseUnsigned(u64, eatIntPrefix(next_arg, 16), 16) catch |err| { |
| 1666 | 1666 | fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) }); |
| 1667 | 1667 | }; |
| 1668 | 1668 | } else if (mem.eql(u8, arg, "--gc-sections")) { |
| ... | ... | @@ -5067,6 +5067,18 @@ pub fn cmdChangelist( |
| 5067 | 5067 | try bw.flush(); |
| 5068 | 5068 | } |
| 5069 | 5069 | |
| 5070 | fn eatIntPrefix(arg: []const u8, radix: u8) []const u8 { |
| 5071 | if (arg.len > 2 and arg[0] == '0') { |
| 5072 | switch (std.ascii.toLower(arg[1])) { |
| 5073 | 'b' => if (radix == 2) return arg[2..], |
| 5074 | 'o' => if (radix == 8) return arg[2..], |
| 5075 | 'x' => if (radix == 16) return arg[2..], |
| 5076 | else => {}, |
| 5077 | } |
| 5078 | } |
| 5079 | return arg; |
| 5080 | } |
| 5081 | |
| 5070 | 5082 | fn parseIntSuffix(arg: []const u8, prefix_len: usize) u64 { |
| 5071 | 5083 | return std.fmt.parseUnsigned(u64, arg[prefix_len..], 0) catch |err| { |
| 5072 | 5084 | fatal("unable to parse '{s}': {s}", .{ arg, @errorName(err) }); |