svn commit: r368280 - head/contrib/elftoolchain/addr2line
Ed Maste
emaste at FreeBSD.org
Wed Dec 2 17:22:30 UTC 2020
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) {
More information about the svn-src-head
mailing list