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

2021-06-29 Thread Ryan Long
CID 1503008: Division or modulo by zero
CID 1503015: Division or modulo by zero

Closes #4416
---
 linkers/rtems-exeinfo.cpp | 20 
 1 file changed, 16 insertions(+), 4 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;
+  }
+
+  if ( total_size == 0 ) {
+percentage_size = 0;
+  } else {
+percentage_size = ( inlined_size * 100 ) / total_size;
+  }
+
   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;
-- 
1.8.3.1

___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


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

2021-06-29 Thread Gedare Bloom
On Tue, Jun 29, 2021 at 11:50 AM Ryan Long  wrote:
>
> CID 1503008: Division or modulo by zero
> CID 1503015: Division or modulo by zero
>
> Closes #4416
> ---
>  linkers/rtems-exeinfo.cpp | 20 
>  1 file changed, 16 insertions(+), 4 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;
> +  }
> +
> +  if ( total_size == 0 ) {
> +percentage_size = 0;
> +  } else {
> +percentage_size = ( inlined_size * 100 ) / total_size;

These are still integer results. If you want double, you should cast,
if you want integer, you should use int type for the percentage and
percentage_size variables.

> +  }
> +
>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;
> --
> 1.8.3.1
>
> ___
> devel mailing list
> devel@rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel


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

2021-06-29 Thread Ryan Long
I'll cast those. Sorry I missed that. 

-Original Message-
From: Gedare Bloom  
Sent: Tuesday, June 29, 2021 2:03 PM
To: Ryan Long 
Cc: devel@rtems.org
Subject: Re: [PATCH v2 2/2] rtems-exeinfo.cpp: Fix division by zero errors

On Tue, Jun 29, 2021 at 11:50 AM Ryan Long  wrote:
>
> CID 1503008: Division or modulo by zero CID 1503015: Division or 
> modulo by zero
>
> Closes #4416
> ---
>  linkers/rtems-exeinfo.cpp | 20 
>  1 file changed, 16 insertions(+), 4 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;
> +  }
> +
> +  if ( total_size == 0 ) {
> +percentage_size = 0;
> +  } else {
> +percentage_size = ( inlined_size * 100 ) / total_size;

These are still integer results. If you want double, you should cast, if you 
want integer, you should use int type for the percentage and percentage_size 
variables.

> +  }
> +
>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;
> --
> 1.8.3.1
>
> ___
> devel mailing list
> devel@rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
___
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel