xref: /aosp_15_r20/external/elfutils/tests/coverage.sh (revision 7304104da70ce23c86437a01be71edd1a2d7f37e)
1*7304104dSAndroid Build Coastguard Worker#! /usr/bin/env bash
2*7304104dSAndroid Build Coastguard Worker
3*7304104dSAndroid Build Coastguard Workerif [ "x$1" = "x-v" ]; then
4*7304104dSAndroid Build Coastguard Worker  verbose=yes
5*7304104dSAndroid Build Coastguard Workerelse
6*7304104dSAndroid Build Coastguard Worker  verbose=no
7*7304104dSAndroid Build Coastguard Workerfi
8*7304104dSAndroid Build Coastguard Worker
9*7304104dSAndroid Build Coastguard Workercd ..
10*7304104dSAndroid Build Coastguard Worker
11*7304104dSAndroid Build Coastguard Workerfor d in lib libasm libdw libdwfl libebl libelf backends src debuginfod; do
12*7304104dSAndroid Build Coastguard Worker  tmp=$d-data
13*7304104dSAndroid Build Coastguard Worker  cd $d
14*7304104dSAndroid Build Coastguard Worker  unused=0
15*7304104dSAndroid Build Coastguard Worker  unused_files=
16*7304104dSAndroid Build Coastguard Worker  for f in *.gcno; do
17*7304104dSAndroid Build Coastguard Worker    base="$(basename $f .gcno)"
18*7304104dSAndroid Build Coastguard Worker    if [ -f "$base.c" ]; then fc="$base.c"; else fc="$base.cxx"; fi
19*7304104dSAndroid Build Coastguard Worker    gcda="$base.gcda"
20*7304104dSAndroid Build Coastguard Worker    if [ -f "$gcda" ]; then
21*7304104dSAndroid Build Coastguard Worker      gcov -n -a "$fc" |
22*7304104dSAndroid Build Coastguard Worker      gawk "/$d.$fc/ { getline; co=gensub(/.*:(.*)% .*/, \"\\\\1\", \"g\"); co=co+0.0; li=\$4+0; printf \"%-35s  %6.2f %5d\n\", \"$d/$fc\", co, li } " >> $tmp
23*7304104dSAndroid Build Coastguard Worker    else
24*7304104dSAndroid Build Coastguard Worker      unused=$(($unused + 1))
25*7304104dSAndroid Build Coastguard Worker      unused_files="$unused_files $fc"
26*7304104dSAndroid Build Coastguard Worker    fi
27*7304104dSAndroid Build Coastguard Worker  done
28*7304104dSAndroid Build Coastguard Worker  if [ -f $tmp ]; then
29*7304104dSAndroid Build Coastguard Worker    gawk "{ copct=\$2; co=(\$3*copct)/100; toco+=(co+0); toli += (\$3+0); } END { printf \"%-12s %6.2f%% covered       unused files: %3d\n\", \"$d\", (toco*100)/toli, \"$unused\" }" $tmp
30*7304104dSAndroid Build Coastguard Worker    rm -f $tmp
31*7304104dSAndroid Build Coastguard Worker  else
32*7304104dSAndroid Build Coastguard Worker    printf "%-12s   0.00%% covered       unused files: %3d\n" "$d" $unused
33*7304104dSAndroid Build Coastguard Worker  fi
34*7304104dSAndroid Build Coastguard Worker  if [ $verbose = yes ]; then
35*7304104dSAndroid Build Coastguard Worker    for f in $unused_files; do
36*7304104dSAndroid Build Coastguard Worker      printf '%-42s%s\n' '' $f
37*7304104dSAndroid Build Coastguard Worker    done
38*7304104dSAndroid Build Coastguard Worker  fi
39*7304104dSAndroid Build Coastguard Worker  cd ..
40*7304104dSAndroid Build Coastguard Workerdone
41