Skip to content

Commit 156e018

Browse files
committed
libfuzzer: log all the libcalls to stderr
1 parent 63e63e0 commit 156e018

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

lib/fuzzer.zig

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,54 @@ export fn __sanitizer_cov_8bit_counters_init(start: [*]u8, stop: [*]u8) void {
99
export fn __sanitizer_cov_pcs_init(pcs_beg: [*]const usize, pcs_end: [*]const usize) void {
1010
std.debug.print("__sanitizer_cov_pcs_init pcs_beg={*}, pcs_end={*}\n", .{ pcs_beg, pcs_end });
1111
}
12+
13+
export fn __sanitizer_cov_trace_const_cmp1(arg1: u8, arg2: u8) void {
14+
handleCmp(@returnAddress(), arg1, arg2);
15+
}
16+
17+
export fn __sanitizer_cov_trace_cmp1(arg1: u8, arg2: u8) void {
18+
handleCmp(@returnAddress(), arg1, arg2);
19+
}
20+
21+
export fn __sanitizer_cov_trace_const_cmp2(arg1: u16, arg2: u16) void {
22+
handleCmp(@returnAddress(), arg1, arg2);
23+
}
24+
25+
export fn __sanitizer_cov_trace_cmp2(arg1: u16, arg2: u16) void {
26+
handleCmp(@returnAddress(), arg1, arg2);
27+
}
28+
29+
export fn __sanitizer_cov_trace_const_cmp4(arg1: u32, arg2: u32) void {
30+
handleCmp(@returnAddress(), arg1, arg2);
31+
}
32+
33+
export fn __sanitizer_cov_trace_cmp4(arg1: u32, arg2: u32) void {
34+
handleCmp(@returnAddress(), arg1, arg2);
35+
}
36+
37+
export fn __sanitizer_cov_trace_const_cmp8(arg1: u64, arg2: u64) void {
38+
handleCmp(@returnAddress(), arg1, arg2);
39+
}
40+
41+
export fn __sanitizer_cov_trace_cmp8(arg1: u64, arg2: u64) void {
42+
handleCmp(@returnAddress(), arg1, arg2);
43+
}
44+
45+
export fn __sanitizer_cov_trace_switch(val: u64, cases_ptr: [*]u64) void {
46+
const pc = @returnAddress();
47+
const len = cases_ptr[0];
48+
const val_size_in_bits = cases_ptr[1];
49+
const cases = cases_ptr[2..][0..len];
50+
std.debug.print("0x{x}: switch on value {d} ({d} bits) with {d} cases\n", .{
51+
pc, val, val_size_in_bits, cases.len,
52+
});
53+
}
54+
55+
export fn __sanitizer_cov_trace_pc_indir(callee: usize) void {
56+
const pc = @returnAddress();
57+
std.debug.print("0x{x}: indirect call to 0x{x}\n", .{ pc, callee });
58+
}
59+
60+
fn handleCmp(pc: usize, arg1: u64, arg2: u64) void {
61+
std.debug.print("0x{x}: comparison of {d} and {d}\n", .{ pc, arg1, arg2 });
62+
}

0 commit comments

Comments
 (0)