Fix completely bogus implementation of VG_(seginfo_sect_kind).  This
was reported a very long time ago (2 years?) but was not fixed until
now.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7210 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c
index ca83004..39ed3a7 100644
--- a/coregrind/m_debuginfo/debuginfo.c
+++ b/coregrind/m_debuginfo/debuginfo.c
@@ -1263,36 +1263,43 @@
 
 VgSectKind VG_(seginfo_sect_kind)(Addr a)
 {
-   SegInfo* si;
+   SegInfo*   si;
    VgSectKind ret = Vg_SectUnknown;
 
-   for(si = segInfo_list; si != NULL; si = si->next) {
-      if (a >= si->text_start_avma 
-          && a < si->text_start_avma + si->text_size) {
-
-	 if (0)
-	    VG_(printf)(
-               "addr=%p si=%p %s got=%p %d  plt=%p %d data=%p %d bss=%p %d\n",
-               a, si, si->filename, 
-               si->got_start_avma,  si->got_size,
-               si->plt_start_avma,  si->plt_size,
-               si->data_start_avma, si->data_size,
-               si->bss_start_avma,  si->bss_size);
-
-	 ret = Vg_SectText;
-
-	 if (a >= si->data_start_avma && a < si->data_start_avma + si->data_size)
-	    ret = Vg_SectData;
-	 else 
-         if (a >= si->bss_start_avma && a < si->bss_start_avma + si->bss_size)
-	    ret = Vg_SectBSS;
-	 else 
-         if (a >= si->plt_start_avma && a < si->plt_start_avma + si->plt_size)
-	    ret = Vg_SectPLT;
-	 else 
-         if (a >= si->got_start_avma && a < si->got_start_avma + si->got_size)
-	    ret = Vg_SectGOT;
+   for (si = segInfo_list; si != NULL; si = si->next) {
+      if (a >= si->text_start_avma && a < si->text_start_avma + si->text_size) {
+         ret = Vg_SectText;
+         break;
       }
+      if (a >= si->data_start_avma && a < si->data_start_avma + si->data_size) {
+         ret = Vg_SectData;
+         break;
+      }
+      if (a >= si->bss_start_avma && a < si->bss_start_avma + si->bss_size) {
+         ret = Vg_SectBSS;
+         break;
+      }
+      if (a >= si->plt_start_avma && a < si->plt_start_avma + si->plt_size) {
+         ret = Vg_SectPLT;
+         break;
+      }
+      if (a >= si->got_start_avma && a < si->got_start_avma + si->got_size) {
+         ret = Vg_SectGOT;
+         break;
+      }
+   }
+
+   if (si != NULL)
+      vg_assert(ret != VgSectUnknown);
+
+   if (0 && si) {
+      VG_(printf)(
+         "addr=%p si=%p %s got=%p %d  plt=%p %d data=%p %d bss=%p %d\n",
+         a, si, si->filename, 
+         si->got_start_avma,  si->got_size,
+         si->plt_start_avma,  si->plt_size,
+         si->data_start_avma, si->data_size,
+         si->bss_start_avma,  si->bss_size);
    }
 
    return ret;