diff options
author | vanhauser-thc <vh@thc.org> | 2024-05-13 08:44:43 +0200 |
---|---|---|
committer | vanhauser-thc <vh@thc.org> | 2024-05-13 08:44:43 +0200 |
commit | 24b9d74e70107a4517396d7fa940140e206398bf (patch) | |
tree | 1028ecfaeb0ce077111061eb7f903abc7f2afc2b | |
parent | 93c7cbd49603c1a256caf3ab6e971c9f4e40bab4 (diff) | |
download | afl++-24b9d74e70107a4517396d7fa940140e206398bf.tar.gz |
compcov int fix
-rw-r--r-- | docs/Changelog.md | 1 | ||||
-rw-r--r-- | instrumentation/split-compares-pass.so.cc | 6 |
2 files changed, 7 insertions, 0 deletions
diff --git a/docs/Changelog.md b/docs/Changelog.md index aa142274..9a95e343 100644 --- a/docs/Changelog.md +++ b/docs/Changelog.md @@ -13,6 +13,7 @@ * afl-cc: - re-enable i386 support that was accidently disabled - fixes for LTO and outdated afl-gcc mode + - fix COMPCOV split compare for old LLVMs - ensure shared memory variables are visible in weird build setups * afl-cmin - work with input files that have a space diff --git a/instrumentation/split-compares-pass.so.cc b/instrumentation/split-compares-pass.so.cc index 728ebc22..9b7bf256 100644 --- a/instrumentation/split-compares-pass.so.cc +++ b/instrumentation/split-compares-pass.so.cc @@ -1778,7 +1778,13 @@ bool SplitComparesTransform::runOnModule(Module &M) { auto op0 = CI->getOperand(0); auto op1 = CI->getOperand(1); + // has to valid operands if (!op0 || !op1) { continue; } + // has exactly one constant and one variable + int constants = 0; + if (dyn_cast<ConstantInt>(op0)) { ++constants; } + if (dyn_cast<ConstantInt>(op1)) { ++constants; } + if (constants != 1) { continue; } auto iTy1 = dyn_cast<IntegerType>(op0->getType()); if (iTy1 && isa<IntegerType>(op1->getType())) { |