extern struct SeenPcsHeader [src]

libfuzzer uses this and its usize is the one that counts. To match the ABI, make the ints be the size of the target used with libfuzzer. Trailing: 1 bit per pc_addr, usize elements pc_addr: usize for each pcs_len

Fields

n_runs: usize
unique_runs: usize
pcs_len: usize

Members

Source

pub const SeenPcsHeader = extern struct { n_runs: usize, unique_runs: usize, pcs_len: usize, /// Used for comptime assertions. Provides a mechanism for strategically /// causing compile errors. pub const trailing = .{ .pc_bits_usize, .pc_addr, }; pub fn headerEnd(header: *const SeenPcsHeader) []const usize { const ptr: [*]align(@alignOf(usize)) const u8 = @ptrCast(header); const header_end_ptr: [*]const usize = @ptrCast(ptr + @sizeOf(SeenPcsHeader)); const pcs_len = header.pcs_len; return header_end_ptr[0 .. pcs_len + seenElemsLen(pcs_len)]; } pub fn seenBits(header: *const SeenPcsHeader) []const usize { return header.headerEnd()[0..seenElemsLen(header.pcs_len)]; } pub fn seenElemsLen(pcs_len: usize) usize { return (pcs_len + @bitSizeOf(usize) - 1) / @bitSizeOf(usize); } pub fn pcAddrs(header: *const SeenPcsHeader) []const usize { const pcs_len = header.pcs_len; return header.headerEnd()[seenElemsLen(pcs_len)..][0..pcs_len]; } }