@@ -15,41 +15,53 @@ func libfuzzerCall4(fn *byte, fakePC uintptr, s1, s2 unsafe.Pointer, result uint
15
15
// Keep in sync with the definition of ret_sled in src/runtime/libfuzzer_amd64.s
16
16
const retSledSize = 512
17
17
18
+ // In libFuzzer mode, the compiler inserts calls to libfuzzerTraceCmpN and libfuzzerTraceConstCmpN
19
+ // (where N can be 1, 2, 4, or 8) for encountered integer comparisons in the code to be instrumented.
20
+ // This may result in these functions having callers that are nosplit. That is why they must be nosplit.
21
+ //
22
+ //go:nosplit
18
23
func libfuzzerTraceCmp1 (arg0 , arg1 uint8 , fakePC int ) {
19
24
fakePC = fakePC % retSledSize
20
25
libfuzzerCallTraceIntCmp (& __sanitizer_cov_trace_cmp1 , uintptr (arg0 ), uintptr (arg1 ), uintptr (fakePC ))
21
26
}
22
27
28
+ //go:nosplit
23
29
func libfuzzerTraceCmp2 (arg0 , arg1 uint16 , fakePC int ) {
24
30
fakePC = fakePC % retSledSize
25
31
libfuzzerCallTraceIntCmp (& __sanitizer_cov_trace_cmp2 , uintptr (arg0 ), uintptr (arg1 ), uintptr (fakePC ))
26
32
}
27
33
34
+ //go:nosplit
28
35
func libfuzzerTraceCmp4 (arg0 , arg1 uint32 , fakePC int ) {
29
36
fakePC = fakePC % retSledSize
30
37
libfuzzerCallTraceIntCmp (& __sanitizer_cov_trace_cmp4 , uintptr (arg0 ), uintptr (arg1 ), uintptr (fakePC ))
31
38
}
32
39
40
+ //go:nosplit
33
41
func libfuzzerTraceCmp8 (arg0 , arg1 uint64 , fakePC int ) {
34
42
fakePC = fakePC % retSledSize
35
43
libfuzzerCallTraceIntCmp (& __sanitizer_cov_trace_cmp8 , uintptr (arg0 ), uintptr (arg1 ), uintptr (fakePC ))
36
44
}
37
45
46
+ //go:nosplit
38
47
func libfuzzerTraceConstCmp1 (arg0 , arg1 uint8 , fakePC int ) {
39
48
fakePC = fakePC % retSledSize
40
49
libfuzzerCallTraceIntCmp (& __sanitizer_cov_trace_const_cmp1 , uintptr (arg0 ), uintptr (arg1 ), uintptr (fakePC ))
41
50
}
42
51
52
+ //go:nosplit
43
53
func libfuzzerTraceConstCmp2 (arg0 , arg1 uint16 , fakePC int ) {
44
54
fakePC = fakePC % retSledSize
45
55
libfuzzerCallTraceIntCmp (& __sanitizer_cov_trace_const_cmp2 , uintptr (arg0 ), uintptr (arg1 ), uintptr (fakePC ))
46
56
}
47
57
58
+ //go:nosplit
48
59
func libfuzzerTraceConstCmp4 (arg0 , arg1 uint32 , fakePC int ) {
49
60
fakePC = fakePC % retSledSize
50
61
libfuzzerCallTraceIntCmp (& __sanitizer_cov_trace_const_cmp4 , uintptr (arg0 ), uintptr (arg1 ), uintptr (fakePC ))
51
62
}
52
63
64
+ //go:nosplit
53
65
func libfuzzerTraceConstCmp8 (arg0 , arg1 uint64 , fakePC int ) {
54
66
fakePC = fakePC % retSledSize
55
67
libfuzzerCallTraceIntCmp (& __sanitizer_cov_trace_const_cmp8 , uintptr (arg0 ), uintptr (arg1 ), uintptr (fakePC ))
0 commit comments