| ... | ... | @@ -7,6 +7,7 @@ const Step = std.Build.Step; |
| 7 | 7 | const Coverage = std.debug.Coverage; |
| 8 | 8 | const abi = std.Build.Fuzz.abi; |
| 9 | 9 | const log = std.log; |
| 10 | const assert = std.debug.assert; |
| 10 | 11 | |
| 11 | 12 | const WebServer = @This(); |
| 12 | 13 | |
| ... | ... | @@ -383,7 +384,10 @@ fn sendCoverageContext( |
| 383 | 384 | // TODO: make each events URL correspond to one coverage map |
| 384 | 385 | const coverage_map = &coverage_maps[0]; |
| 385 | 386 | const cov_header: *const abi.SeenPcsHeader = @ptrCast(coverage_map.mapped_memory[0..@sizeOf(abi.SeenPcsHeader)]); |
| 387 | comptime assert(abi.SeenPcsHeader.trailing[0] == .pc_addr); |
| 386 | 388 | const seen_pcs = coverage_map.mapped_memory[@sizeOf(abi.SeenPcsHeader) + coverage_map.source_locations.len * @sizeOf(usize) ..]; |
| 389 | comptime assert(abi.SeenPcsHeader.trailing[1][0] == .pc_bits); |
| 390 | comptime assert(abi.SeenPcsHeader.trailing[1][1] == u8); |
| 387 | 391 | const n_runs = @atomicLoad(usize, &cov_header.n_runs, .monotonic); |
| 388 | 392 | const unique_runs = @atomicLoad(usize, &cov_header.unique_runs, .monotonic); |
| 389 | 393 | const lowest_stack = @atomicLoad(usize, &cov_header.lowest_stack, .monotonic); |
| ... | ... | @@ -630,6 +634,7 @@ fn prepareTables( |
| 630 | 634 | gop.value_ptr.mapped_memory = mapped_memory; |
| 631 | 635 | |
| 632 | 636 | const header: *const abi.SeenPcsHeader = @ptrCast(mapped_memory[0..@sizeOf(abi.SeenPcsHeader)]); |
| 637 | comptime assert(abi.SeenPcsHeader.trailing[0] == .pc_addr); |
| 633 | 638 | const pcs_bytes = mapped_memory[@sizeOf(abi.SeenPcsHeader)..][0 .. header.pcs_len * @sizeOf(usize)]; |
| 634 | 639 | const pcs = std.mem.bytesAsSlice(usize, pcs_bytes); |
| 635 | 640 | const source_locations = try gpa.alloc(Coverage.SourceLocation, pcs.len); |
| ... | ... | @@ -649,6 +654,7 @@ fn addEntryPoint(ws: *WebServer, coverage_id: u64, addr: u64) error{ AlreadyRepo |
| 649 | 654 | |
| 650 | 655 | const coverage_map = ws.coverage_files.getPtr(coverage_id).?; |
| 651 | 656 | const ptr = coverage_map.mapped_memory; |
| 657 | comptime assert(abi.SeenPcsHeader.trailing[0] == .pc_addr); |
| 652 | 658 | const pcs_bytes = ptr[@sizeOf(abi.SeenPcsHeader)..][0 .. coverage_map.source_locations.len * @sizeOf(usize)]; |
| 653 | 659 | const pcs: []const usize = @alignCast(std.mem.bytesAsSlice(usize, pcs_bytes)); |
| 654 | 660 | const index = std.sort.upperBound(usize, pcs, addr, struct { |