| GCOV for skiboot |
| ================ |
| |
| Unit tests |
| ---------- |
| All unit tests are built+run with gcov enabled. :: |
| |
| make coverage-report |
| |
| will generate a unit test coverage report like: |
| http://open-power.github.io/skiboot/coverage-report/ |
| |
| Skiboot |
| ------- |
| You can now build Skiboot itself with gcov support, boot it on a machine, |
| do things, and then extract out gcda files to generate coverage reports |
| from real hardware (or a simulator). |
| |
| Building Skiboot with GCOV |
| -------------------------- |
| :: |
| |
| SKIBOOT_GCOV=1 make |
| |
| You may need to ``make clean`` first. |
| |
| This will build a skiboot lid roughly *twice* the size. |
| |
| Flash/Install the skiboot.lid and boot. |
| |
| Extracting GCOV data |
| -------------------- |
| The way we extract the gcov data from a system is by dumping the contents |
| of skiboot memory and then parsing the data structures in user space with |
| the extract-gcov utility in the skiboot repo. |
| |
| mambo: :: |
| |
| mysim memory fwrite 0x30000000 0x240000 skiboot.dump |
| |
| FSP: :: |
| |
| getmemproc 30000000 3407872 -fb skiboot.dump |
| |
| linux (e.g. petitboot environment): :: |
| |
| dd if=/proc/kcore skip=1572864 count=6656 of=skiboot.dump |
| |
| You basically need to dump out the first 3MB of skiboot memory. |
| |
| Then you need to find out where the gcov data structures are: :: |
| |
| perl -e "printf '0x%x', 0x30000000 + 0x`grep gcov_info_list skiboot.map|cut -f 1 -d ' '`" |
| |
| That address needs to be supplied to the extract-gcov utility: :: |
| |
| ./extract-gcov skiboot.dump 0x3023ec40 |
| |
| Once you've run extract-gcov, it will have extracted the gcda files |
| from the skiboot memory image. |
| |
| You can then run lcov: :: |
| |
| lcov -b . -q -c -d . -o skiboot-boot.info |
| --gcov-tool |
| /opt/cross/gcc-4.8.0-nolibc/powerpc64-linux/bin/powerpc64-linux-gcov |
| |
| *IMPORTANT* you should point lcov to the gcov for the compiler you used |
| to build skiboot, otherwise you're likely to get errors. |
| |
| |