diff options
author | Kostya Serebryany <kcc@google.com> | 2019-05-09 22:09:25 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2019-05-09 22:09:25 +0000 |
commit | 31c5b88a7b987ee52d5e83f4e6dfe68d354b5bb3 (patch) | |
tree | 562fda378ab8b4e769f2a450bd19247822eb35e1 /lib/fuzzer/FuzzerTracePC.cpp | |
parent | ef2d0c795beb5d0a3574e34a83adefcfe8304bae (diff) | |
download | compiler-rt-31c5b88a7b987ee52d5e83f4e6dfe68d354b5bb3.tar.gz |
[libFuzzer] perform more agressive value profiling in memcmp
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@360385 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/fuzzer/FuzzerTracePC.cpp')
-rw-r--r-- | lib/fuzzer/FuzzerTracePC.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/fuzzer/FuzzerTracePC.cpp b/lib/fuzzer/FuzzerTracePC.cpp index a2d3b7e7f..4a1308de5 100644 --- a/lib/fuzzer/FuzzerTracePC.cpp +++ b/lib/fuzzer/FuzzerTracePC.cpp @@ -369,11 +369,16 @@ void TracePC::AddValueForMemcmp(void *caller_pc, const void *s1, const void *s2, Hash ^= (T << 8) | B2[i]; } size_t I = 0; - for (; I < Len; I++) - if (B1[I] != B2[I] || (StopAtZero && B1[I] == 0)) + uint8_t HammingDistance = 0; + for (; I < Len; I++) { + if (B1[I] != B2[I] || (StopAtZero && B1[I] == 0)) { + HammingDistance = Popcountll(B1[I] ^ B2[I]); break; + } + } size_t PC = reinterpret_cast<size_t>(caller_pc); size_t Idx = (PC & 4095) | (I << 12); + Idx += HammingDistance; ValueProfileMap.AddValue(Idx); TORCW.Insert(Idx ^ Hash, Word(B1, Len), Word(B2, Len)); } |