extern structstd.Build.Fuzz.abi.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

Values

Constanttrailing[src]

Used for comptime assertions. Provides a mechanism for strategically causing compile errors.

Source Code

Source code
pub const trailing = .{
    .pc_bits_usize,
    .pc_addr,
}

Functions

FunctionheaderEnd[src]

pub fn headerEnd(header: *const SeenPcsHeader) []const usize

Parameters

header: *const SeenPcsHeader

Source Code

Source code
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)];
}

FunctionseenBits[src]

pub fn seenBits(header: *const SeenPcsHeader) []const usize

Parameters

header: *const SeenPcsHeader

Source Code

Source code
pub fn seenBits(header: *const SeenPcsHeader) []const usize {
    return header.headerEnd()[0..seenElemsLen(header.pcs_len)];
}

FunctionseenElemsLen[src]

pub fn seenElemsLen(pcs_len: usize) usize

Parameters

pcs_len: usize

Source Code

Source code
pub fn seenElemsLen(pcs_len: usize) usize {
    return (pcs_len + @bitSizeOf(usize) - 1) / @bitSizeOf(usize);
}

FunctionpcAddrs[src]

pub fn pcAddrs(header: *const SeenPcsHeader) []const usize

Parameters

header: *const SeenPcsHeader

Source Code

Source code
pub fn pcAddrs(header: *const SeenPcsHeader) []const usize {
    const pcs_len = header.pcs_len;
    return header.headerEnd()[seenElemsLen(pcs_len)..][0..pcs_len];
}

Source Code

Source code
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];
    }
}