Module Name:    src
Committed By:   snj
Date:           Wed Feb  4 06:43:02 UTC 2015

Modified Files:
        src/sys/lib/libunwind [netbsd-7]: AddressSpace.hpp

Log Message:
Pull up following revision(s) (requested by joerg in ticket #476):
        sys/lib/libunwind/AddressSpace.hpp: revision 1.8
Fix binary search when search value is in the last block, but not equal
to the start of the range. PR 49444.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.7.2.1 src/sys/lib/libunwind/AddressSpace.hpp

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/lib/libunwind/AddressSpace.hpp
diff -u src/sys/lib/libunwind/AddressSpace.hpp:1.7 src/sys/lib/libunwind/AddressSpace.hpp:1.7.2.1
--- src/sys/lib/libunwind/AddressSpace.hpp:1.7	Sun Jul 20 14:40:58 2014
+++ src/sys/lib/libunwind/AddressSpace.hpp	Wed Feb  4 06:43:02 2015
@@ -263,21 +263,19 @@ public:
 
     pint_t base = n->hdr_base;
     pint_t first = n->hdr_start;
-    pint_t len = n->hdr_entries;
-    while (len) {
-      pint_t next = first + ((len + 1) / 2) * 8;
+    for (pint_t len = n->hdr_entries; len > 1; ) {
+      pint_t next = first + (len / 2) * 8;
       pint_t nextPC = base + (int32_t)get32(next);
       if (nextPC == pc) {
         first = next;
         break;
       }
       if (nextPC < pc) {
-        len -= (len + 1) / 2;
         first = next;
-      } else if (len == 1)
-        break;
-      else
-        len = (len + 1) / 2;
+        len -= (len / 2);
+      } else {
+        len /= 2;
+      }
     }
     fdeStart = base + (int32_t)get32(first + 4);
     data_base = n->data_base;

Reply via email to