Bisection Bug Search is a tool for finding compiler optimizations bugs. It accepts a program which exposes a bug by producing incorrect output and expected output for the program. It then attempts to narrow down the issue to a single method and optimization pass under the assumption that interpreter is correct.
Given methods in order M0..Mn finds smallest i such that compiling Mi and interpreting all other methods produces incorrect output. Then, given ordered optimization passes P0..Pl, finds smallest j such that compiling Mi with passes P0..Pj-1 produces expected output and compiling Mi with passes P0..Pj produces incorrect output. Prints Mi and Pj.
There are two supported invocation modes:
Regular invocation, dalvikvm command is constructed internally:
./bisection_search.py -cp classes.dex --expected-output out_int --class Test
Raw-cmd invocation, dalvikvm command is accepted as an argument. The command has to start with an executable.
Extra dalvikvm arguments will be placed on second position in the command by default. {ARGS} tag can be used to specify a custom position.
./bisection_search.py --raw-cmd='run.sh -cp classes.dex Test' --expected-retcode SUCCESS ./bisection_search.py --raw-cmd='/bin/sh art {ARGS} -cp classes.dex Test' --expected-retcode SUCCESS
Help:
bisection_search.py [-h] [-cp CLASSPATH] [--class CLASSNAME] [--lib LIB] [--dalvikvm-option [OPT [OPT ...]]] [--arg [ARG [ARG ...]]] [--image IMAGE] [--raw-cmd RAW_CMD] [--64] [--device] [--device-serial DEVICE_SERIAL] [--expected-output EXPECTED_OUTPUT] [--expected-retcode {SUCCESS,TIMEOUT,ERROR}] [--check-script CHECK_SCRIPT] [--logfile LOGFILE] [--cleanup] [--timeout TIMEOUT] [--verbose] Tool for finding compiler bugs. Either --raw-cmd or both -cp and --class are required. optional arguments: -h, --help show this help message and exit dalvikvm command options: -cp CLASSPATH, --classpath CLASSPATH classpath --class CLASSNAME name of main class --lib LIB lib to use, default: libart.so --dalvikvm-option [OPT [OPT ...]] additional dalvikvm option --arg [ARG [ARG ...]] argument passed to test --image IMAGE path to image --raw-cmd RAW_CMD bisect with this command, ignore other command options bisection options: --64 x64 mode --device run on device --device-serial DEVICE_SERIAL device serial number, implies --device --expected-output EXPECTED_OUTPUT file containing expected output --expected-retcode {SUCCESS,TIMEOUT,ERROR} expected normalized return code --check-script CHECK_SCRIPT script comparing output and expected output --logfile LOGFILE custom logfile location --cleanup clean up after bisecting --timeout TIMEOUT if timeout seconds pass assume test failed --verbose enable verbose output