Squashed 'third_party/elfutils/' content from commit 555e15e

Change-Id: I61cde98949e47e5c8c09c33260de17f30921be79
git-subtree-dir: third_party/elfutils
git-subtree-split: 555e15ebe8bf1eb33d00747173cfc80cc65648a4
diff --git a/tests/coverage.sh b/tests/coverage.sh
new file mode 100755
index 0000000..5cc353c
--- /dev/null
+++ b/tests/coverage.sh
@@ -0,0 +1,40 @@
+#! /bin/bash
+
+if [ "x$1" = "x-v" ]; then
+  verbose=yes
+else
+  verbose=no
+fi
+
+cd ..
+
+for d in lib libasm libdw libdwfl libebl libelf backends src; do
+  tmp=$d-data
+  cd $d
+  unused=0
+  unused_files=
+  for f in *.gcno; do
+    base="$(basename $f .gcno)"
+    fc="$base.c"
+    gcda="$base.gcda"
+    if [ -f "$gcda" ]; then
+      gcov -n -a "$fc" |
+      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
+    else
+      unused=$(($unused + 1))
+      unused_files="$unused_files $fc"
+    fi
+  done
+  if [ -f $tmp ]; then
+    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
+    rm -f $tmp
+  else
+    printf "%-12s   0.00%% covered       unused files: %3d\n" "$d" $unused
+  fi
+  if [ $verbose = yes ]; then
+    for f in $unused_files; do
+      printf '%-42s%s\n' '' $f
+    done
+  fi
+  cd ..
+done