[PATCH 2/2] rtems-tools/../testing: Add configuration files for coverage analysis.

Joel Sherrill joel at rtems.org
Thu Apr 26 22:55:47 UTC 2018


This looks like a mixed bag of stuff. The qemu cfg file could be by itself.

Two files (Jiri's email and details on writing an Explanations.txt) could go
in a (currently non-existent) document on running coverage.

The .css file is a support file for the output.

Not sure where the else fall but these seems like a handful of small patches
rather than one larger patch.

--joel

On Wed, Apr 25, 2018 at 3:33 PM, Cillian O'Donnell <cpodonnell8 at gmail.com>
wrote:

> Co-author: Krzysztof Miesowicz <krzysztof.miesowicz at gmail.com>
> Co-author: Vijay Kumar Banerjee <vijaykumar9597 at gmail.com>
> ---
>  tester/rtems/testing/bsps/leon3_qemu.ini           |  52 ++++++
>  tester/rtems/testing/coverage.ini                  |  49 +++++
>  tester/rtems/testing/coverage/Categories.txt       |  19 ++
>  tester/rtems/testing/coverage/Explanations.txt     |  35 ++++
>  .../coverage/SPARC-Annul-Slot-Explanation.txt      |  56 ++++++
>  tester/rtems/testing/coverage/style.css            | 197
> +++++++++++++++++++++
>  tester/rtems/testing/coverage/symbol_sets.cfg      |   3 +
>  tester/rtems/testing/qemu.cfg                      |  14 +-
>  8 files changed, 424 insertions(+), 1 deletion(-)
>  create mode 100644 tester/rtems/testing/bsps/leon3_qemu.ini
>  create mode 100644 tester/rtems/testing/coverage.ini
>  create mode 100644 tester/rtems/testing/coverage/Categories.txt
>  create mode 100644 tester/rtems/testing/coverage/Explanations.txt
>  create mode 100644 tester/rtems/testing/coverage/
> SPARC-Annul-Slot-Explanation.txt
>  create mode 100644 tester/rtems/testing/coverage/style.css
>  create mode 100644 tester/rtems/testing/coverage/symbol_sets.cfg
>
> diff --git a/tester/rtems/testing/bsps/leon3_qemu.ini
> b/tester/rtems/testing/bsps/leon3_qemu.ini
> new file mode 100644
> index 0000000..9888008
> --- /dev/null
> +++ b/tester/rtems/testing/bsps/leon3_qemu.ini
> @@ -0,0 +1,52 @@
> +#
> +# RTEMS Tools Project (http://www.rtems.org/)
> +# Copyright 2010-2014 Chris Johns (chrisj at rtems.org)
> +# All rights reserved.
> +#
> +# This file is part of the RTEMS Tools package in 'rtems-tools'.
> +#
> +# Redistribution and use in source and binary forms, with or without
> +# modification, are permitted provided that the following conditions are
> met:
> +#
> +# 1. Redistributions of source code must retain the above copyright
> notice,
> +# this list of conditions and the following disclaimer.
> +#
> +# 2. Redistributions in binary form must reproduce the above copyright
> notice,
> +# this list of conditions and the following disclaimer in the
> documentation
> +# and/or other materials provided with the distribution.
> +#
> +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
> IS"
> +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
> THE
> +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
> BE
> +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
> +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
> THE
> +# POSSIBILITY OF SUCH DAMAGE.
> +#
> +
> +#
> +# The Leon 3 QEMU BSP
> +#
> +[global]
> +coverage_supported   = 1
> +bsp                  = leon3_qemu
> +[leon3_qemu]
> +bsp           = leon3_qemu
> +arch          = sparc
> +tester        = %{_rtscripts}/qemu.cfg
> +bsp_qemu_opts = %{qemu_opts_base} -M leon3_generic
> +
> +
> +[coverage]
> +format               = QEMU
> +target               = sparc-rtems5
> +explanations         = %{_rtscripts}/coverage/Explanations.txt
> +coverage_extension   = .cov
> +gcnos_file           = %{_rtscripts}/coverage/rtems.gcnos
> +executable_extension = exe
> +project_name         = RTEMS-5
> +report_format        = html
> diff --git a/tester/rtems/testing/coverage.ini b/tester/rtems/testing/
> coverage.ini
> new file mode 100644
> index 0000000..c1eef2e
> --- /dev/null
> +++ b/tester/rtems/testing/coverage.ini
> @@ -0,0 +1,49 @@
> +#
> +# RTEMS Tools Project (http://www.rtems.org/)
> +# Copyright 2010-2014 Chris Johns (chrisj at rtems.org)
> +# All rights reserved.
> +#
> +# This file is part of the RTEMS Tools package in 'rtems-tools'.
> +#
> +# Redistribution and use in source and binary forms, with or without
> +# modification, are permitted provided that the following conditions are
> met:
> +#
> +# 1. Redistributions of source code must retain the above copyright
> notice,
> +# this list of conditions and the following disclaimer.
> +#
> +# 2. Redistributions in binary form must reproduce the above copyright
> notice,
> +# this list of conditions and the following disclaimer in the
> documentation
> +# and/or other materials provided with the distribution.
> +#
> +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
> IS"
> +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
> THE
> +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
> BE
> +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
> +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
> +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
> +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
> +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
> THE
> +# POSSIBILITY OF SUCH DAMAGE.
> +#
> +
> +#
> +# All paths in defaults must be Unix format. Do not store any Windows
> format
> +# paths in the defaults.
> +#
> +# Every entry must describe the type of checking a host must pass.
> +#
> +# Records:
> +#  key: type, attribute, value
> +#   type     : none, dir, exe, triplet
> +#   attribute: none, required, optional
> +#   value    : 'single line', '''multi line'''
> +#
> +
> +#
> +# Global defaults
> +#
> +[global]
> +__covoar  = covoar
> +_coverage = 1
> diff --git a/tester/rtems/testing/coverage/Categories.txt
> b/tester/rtems/testing/coverage/Categories.txt
> new file mode 100644
> index 0000000..e19a456
> --- /dev/null
> +++ b/tester/rtems/testing/coverage/Categories.txt
> @@ -0,0 +1,19 @@
> +This is the list of Explanation Categories used when analyzing RTEMS
> +Coverage report.  By using standard categories, the table filter on
> +the web site works better.
> +
> +Simple Test Case
> +
> +Hard Test Tase
> +
> +Uncalled Routine
> +
> +Interrupt Critical Section
> +
> +Simple Error Case
> +
> +Hard Error Case
> +
> +Allocation Error
> +
> +Bharath Suri
> diff --git a/tester/rtems/testing/coverage/Explanations.txt
> b/tester/rtems/testing/coverage/Explanations.txt
> new file mode 100644
> index 0000000..a5917f6
> --- /dev/null
> +++ b/tester/rtems/testing/coverage/Explanations.txt
> @@ -0,0 +1,35 @@
> +schedulerpriorityyield.c:47
> +Simple Test Case
> +Branch Never Taken
> +New test where there is more than one thread at a priority with the
> +executing thread being non-preemptive.  Create a higher priority thread
> +and then yield.
> +
> +   init task at priority 2, non-preemptive
> +   create task at priority 2
> +   create task at priority 1
> +   yield
> ++++
> +
> +schedulerpriorityyield.c:51
> +Simple Test Case
> +Branch Always Taken
> +New test where only one thread at a priority (non-preemptive), create a
> +thread at higher priority, then yield.
> +
> +   init task at priority 2, non-preemptive
> +   create task at priority 1
> +   yield
> ++++
> +
> +schedulerpriorityyield.c:52
> +Simple Test Case
> +Not Executed
> +Same test case as schedulerpriorityyield.c:51
> ++++
> +
> +coremsg.c:86
> +Simple Test Case
> +We need to request enough messages of a certain size that the math
> +overflows to less than a single message.
> ++++
> diff --git a/tester/rtems/testing/coverage/SPARC-Annul-Slot-Explanation.txt
> b/tester/rtems/testing/coverage/SPARC-Annul-Slot-Explanation.txt
> new file mode 100644
> index 0000000..ef740d3
> --- /dev/null
> +++ b/tester/rtems/testing/coverage/SPARC-Annul-Slot-Explanation.txt
> @@ -0,0 +1,56 @@
> +The SPARC assembly is often hard to understand because a single
> +instruction will show up as not executed.  The instructions before
> +and after it will be marked as executed.  The instruction before
> +the one not executed should be a "bxx,a" instruction which means
> +that the instruction following the branch instruction is executed
> +ONLY if the branch is taken.  Otherwise it is "annulled" or skipped.
> +
> +So when you see these cases, it means the branch was NOT taken.
> +
> +===================================================================
> +Subject: <offlist> annul slot explanation
> +From: Jiri Gaisler <jiri at gaisler.com>
> +Date: Wed, 3 Jun 2009 14:57:48 -0500
> +To: Joel Sherrill <Joel.Sherrill at OARcorp.com>
> +
> +
> +Joel Sherrill wrote:
> +> > Hi,
> +> >
> +> > I am trying to look at more coverage cases and
> +> > wanted to make sure I am reading things correctly.
> +> >
> +> > The code in question is:
> +> >
> +> >
> +> >      if ( the_thread->current_priority > interested_priority )
> +> > 200fd00:    d8 00 e0 14     ld  [ %g3 + 0x14 ], %o4
> +> > 200fd04:    80 a3 00 04     cmp  %o4, %g4
> +> > 200fd08:    38 80 00 1c     bgu,a   200fd78 <killinfo+0x224>
> +> > 200fd0c:    98 10 00 04     mov  %g4,
> +> > %o4                                            <== NOT EXECUTED
> +> >
> +> >      /*
> +> >       *  If this thread is not interested, then go on to the next
> thread.
> +> >       */
> +> >
> +> >      api = the_thread->API_Extensions[ THREAD_API_POSIX ];
> +> > 200fd10:    d4 00 e1 6c     ld  [ %g3 + 0x16c ], %o2
> +> >
> +> > Am I correct in interpreting this as meaning 0x200fd0c
> +> > is not executed because the bgu,a is never taken. And it
> +> > is not executed as part of falling through.
> +
> +Yes, this is correct. The branch delay slot is only executed
> +when the branch is taken.
> +
> +Jiri.
> +
> +> >
> +> > So in this case we need a test where the "if" condition
> +> > is true if I am reading things correctly.
> +> >
> +> > Thanks.  There are a number of these 4 byte cases which
> +> > are probably easy to hit if I read the code correctly.
> +> >
> +> >
> diff --git a/tester/rtems/testing/coverage/style.css
> b/tester/rtems/testing/coverage/style.css
> new file mode 100644
> index 0000000..c715518
> --- /dev/null
> +++ b/tester/rtems/testing/coverage/style.css
> @@ -0,0 +1,197 @@
> +body {
> +    background: rgb(253,253,253);
> +    color: rgb(0,0,0);
> +    font-family: helvetica, sans-serif;
> +    font-size: 1em;
> +    line-height: 1.4;
> +    margin: 5px, 5px, 5px, 5px;
> +    padding: 0;
> +}
> +
> +a:link {
> +    color: rgb(180, 50, 50);
> +    font-family: helvetica, sans-serif;
> +    font-size: 1.0em;
> +}
> +
> +a:visited {
> +    color: purple;
> +    font-family: helvetica, sans-serif;
> +    font-size: 1.0em;
> +}
> +
> +a:hover {
> +    color: rgb(0, 0, 0);
> +    font-family: helvetica, sans-serif;
> +    font-size: 1.0em;
> +}
> +
> +a:active {
> +    color: red;
> +    font-family: helvetica, sans-serif;
> +    font-size: 1.0em;
> +}
> +
> +.heading {
> +    background: rgb(250,250,250);
> +    background-image: url("http://www.rtems.org/logos/rtems_logo.jpg");
> +    background-repeat: no-repeat;
> +    color: rgb(55,55,55);
> +    font-size: 1.5em;
> +    height: 140px;
> +    padding-top: 20px;
> +    padding-left: 300px;
> +}
> +
> +.heading-title {
> +    text-align:  center;
> +    color: rgb(0,0,0);
> +    font-size: 0.9em;
> +    font-weight: bold;
> +    padding-top: 5px;
> +    padding-left: 0px;
> +    text-align:  center;
> +    width: 100%;
> +}
> +
> +.datetime {
> +    color: rgb(55,55,55);
> +    font-size: 0.8em;
> +    padding-top: 5px;
> +    padding-left: 0px;
> +    text-align:  center;
> +    width: 100%;
> +}
> +
> +.info {
> +    color: rgb(55,55,55);
> +    font-size: 0.6em;
> +    padding-top: 5px;
> +    padding-left: 00px;
> +    text-align:  center;
> +    width: 100%;
> +}
> +
> +.stats-table {
> +    background: rgb(225,225,225);
> +    font-size: 0.9em;
> +    border: 1px solid rgb(200, 200, 200);
> +    padding: 0;
> +    margin-top: 3px;
> +    margin-left: 10px;
> +    width: 70%;
> +}
> +
> +.stats-table-target {
> +    background: rgb(243,243,243);
> +    font-size: 1.2em;
> +    padding-left: 10px;
> +    text-align: left;
> +}
> +
> +.stats-target-results {
> +    background: rgb(243,243,243);
> +    font-size: 0.9em;
> +    text-align: right;
> +    padding-right: 10px;
> +}
> +
> +.stats-target-good {
> +    background: rgb(30,230,30);
> +    font-size: 0.9em;
> +    text-align: right;
> +    padding-right: 10px;
> +}
> +
> +.stats-target-good {
> +    background: rgb(50,180,50);
> +    color: rgb(230,230,230);
> +    font-size: 0.9em;
> +    text-align: center;
> +    padding-right: 10px;
> +}
> +
> +.stats-target-bad {
> +    background: rgb(180,50,50);
> +    color: rgb(230,230,230);
> +    font-size: 0.9em;
> +    text-align: center;
> +    padding-right: 10px;
> +}
> +
> +.stats-table-top {
> +    background: rgb(243,243,243);
> +    color: rgb(0,0,0);
> +    font-size: 0.9em;
> +    padding-left: 2px;
> +}
> +
> +.stats-table-row {
> +    background: rgb(253,253,253);
> +    font-size: 0.9em;
> +    padding: 1px;
> +    text-align: right;
> +}
> +
> +.error-table {
> +    font-size: 0.9em;
> +    border: 1px solid rgb(200, 200, 200);
> +    padding: 0;
> +    margin-left: 10px;
> +    width: 96%;
> +}
> +
> +.error-table-top {
> +    background: rgb(225,225,225);
> +    color: rgb(0,0,0);
> +    font-size: 0.9em;
> +    padding-left: 2px;
> +}
> +
> +.error-table-on {
> +    background: rgb(225,225,225);
> +    font-size: 0.9em;
> +    padding-left: 2px;
> +}
> +
> +.error-table-off {
> +    background: rgb(253,253,253);
> +    font-size: 0.9em;
> +    padding-left: 2px;
> +}
> +
> +.error-table-dups {
> +    text-align: right;
> +    padding-right: 2px;
> +}
> +
> +.error-table-error {
> +    background: rgb(255,150,150);
> +    font-size: 0.9em;
> +    padding-left: 2px;
> +}
> +
> +.error-table-warning {
> +    font-size: 0.9em;
> +    padding-left: 2px;
> +}
> +
> +.navbar {
> +    margin-left: auto;
> +    margin-right: auto;
> +    margin-top: 10px;
> +    width: 40%;
> +}
> +th.table-sortable {
> +  background-image:url("unsorted.gif");
> +  cursor: pointer;
> +  background-position: center left;
> +  background-repeat: no-repeat;
> +  padding-left: 15px;
> +}
> +th.table-sorted-asc {
> +  background-image:url("descending.gif");
> +}
> +th.table-sorted-desc {
> +  background-image:url("ascending.gif");
> +}
> \ No newline at end of file
> diff --git a/tester/rtems/testing/coverage/symbol_sets.cfg
> b/tester/rtems/testing/coverage/symbol_sets.cfg
> new file mode 100644
> index 0000000..7f62cce
> --- /dev/null
> +++ b/tester/rtems/testing/coverage/symbol_sets.cfg
> @@ -0,0 +1,3 @@
> +symbolset:
> +       name=score
> +       lib=sparc-rtems5/c/leon3/cpukit/score/libscore.a
> diff --git a/tester/rtems/testing/qemu.cfg b/tester/rtems/testing/qemu.cfg
> index db5b6b2..7a65ddd 100644
> --- a/tester/rtems/testing/qemu.cfg
> +++ b/tester/rtems/testing/qemu.cfg
> @@ -64,6 +64,18 @@
>  %define qemu_opts %{bsp_qemu_opts}
>
>  #
> +# Coverage analysis
> +#
> +%define coverage_arg %{nil}
> +%if %{defined _coverage}
> +  %if %{coverage_supported}
> +    %define coverage_arg -exec-trace %{test_executable}.cov
> +  %else
> +     %error "Coverage analysis unsupported for %{bsp}"
> +  %endif
> +%endif
> +
> +#
>  # Executable
>  #
> -%execute %{qemu_cmd} %{qemu_opts} -kernel %{test_executable}
> +%execute %{qemu_cmd} %{qemu_opts} -kernel %{test_executable}
> %{coverage_arg}
> --
> 2.7.4
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20180426/688327a6/attachment-0001.html>


More information about the devel mailing list