Improve the coverage script.
This now works for ARM as well as Intel.
Also combine both the 32-bit and 64-bit results (since we have code
that's only executed in one variant or the other, the union of the two
seems like what we actually want to measure).
Also make the script executable.
Test: ./bionic/build/coverage.sh
Change-Id: I4e3a7f4cd60fda060b956a960cfb9b703d3670e7
diff --git a/build/coverage.sh b/build/coverage.sh
old mode 100644
new mode 100755
index 5f305ce..c55fdd7
--- a/build/coverage.sh
+++ b/build/coverage.sh
@@ -3,35 +3,48 @@
# This script generates coverage for bionic.
#
# Prereqs: Coverage-enabled build.
+#
# $ lunch <target>
# $ m NATIVE_COVERAGE_PATHS="bionic" CLANG_COVERAGE=true
# $ m NATIVE_COVERAGE_PATHS="bionic" CLANG_COVERAGE=true bionic-unit-tests
-# Flash image and set $ANDROID_SERIAL
+#
+# Do *NOT* then rebuild at the top level, or you'll clobber the
+# coverage-enabled libc!
+#
+# Flash image and set $ANDROID_SERIAL.
#
# Usage: $ bionic/build/coverage.sh
# Output: HTML report is generated to /tmp/bionic-coverage/html/index.html
#
-eval "$(cd ${ANDROID_BUILD_TOP}; build/soong/soong_ui.bash --dumpvars-mode --vars="TARGET_ARCH")"
+eval "$(cd ${ANDROID_BUILD_TOP}; build/soong/soong_ui.bash --dumpvars-mode --vars="TARGET_ARCH TARGET_ARCH_VARIANT")"
LLVM_PROFDATA=${ANDROID_BUILD_TOP}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-profdata
LLVM_COV=${ANDROID_BUILD_TOP}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-cov
-DEVICE_TEST_DIR=/data/local/tmp/bionic-coverage
+DEVICE_TEST_DIR32=/data/local/tmp/bionic-coverage32
+DEVICE_TEST_DIR64=/data/local/tmp/bionic-coverage64
+DEVICE_PROF_DIR=/data/local/tmp/bionic-profraw
HOST_PROFDATA_DIR=/tmp/bionic-coverage
# Run bionic-unit-tests
-adb shell rm -rf ${DEVICE_TEST_DIR}
-adb shell mkdir ${DEVICE_TEST_DIR}
-adb push $OUT/data/nativetest/bionic-loader-test-libs ${DEVICE_TEST_DIR}
-adb push $OUT/data/nativetest/bionic-unit-tests ${DEVICE_TEST_DIR}
-adb shell LLVM_PROFILE_FILE=${DEVICE_TEST_DIR}/profraws/bionic-%p-%m.profraw LD_LIBRARY_PATH=${DEVICE_TEST_DIR}/bionic-loader-test-libs ${DEVICE_TEST_DIR}/bionic-unit-tests/bionic-unit-tests
+adb shell rm -rf ${DEVICE_TEST_DIR32} ${DEVICE_TEST_DIR64} ${DEVICE_PROF_DIR}
+adb shell mkdir ${DEVICE_TEST_DIR32} ${DEVICE_TEST_DIR64} ${DEVICE_PROF_DIR}
+adb push $OUT/data/nativetest/bionic-loader-test-libs ${DEVICE_TEST_DIR32}
+adb push $OUT/data/nativetest/bionic-unit-tests ${DEVICE_TEST_DIR32}
+adb push $OUT/data/nativetest64/bionic-loader-test-libs ${DEVICE_TEST_DIR64}
+adb push $OUT/data/nativetest64/bionic-unit-tests ${DEVICE_TEST_DIR64}
+adb shell LLVM_PROFILE_FILE=${DEVICE_PROF_DIR}/bionic-%p-%m.profraw \
+ LD_LIBRARY_PATH=${DEVICE_TEST_DIR32}/bionic-loader-test-libs \
+ ${DEVICE_TEST_DIR32}/bionic-unit-tests/bionic-unit-tests
+adb shell LLVM_PROFILE_FILE=${DEVICE_PROF_DIR}/bionic-%p-%m.profraw \
+ LD_LIBRARY_PATH=${DEVICE_TEST_DIR64}/bionic-loader-test-libs \
+ ${DEVICE_TEST_DIR64}/bionic-unit-tests/bionic-unit-tests
# Pull coverage files and post-process
rm -rf ${HOST_PROFDATA_DIR}
mkdir ${HOST_PROFDATA_DIR}
-adb pull ${DEVICE_TEST_DIR}/profraws ${HOST_PROFDATA_DIR}/profraws
-
+adb pull ${DEVICE_PROF_DIR} ${HOST_PROFDATA_DIR}/profraws
${LLVM_PROFDATA} merge \
--output=${HOST_PROFDATA_DIR}/bionic.profdata \
@@ -40,8 +53,10 @@
${LLVM_COV} show \
--instr-profile=${HOST_PROFDATA_DIR}/bionic.profdata \
--format=html \
- out/soong/.intermediates/bionic/libc/libc/android_${TARGET_ARCH}_shared_cov/unstripped/libc.so \
- --object=out/soong/.intermediates/bionic/tests/bionic-unit-tests/android_${TARGET_ARCH}_cov/unstripped/bionic-unit-tests \
+ $OUT/symbols/apex/com.android.runtime/lib64/bionic/libc.so \
+ --object=$OUT/symbols/data/nativetest64/bionic-unit-tests/bionic-unit-tests \
+ --object=$OUT/symbols/apex/com.android.runtime/lib/bionic/libc.so \
+ --object=$OUT/symbols/data/nativetest/bionic-unit-tests/bionic-unit-tests \
/proc/self/cwd/bionic/libc \
--output-dir=${HOST_PROFDATA_DIR}/html \
--show-region-summary=false