lib/tldr/src/formats/elf/liveness/groups.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const root = @import("../../../root.zig");
2 const elf = @import("../root.zig");
3 const state = @import("state.zig");
4
5 const model = root.model;
6 const ObjectFile = elf.parser.ObjectFile;
7 const SectionRef = elf.parser.SectionRef;
8 const State = state.State;
9
10 pub fn mark(
11 objects: []const ObjectFile,
12 group_memberships: *const elf.group.Index,
13 live: *State,
14 section_ref: SectionRef,
15 ) model.Error!void {
16 const object = objects[section_ref.object_index];
17 for (group_memberships.groupsForSection(section_ref)) |group_section_index| {
18 if (group_section_index >= object.sections.len) return error.MissingSection;
19 const group_bytes = try elf.group.bytes(object, object.sections[group_section_index]);
20 var member_iterator = elf.group.members(group_bytes);
21 while (member_iterator.next()) |member_index| {
22 try state.markSection(
23 live,
24 objects,
25 .{
26 .object_index = section_ref.object_index,
27 .section_index = member_index,
28 },
29 );
30 }
31 }
32 }