blob: 13fabc5d0e1c30b306748ae4186a7d131697b5d4 [file] [log] [blame]
Pirama Arumuga Nainarabf40322020-08-05 15:47:01 -07001#!/bin/bash
2
3# This script generates coverage for bionic.
4#
5# Prereqs: Coverage-enabled build.
Elliott Hughes7f354432020-08-07 15:25:27 -07006#
Pirama Arumuga Nainarabf40322020-08-05 15:47:01 -07007# $ lunch <target>
8# $ m NATIVE_COVERAGE_PATHS="bionic" CLANG_COVERAGE=true
9# $ m NATIVE_COVERAGE_PATHS="bionic" CLANG_COVERAGE=true bionic-unit-tests
Elliott Hughes7f354432020-08-07 15:25:27 -070010#
11# Do *NOT* then rebuild at the top level, or you'll clobber the
12# coverage-enabled libc!
13#
14# Flash image and set $ANDROID_SERIAL.
Pirama Arumuga Nainarabf40322020-08-05 15:47:01 -070015#
16# Usage: $ bionic/build/coverage.sh
17# Output: HTML report is generated to /tmp/bionic-coverage/html/index.html
18#
19
Elliott Hughes7f354432020-08-07 15:25:27 -070020eval "$(cd ${ANDROID_BUILD_TOP}; build/soong/soong_ui.bash --dumpvars-mode --vars="TARGET_ARCH TARGET_ARCH_VARIANT")"
Pirama Arumuga Nainarabf40322020-08-05 15:47:01 -070021
22LLVM_PROFDATA=${ANDROID_BUILD_TOP}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-profdata
23LLVM_COV=${ANDROID_BUILD_TOP}/prebuilts/clang/host/linux-x86/llvm-binutils-stable/llvm-cov
24
Elliott Hughes7f354432020-08-07 15:25:27 -070025DEVICE_TEST_DIR32=/data/local/tmp/bionic-coverage32
26DEVICE_TEST_DIR64=/data/local/tmp/bionic-coverage64
27DEVICE_PROF_DIR=/data/local/tmp/bionic-profraw
Pirama Arumuga Nainarabf40322020-08-05 15:47:01 -070028HOST_PROFDATA_DIR=/tmp/bionic-coverage
29
30# Run bionic-unit-tests
Elliott Hughes7f354432020-08-07 15:25:27 -070031adb shell rm -rf ${DEVICE_TEST_DIR32} ${DEVICE_TEST_DIR64} ${DEVICE_PROF_DIR}
32adb shell mkdir ${DEVICE_TEST_DIR32} ${DEVICE_TEST_DIR64} ${DEVICE_PROF_DIR}
33adb push $OUT/data/nativetest/bionic-loader-test-libs ${DEVICE_TEST_DIR32}
34adb push $OUT/data/nativetest/bionic-unit-tests ${DEVICE_TEST_DIR32}
35adb push $OUT/data/nativetest64/bionic-loader-test-libs ${DEVICE_TEST_DIR64}
36adb push $OUT/data/nativetest64/bionic-unit-tests ${DEVICE_TEST_DIR64}
37adb shell LLVM_PROFILE_FILE=${DEVICE_PROF_DIR}/bionic-%p-%m.profraw \
38 LD_LIBRARY_PATH=${DEVICE_TEST_DIR32}/bionic-loader-test-libs \
39 ${DEVICE_TEST_DIR32}/bionic-unit-tests/bionic-unit-tests
40adb shell LLVM_PROFILE_FILE=${DEVICE_PROF_DIR}/bionic-%p-%m.profraw \
41 LD_LIBRARY_PATH=${DEVICE_TEST_DIR64}/bionic-loader-test-libs \
42 ${DEVICE_TEST_DIR64}/bionic-unit-tests/bionic-unit-tests
Pirama Arumuga Nainarabf40322020-08-05 15:47:01 -070043
44# Pull coverage files and post-process
45rm -rf ${HOST_PROFDATA_DIR}
46mkdir ${HOST_PROFDATA_DIR}
Elliott Hughes7f354432020-08-07 15:25:27 -070047adb pull ${DEVICE_PROF_DIR} ${HOST_PROFDATA_DIR}/profraws
Pirama Arumuga Nainarabf40322020-08-05 15:47:01 -070048
49${LLVM_PROFDATA} merge \
50 --output=${HOST_PROFDATA_DIR}/bionic.profdata \
51 ${HOST_PROFDATA_DIR}/profraws/*.profraw
52
53${LLVM_COV} show \
54 --instr-profile=${HOST_PROFDATA_DIR}/bionic.profdata \
55 --format=html \
Elliott Hughes7f354432020-08-07 15:25:27 -070056 $OUT/symbols/apex/com.android.runtime/lib64/bionic/libc.so \
Elliott Hughesf7622752020-08-12 10:25:45 -070057 --object=$OUT/symbols/apex/com.android.runtime/lib64/bionic/libm.so \
Elliott Hughes7f354432020-08-07 15:25:27 -070058 --object=$OUT/symbols/data/nativetest64/bionic-unit-tests/bionic-unit-tests \
59 --object=$OUT/symbols/apex/com.android.runtime/lib/bionic/libc.so \
Elliott Hughesf7622752020-08-12 10:25:45 -070060 --object=$OUT/symbols/apex/com.android.runtime/lib/bionic/libm.so \
Elliott Hughes7f354432020-08-07 15:25:27 -070061 --object=$OUT/symbols/data/nativetest/bionic-unit-tests/bionic-unit-tests \
Pirama Arumuga Nainarabf40322020-08-05 15:47:01 -070062 /proc/self/cwd/bionic/libc \
Elliott Hughesf7622752020-08-12 10:25:45 -070063 /proc/self/cwd/bionic/libm \
Pirama Arumuga Nainarabf40322020-08-05 15:47:01 -070064 --output-dir=${HOST_PROFDATA_DIR}/html \
65 --show-region-summary=false