Author: emaste
Date: Wed Dec  2 17:22:29 2020
New Revision: 368280
URL: https://svnweb.freebsd.org/changeset/base/368280

Log:
  addr2line: rework check_range conditions
  
  Simplify logic and reduce indentation for DW_AT_low_pc case.
  
  Reviewed by:  Tiger Gao, markj
  Sponsored by: The FreeBSD Foundation
  Differential Revision:        https://reviews.freebsd.org/D27426

Modified:
  head/contrib/elftoolchain/addr2line/addr2line.c

Modified: head/contrib/elftoolchain/addr2line/addr2line.c
==============================================================================
--- head/contrib/elftoolchain/addr2line/addr2line.c     Wed Dec  2 16:54:24 
2020        (r368279)
+++ head/contrib/elftoolchain/addr2line/addr2line.c     Wed Dec  2 17:22:29 
2020        (r368280)
@@ -580,8 +580,8 @@ check_range(Dwarf_Debug dbg, Dwarf_Die die, Dwarf_Unsi
        ranges_cnt = 0;
        in_cu = false;
 
-       ret = dwarf_attrval_unsigned(die, DW_AT_ranges, &ranges_off, &de);
-       if (ret == DW_DLV_OK) {
+       if (dwarf_attrval_unsigned(die, DW_AT_ranges, &ranges_off, &de) ==
+           DW_DLV_OK) {
                ret = dwarf_get_ranges(dbg, ranges_off, &ranges,
                        &ranges_cnt, NULL, &de);
                if (ret != DW_DLV_OK)
@@ -612,33 +612,30 @@ check_range(Dwarf_Debug dbg, Dwarf_Die die, Dwarf_Unsi
                                break;
                        }
                }
-       } else {
-               if (dwarf_attrval_unsigned(die, DW_AT_low_pc, &lopc, &de) ==
+       } else if (dwarf_attrval_unsigned(die, DW_AT_low_pc, &lopc, &de) ==
+           DW_DLV_OK) {
+               if (lopc == curlopc)
+                       return (DW_DLV_ERROR);
+               if (dwarf_attrval_unsigned(die, DW_AT_high_pc, &hipc, &de) ==
                    DW_DLV_OK) {
-                       if (lopc == curlopc)
+                       /*
+                        * Check if the address falls into the PC
+                        * range of this CU.
+                        */
+                       if (handle_high_pc(die, lopc, &hipc) != DW_DLV_OK)
                                return (DW_DLV_ERROR);
-                       if (dwarf_attrval_unsigned(die, DW_AT_high_pc, &hipc,
-                               &de) == DW_DLV_OK) {
-                               /*
-                                * Check if the address falls into the PC
-                                * range of this CU.
-                                */
-                               if (handle_high_pc(die, lopc, &hipc) !=
-                                       DW_DLV_OK)
-                                       return (DW_DLV_ERROR);
-                       } else {
-                               /* Assume ~0ULL if DW_AT_high_pc not present. */
-                               hipc = ~0ULL;
-                       }
-
-                       if (addr >= lopc && addr < hipc) {
-                               in_cu = true;
-                       }
                } else {
-                       /* Addr not in range die, try labels. */
-                       ret = check_labels(dbg, die, addr, range);
-                       return ret;
+                       /* Assume ~0ULL if DW_AT_high_pc not present. */
+                       hipc = ~0ULL;
                }
+
+               if (addr >= lopc && addr < hipc) {
+                       in_cu = true;
+               }
+       } else {
+               /* Addr not found above, try labels. */
+               ret = check_labels(dbg, die, addr, range);
+               return ret;
        }
 
        if (in_cu) {
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to