[PATCH v1 2/2] rtems-exeinfo.cpp: Fix division by zero errors

Gedare Bloom gedare at rtems.org
Tue Jun 29 17:13:59 UTC 2021


On Tue, Jun 29, 2021 at 11:06 AM Ryan Long <ryan.long at oarcorp.com> wrote:
>
> CID 1503008: Division or modulo by zero
> CID 1503015: Division or modulo by zero
>
> Closes #4416
> ---
>  linkers/rtems-exeinfo.cpp    | 20 ++++++++++++++++----
>  tester/covoar/ReportsBase.cc |  2 +-
>  2 files changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/linkers/rtems-exeinfo.cpp b/linkers/rtems-exeinfo.cpp
> index 1e6d4b4..ec51597 100644
> --- a/linkers/rtems-exeinfo.cpp
> +++ b/linkers/rtems-exeinfo.cpp
> @@ -755,6 +755,8 @@ namespace rld
>        size_t           total = 0;
>        size_t           total_size = 0;
>        size_t           inlined_size = 0;
> +      double           percentage;
> +      double           percentage_size;
>        dwarf::functions funcs_inlined;
>        dwarf::functions funcs_not_inlined;
>        func_counts      counts;
> @@ -798,14 +800,24 @@ namespace rld
>          }
>        }
>
> +      if ( total == 0 ) {
> +        percentage = 0;
> +      } else {
> +        percentage = ( funcs_inlined.size() * 100 ) / total;

that's an integer result, if you're ok with it.

> +      }
> +
> +      if ( total_size == 0 ) {
> +        percentage_size = 0;
> +      } else {
> +        percentage_size = ( inlined_size * 100 ) / total_size;
ditto

> +      }
> +
>        std::cout << "inlined funcs   : " << funcs_inlined.size () << std::endl
>                  << "    total funcs : " << total << std::endl
> -                << " % inline funcs : " << (funcs_inlined.size () * 100) / total << '%'
> -                << std::endl
> +                << " % inline funcs : " << percentage << '%' << std::endl
>                  << "     total size : " << total_size << std::endl
>                  << "    inline size : " << inlined_size << std::endl
> -                << "  % inline size : " << (inlined_size * 100) / total_size << '%'
> -                << std::endl;
> +                << "  % inline size : " << percentage_size << '%' << std::endl;
>
>        auto count_compare = [](func_count const & a, func_count const & b) {
>          return a.size != b.size?  a.size < b.size : a.count > b.count;
> diff --git a/tester/covoar/ReportsBase.cc b/tester/covoar/ReportsBase.cc
> index 31dc429..b54f550 100644
> --- a/tester/covoar/ReportsBase.cc
> +++ b/tester/covoar/ReportsBase.cc
> @@ -482,7 +482,7 @@ void  ReportsBase::WriteSummaryReport(
>      }
>    }
>
> -  if (totalBytes == 0) {
> +  if ( totalBytes == 0 ) {
>      percentage = 0;
>    } else {
>      percentage = (double) notExecuted;
> --
> 1.8.3.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list