Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › dynamic_library.zig › linkmap_iterator
linkmap_iterator
dynamic_library.linkmap_iterator
pub fn linkmap_iterator () error
File
Code
pub fn linkmap_iterator () error {InvalidExe }!LinkMap .Iterator {
const _DYNAMIC = get_DYNAMIC () orelse {
return .{ .current = null };
};
const link_map_ptr = init : {
var i : usize = 0 ;
while (_DYNAMIC [i ].d_tag != elf .DT_NULL ) : (i += 1 ) {
switch (_DYNAMIC [i ].d_tag ) {
elf .DT_DEBUG => {
const ptr = @as (?*RDebug , @ptrFromInt (_DYNAMIC [i ].d_val ));
if (ptr ) |r_debug | {
if (r_debug .version != 1 ) return error .InvalidExe ;
break :init r_debug .map ;
}
},
elf .DT_PLTGOT => {
const ptr = @as (?[*]usize , @ptrFromInt (_DYNAMIC [i ].d_val ));
if (ptr ) |got_table | {
// the second slot
break :init @as (?*LinkMap , @ptrFromInt (got_table [1 ]));
}
},
else => {},
}
}
return .{ .current = null };
};
return .{ .current = link_map_ptr };
}