| ... | @@ -388,20 +388,21 @@ pub usingnamespace @import("linux/io_uring.zig"); | ... | @@ -388,20 +388,21 @@ pub usingnamespace @import("linux/io_uring.zig"); |
| 388 | /// Set by startup code, used by `getauxval`. | 388 | /// Set by startup code, used by `getauxval`. |
| 389 | pub var elf_aux_maybe: ?[*]std.elf.Auxv = null; | 389 | pub var elf_aux_maybe: ?[*]std.elf.Auxv = null; |
| 390 | | 390 | |
| 391 | pub usingnamespace if (switch (builtin.zig_backend) { | 391 | const extern_getauxval = switch (builtin.zig_backend) { |
| 392 | // Calling extern functions is not yet supported with these backends | 392 | // Calling extern functions is not yet supported with these backends |
| 393 | .stage2_aarch64, .stage2_arm, .stage2_riscv64, .stage2_sparc64 => false, | 393 | .stage2_aarch64, .stage2_arm, .stage2_riscv64, .stage2_sparc64 => false, |
| 394 | else => !builtin.link_libc, | 394 | else => !builtin.link_libc, |
| 395 | }) struct { | 395 | }; |
| 396 | /// See `std.elf` for the constants. | 396 | |
| 397 | /// This matches the libc getauxval function. | 397 | comptime { |
| 398 | pub extern fn getauxval(index: usize) usize; | 398 | if (extern_getauxval) { |
| 399 | comptime { | | |
| 400 | @export(getauxvalImpl, .{ .name = "getauxval", .linkage = .Weak }); | 399 | @export(getauxvalImpl, .{ .name = "getauxval", .linkage = .Weak }); |
| 401 | } | 400 | } |
| 402 | } else struct { | 401 | } |
| 403 | pub const getauxval = getauxvalImpl; | 402 | |
| 404 | }; | 403 | pub const getauxval = if (extern_getauxval) struct { |
| | 404 | extern fn getauxval(index: usize) usize; |
| | 405 | }.getauxval else getauxvalImpl; |
| 405 | | 406 | |
| 406 | fn getauxvalImpl(index: usize) callconv(.C) usize { | 407 | fn getauxvalImpl(index: usize) callconv(.C) usize { |
| 407 | const auxv = elf_aux_maybe orelse return 0; | 408 | const auxv = elf_aux_maybe orelse return 0; |