zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 0e8f130aedce1e17299a8505bf997ae06e83b334 (tree)
parent ec5a068ac133d01477da340fc34cd987a817300d
Author: Jakub Konka <kubkon@jakubkonka.com>
Date:   Mon,  4 Sep 2023 09:11:15 +0200

Merge pull request #16977 from kcbanner/lib_getauxval_fixup

linux: export getauxval when not compiling with libc
Diffstat:
Mlib/std/os/linux.zig | 18++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig @@ -154,8 +154,22 @@ pub usingnamespace @import("linux/io_uring.zig"); /// Set by startup code, used by `getauxval`. pub var elf_aux_maybe: ?[*]std.elf.Auxv = null; -/// See `std.elf` for the constants. -pub fn getauxval(index: usize) usize { +pub usingnamespace if (switch (builtin.zig_backend) { + // Calling extern functions is not yet supported with these backends + .stage2_x86_64, .stage2_aarch64, .stage2_arm, .stage2_riscv64, .stage2_sparc64 => false, + else => !builtin.link_libc, +}) struct { + /// See `std.elf` for the constants. + /// This matches the libc getauxval function. + pub extern fn getauxval(index: usize) usize; + comptime { + @export(getauxvalImpl, .{ .name = "getauxval", .linkage = .Weak }); + } +} else struct { + pub const getauxval = getauxvalImpl; +}; + +fn getauxvalImpl(index: usize) callconv(.C) usize { const auxv = elf_aux_maybe orelse return 0; var i: usize = 0; while (auxv[i].a_type != std.elf.AT_NULL) : (i += 1) {