===== src/dwarf/Gfind_proc_info-lsb.c 1.5 vs edited ===== --- 1.5/src/dwarf/Gfind_proc_info-lsb.c 2004-08-19 05:26:11 -07:00 +++ edited/src/dwarf/Gfind_proc_info-lsb.c 2004-08-20 21:33:42 -07:00 @@ -232,15 +232,12 @@ if (rel_ip < e->start_ip_offset) hi = mid; else - { - if (mid + 1 >= table_len - || rel_ip < table[mid + 1].start_ip_offset) - return e; - else - lo = mid + 1; - } + lo = mid + 1; } - return NULL; + if (hi <= 0) + return NULL; + e = table + hi - 1; + return e; } #endif /* !UNW_REMOTE_ONLY */ @@ -273,24 +270,13 @@ if (rel_ip < start) hi = mid; else - { - if (mid + 1 >= table_len) - break; - - e_addr += 4; /* skip over fde_offset to next table-entry */ - if ((ret = dwarf_reads32 (as, a, &e_addr, &end, arg)) < 0) - return ret; - - if (rel_ip >= end) - lo = mid + 1; - else - break; - } + lo = mid + 1; } - if (rel_ip < start) + if (hi <= 0) return 0; - e->start_ip_offset = start; - if ((ret = dwarf_reads32 (as, a, &e_addr, &e->fde_offset, arg)) < 0) + e_addr = table + (hi - 1) * sizeof (struct table_entry); + if ((ret = dwarf_reads32 (as, a, &e_addr, &e->start_ip_offset, arg)) < 0 + || (ret = dwarf_reads32 (as, a, &e_addr, &e->fde_offset, arg)) < 0) return ret; return 1; }