aboutsummaryrefslogtreecommitdiff
path: root/binary_search_tool/android
diff options
context:
space:
mode:
Diffstat (limited to 'binary_search_tool/android')
-rw-r--r--binary_search_tool/android/README.android186
-rw-r--r--binary_search_tool/android/README.android.md209
-rwxr-xr-xbinary_search_tool/android/switch_to_bad.sh2
-rwxr-xr-xbinary_search_tool/android/switch_to_good.sh2
4 files changed, 188 insertions, 211 deletions
diff --git a/binary_search_tool/android/README.android b/binary_search_tool/android/README.android
new file mode 100644
index 00000000..9e518f60
--- /dev/null
+++ b/binary_search_tool/android/README.android
@@ -0,0 +1,186 @@
+
+binary_search_state.py is a general binary search triage tool that
+performs a binary search on a set of things to try to identify which
+thing or thing(s) in the set is 'bad'. binary_search_state.py assumes
+that the user has two sets, one where everything is known to be good,
+and one which contains at least one bad item. binary_search_state.py
+then copies items from the good and bad sets into a working set and
+tests the result (good or bad). binary_search_state.py requires that
+a set of scripts be supplied to it for any particular job. For more
+information on binary_search_state.py, see
+
+https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/team-tools-and-scripts/binary-searcher-tool-for-triage
+
+This particular set of scripts is designed to work wtih
+binary_search_state.py in order to find the bad object or set of
+bad objects in an Android build.
+
+
+QUICKSTART:
+
+After setting up your 2 build trees (see Prerequisites section), do the
+following:
+
+ - Decide which test script to use (boot_test.sh or
+ interactive_test.sh)
+ - Get the serial number for the Android device you will use for testing.
+ - Run the following:
+
+ $ cd <android_src>
+ $ source build/envsetup.sh
+ $ lunch <android_device_lunch_combo>
+ $ cd <path_to_toolchain_utils>/binary_search_tool/
+ $ NUM_JOBS=10 ANDROID_SERIAL=<device_serial> \
+ ./android/setup.sh <android_src>
+
+ If you chose the boot test, then:
+ TEST_SCRIPT=android/boot_test.sh
+
+ If you chose the interactive test, then:
+ TEST_SCRIPT=android/interactive_test.sh
+
+ Finally, run the binary search tool:
+
+ $ python ./binary_search_state.py \
+ --get_initial_items=android/get_initial_items.sh \
+ --switch_to_good=android/switch_to_good.sh \
+ --switch_to_bad=android/switch_to_bad.sh \
+ --test_setup_script=android/test_setup.sh \
+ --test_script=$TEST_SCRIPT \
+ --file_args \
+ --prune
+
+ Once you have completely finished doing the binary search/triage,
+ run the cleanup script:
+
+ $ android/cleanup.sh
+
+
+
+FILES AND SCRIPTS:
+
+ Check the header comments for each script for more in depth documentation.
+
+ boot_test.sh - One of two possible test scripts used to determine
+ if the Android image built from the objects is good
+ or bad. This script tests to see if the image
+ booted, and requires no user intervention.
+
+ cleanup.sh - This is called after the binary search tool completes. This
+ script will clean up the common.sh file generated by setup.sh
+
+ get_initial_items.sh - This script is used to determine all Android objects
+ that will be bisected.
+
+ test_setup.sh - This script will build and flash your image to the
+ Android device. If the flash fails, this script will
+ help the user troubleshoot by trying to flash again or
+ by asking the user to manually flash it.
+
+ interactive_test.sh - One of two possible scripts used to determine
+ if the Android image built from the objects
+ is good or bad. This script requires user
+ interaction to determine if the image is
+ good or bad.
+
+ setup.sh - This is the first script the user should call, after
+ taking care of the prerequisites. It sets up the
+ environment appropriately for running the Android
+ object binary search triage, and it generates the
+ necessary common script (see below).
+
+ switch_to_bad.sh - This script is used to link objects from the
+ 'bad' build tree into the work area.
+
+ switch_to_good.sh - This script is used to link objects from the
+ 'good' build tree into the work area.
+
+
+GENERATED SCRIPTS:
+
+ common.sh - contains basic environment variable definitions for
+ this binary search triage session.
+
+ASSUMPTIONS:
+
+- There are two different Android builds, for the same board/lunch combo with
+ the same set of generated object files. One build creates a good working
+ Android image and the other does not.
+
+- The toolchain bug you are tracking down is not related to the linker. If the
+ linker is broken or generates bad code, this tool is unlikely to help you.
+
+
+PREREQUISITES FOR USING THESE SCRIPTS:
+
+ Step 1: Decide where to store each build tree
+ By default, each build tree is stored in "~/ANDROID_BISECT". However you
+ can override this by exporting BISECT_DIR set to whatever directory you
+ please. Keep in mind these build trees take dozens of gigabytes each.
+
+ Step 2: Setup your android build environment
+ 1. `cd <android_src>`
+ 2. `source build/envsetup.sh`
+ 3. `lunch <android_device_lunch_combo>`
+
+ Step 3: Populate the good build tree
+ 1. `make clean`
+ 2. `export BISECT_STAGE=POPULATE_GOOD`
+ 3. Install your "good" toolchain in Android, this will most likely be
+ the toolchain that comes preinstalled with the Android source.
+ 4. Build all of Android: `make -j10`. The "-j" parameter depends on how
+ many cores your machine has. See Android documentation for more details.
+
+ Step 4: Populate the bad build tree
+ 1. `make clean`
+ 2. `export BISECT_STAGE=POPULATE_BAD`
+ 3. Install your "bad" toolchain in Android.
+ 4. Build all of Android again.
+
+ Step 5: Run the android setup script
+ 1. `cd <path_to_toolchain_utils>/binary_search_tool/`
+ 2. `NUM_JOBS=<jobs> ANDROID_SERIAL=<android_serial_num> \
+ android/setup.sh <android_src>`
+
+ WARNING: It's important that you leave the full "out/" directory in your
+ Android source alone after Step 4. The binary search tool will
+ use this directory as a skeleton to build each test image while
+ triaging.
+
+USING THESE SCRIPTS FOR BINARY TRIAGE OF OBJECTS:
+
+To use these scripts, you must first run setup.sh, passing it the path to your
+Android source directory. setup.sh will do the following:
+
+ - Verify that your build trees are set up correctly (with good, bad).
+ - Verify that each build tree has the same contents.
+ - Verify that the android build environment (lunch, etc.) are setup in your
+ current shell.
+ - Create the common.sh file that the other scripts passed to the
+ binary triage tool will need.
+
+
+This set of scripts comes with two alternate test scripts. One test
+script, boot_test.sh, just checks to make sure that the image
+booted (wait for device to boot to home screen) and assumes that is enough.
+The other test script, interactive_test.sh, is interactive and asks YOU
+to tell it whether the image on the android device is ok or not (it
+prompts you and waits for a response).
+
+
+Once you have run setup.sh (and decided which test script you
+want to use) run the binary triage tool using these scripts to
+isolate/identify the bad object:
+
+./binary_search_state.py \
+ --get_initial_items=android/get_initial_items.sh \
+ --switch_to_good=android/switch_to_good.sh \
+ --switch_to_bad=android/switch_to_bad.sh \
+ --test_setup_script=android/test_setup.sh \
+ --test_script=android/boot_test.sh \ # could use interactive_test.sh instead
+ --prune
+
+
+After you have finished running the tool and have identified the bad
+object(s), you will want to run the cleanup script (android/cleanup.sh).
+
diff --git a/binary_search_tool/android/README.android.md b/binary_search_tool/android/README.android.md
deleted file mode 100644
index 9445dcbb..00000000
--- a/binary_search_tool/android/README.android.md
+++ /dev/null
@@ -1,209 +0,0 @@
-# Android's binary search tool
-
-`binary_search_state.py` is a general binary search triage tool that
-performs a binary search on a set of things to try to identify which
-thing or thing(s) in the set is 'bad'. `binary_search_state.py` assumes
-that the user has two sets, one where everything is known to be good,
-and one which contains at least one bad item. `binary_search_state.py`
-then copies items from the good and bad sets into a working set and
-tests the result (good or bad). `binary_search_state.py` requires that
-a set of scripts be supplied to it for any particular job. For more
-information on `binary_search_state.py`, see
-
-https://sites.google.com/a/google.com/chromeos-toolchain-team-home2/home/team-tools-and-scripts/binary-searcher-tool-for-triage
-
-This particular set of scripts is designed to work with
-`binary_search_state.py` in order to find the bad object or set of
-bad objects in an Android build. Furthermore, it can also help find
-the bad compiler pass and transformation when building that bad object.
-
-
-## QUICKSTART
-
-After setting up your 2 build trees (see Prerequisites section), do the
-following:
-
-- Decide which test script to use (`boot_test.sh` or
- `interactive_test.sh`)
-- Get the serial number for the Android device you will use for testing.
-- Run the following:
-
- ```
- $ cd <android_src>
- $ source build/envsetup.sh
- $ lunch <android_device_lunch_combo>
- $ cd <path_to_toolchain_utils>/binary_search_tool/
- $ NUM_JOBS=10 ANDROID_SERIAL=<device_serial> \
- ./android/setup.sh <android_src>
- ```
-
- If you chose the boot test, then:
-
- ```
- TEST_SCRIPT=android/boot_test.sh
- ```
-
- If you chose the interactive test, then:
-
- ```
- TEST_SCRIPT=android/interactive_test.sh
- ```
-
- Finally, run the binary search tool:
-
- ```
- $ python ./binary_search_state.py \
- --get_initial_items=android/get_initial_items.sh \
- --switch_to_good=android/switch_to_good.sh \
- --switch_to_bad=android/switch_to_bad.sh \
- --test_setup_script=android/test_setup.sh \
- --test_script=$TEST_SCRIPT \
- --file_args \
- --prune
- ```
-
- Once you have completely finished doing the binary search/triage,
- run the cleanup script:
-
- ```
- $ android/cleanup.sh
- ```
-
-
-## FILES AND SCRIPTS
-
-Check the header comments for each script for more in depth documentation.
-
-`boot_test.sh` - One of two possible test scripts used to determine
- if the Android image built from the objects is good
- or bad. This script tests to see if the image
- booted, and requires no user intervention.
-
-`cleanup.sh` - This is called after the binary search tool completes. This
- script will clean up the common.sh file generated by setup.sh
-
-`get_initial_items.sh` - This script is used to determine all Android objects
- that will be bisected.
-
-`test_setup.sh` - This script will build and flash your image to the
- Android device. If the flash fails, this script will
- help the user troubleshoot by trying to flash again or
- by asking the user to manually flash it.
-
-`interactive_test.sh` - One of two possible scripts used to determine
- if the Android image built from the objects
- is good or bad. This script requires user
- interaction to determine if the image is
- good or bad.
-
-`setup.sh` - This is the first script the user should call, after
- taking care of the prerequisites. It sets up the
- environment appropriately for running the Android
- object binary search triage, and it generates the
- necessary common script (see below).
-
-`switch_to_bad.sh` - This script is used to link objects from the
- 'bad' build tree into the work area.
-
-`switch_to_good.sh` - This script is used to link objects from the
- 'good' build tree into the work area.
-
-`generate_cmd.sh` - This script will generate another temporary script, which
- contains the command line options to build the bad object
- file again with pass/transformation level limit.
-
-
-## GENERATED SCRIPTS
-
-`common.sh` - contains basic environment variable definitions for
- this binary search triage session.
-
-## ASSUMPTIONS
-
-- There are two different Android builds, for the same board/lunch combo with
- the same set of generated object files. One build creates a good working
- Android image and the other does not.
-
-- The toolchain bug you are tracking down is not related to the linker. If the
- linker is broken or generates bad code, this tool is unlikely to help you.
-
-
-PREREQUISITES FOR USING THESE SCRIPTS:
-
-1. Decide where to store each build tree
- By default, each build tree is stored in `~/ANDROID_BISECT`. However you
- can override this by exporting `BISECT_DIR` set to whatever directory you
- please. Keep in mind these build trees take dozens of gigabytes each.
-
-2. Setup your android build environment
-
- ```
- cd <android_src>
- source build/envsetup.sh
- lunch <android_device_lunch_combo>
- ```
-
-3. Populate the good build tree
-
- 1. `make clean`
- 2. `export BISECT_STAGE=POPULATE_GOOD`
- 3. Install your "good" toolchain in Android, this will most likely be
- the toolchain that comes preinstalled with the Android source.
- 4. Build all of Android: `make -j10`. The "-j" parameter depends on how
- many cores your machine has. See Android documentation for more details.
-
-4. Populate the bad build tree
-
- 1. `make clean`
- 2. `export BISECT_STAGE=POPULATE_BAD`
- 3. Install your "bad" toolchain in Android.
- 4. Build all of Android again.
-
-5. Run the android setup script
-
- 1. `cd <path_to_toolchain_utils>/binary_search_tool/`
- 2. `NUM_JOBS=<jobs> ANDROID_SERIAL=<android_serial_num>
- android/setup.sh <android_src>`
-
-WARNING: It's important that you leave the full `out/` directory in your
- Android source alone after Step 4. The binary search tool will
- use this directory as a skeleton to build each test image while
- triaging.
-
-## USING THESE SCRIPTS FOR BINARY TRIAGE OF OBJECTS
-
-To use these scripts, you must first run setup.sh, passing it the path to your
-Android source directory. setup.sh will do the following:
-
-- Verify that your build trees are set up correctly (with good, bad).
-- Verify that each build tree has the same contents.
-- Verify that the android build environment (lunch, etc.) are setup in your
- current shell.
-- Create the common.sh file that the other scripts passed to the
- binary triage tool will need.
-
-
-This set of scripts comes with two alternate test scripts. One test
-script, `boot_test.sh`, just checks to make sure that the image
-booted (wait for device to boot to home screen) and assumes that is enough.
-The other test script, `interactive_test.sh`, is interactive and asks YOU
-to tell it whether the image on the android device is ok or not (it
-prompts you and waits for a response).
-
-
-Once you have run `setup.sh` (and decided which test script you
-want to use) run the binary triage tool using these scripts to
-isolate/identify the bad object:
-
-```
-./binary_search_state.py \
- --get_initial_items=android/get_initial_items.sh \
- --switch_to_good=android/switch_to_good.sh \
- --switch_to_bad=android/switch_to_bad.sh \
- --test_setup_script=android/test_setup.sh \
- --test_script=android/boot_test.sh \ # could use interactive_test.sh instead
- --prune
-```
-
-After you have finished running the tool and have identified the bad
-object(s), you will want to run the cleanup script (android/cleanup.sh).
diff --git a/binary_search_tool/android/switch_to_bad.sh b/binary_search_tool/android/switch_to_bad.sh
index d44f9f13..f746b628 100755
--- a/binary_search_tool/android/switch_to_bad.sh
+++ b/binary_search_tool/android/switch_to_bad.sh
@@ -18,7 +18,7 @@ source android/common.sh
OBJ_LIST_FILE=$1
# Symlink from BAD obj to working tree.
-SWITCH_CMD="ln -sf ${BISECT_BAD_BUILD}/{} {}; touch {};"
+SWITCH_CMD="ln -f ${BISECT_BAD_BUILD}/{} {}; touch {};"
overall_status=0
diff --git a/binary_search_tool/android/switch_to_good.sh b/binary_search_tool/android/switch_to_good.sh
index 557553c3..1c046c3f 100755
--- a/binary_search_tool/android/switch_to_good.sh
+++ b/binary_search_tool/android/switch_to_good.sh
@@ -17,7 +17,7 @@ source android/common.sh
OBJ_LIST_FILE=$1
# Symlink from GOOD obj to working tree.
-SWITCH_CMD="ln -sf ${BISECT_GOOD_BUILD}/{} {}; touch {};"
+SWITCH_CMD="ln -f ${BISECT_GOOD_BUILD}/{} {}; touch {};"
overall_status=0