aboutsummaryrefslogtreecommitdiff
path: root/build/coverage.sh
blob: 13fabc5d0e1c30b306748ae4186a7d131697b5d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/bin/bash

# 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
#
# 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 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_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_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_PROF_DIR} ${HOST_PROFDATA_DIR}/profraws

${LLVM_PROFDATA} merge \
  --output=${HOST_PROFDATA_DIR}/bionic.profdata \
  ${HOST_PROFDATA_DIR}/profraws/*.profraw

${LLVM_COV} show \
  --instr-profile=${HOST_PROFDATA_DIR}/bionic.profdata \
  --format=html \
  $OUT/symbols/apex/com.android.runtime/lib64/bionic/libc.so \
  --object=$OUT/symbols/apex/com.android.runtime/lib64/bionic/libm.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/apex/com.android.runtime/lib/bionic/libm.so \
  --object=$OUT/symbols/data/nativetest/bionic-unit-tests/bionic-unit-tests \
  /proc/self/cwd/bionic/libc \
  /proc/self/cwd/bionic/libm \
  --output-dir=${HOST_PROFDATA_DIR}/html \
  --show-region-summary=false