# AFL Context Sensitive Branch Coverage

## What is this?

This is an LLVM-based implementation of the context sensitive branch coverage.

Basically every function gets its own ID and that ID is combined with the
edges of the called functions.

So if both function A and function B call a function C, the coverage
collected in C will be different.

In math the coverage is collected as follows:
`map[current_location_ID ^ previous_location_ID >> 1 ^ previous_callee_ID] += 1`

## Usage

Set the `AFL_LLVM_INSTRUMENT=CTX` or `AFL_LLVM_CTX=1` environment variable.

It is highly recommended to increase the MAP_SIZE_POW2 definition in
config.h to at least 18 and maybe up to 20 for this as otherwise too
many map collisions occur.
