]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Back out r7210 ("Fix completely bogus implementation of
authorJulian Seward <jseward@acm.org>
Sun, 2 Dec 2007 22:03:43 +0000 (22:03 +0000)
committerJulian Seward <jseward@acm.org>
Sun, 2 Dec 2007 22:03:43 +0000 (22:03 +0000)
VG_(seginfo_sect_kind).") as it breaks DRD and possible Callgrind.

The segment kind identification code is basically broken for non-text
segments, but requires fixing at a higher level than this.  See
discussion on valgrind-developers, 20 March 07, "Bug in
VG_(seginfo_sect_kind) ?"

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@7267

coregrind/m_debuginfo/debuginfo.c

index 3b763e8e4921e083b57d9890ced265fbfd970701..ea14c082e4ee6cc481faba5509b523762efa5347 100644 (file)
@@ -1263,43 +1263,36 @@ ULong VG_(seginfo_sym_offset)(const SegInfo* si)
 
 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) {
-         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 (a >= si->text_start_avma 
+          && a < si->text_start_avma + si->text_size) {
 
-   if (si != NULL)
-      vg_assert(ret != Vg_SectUnknown);
-
-   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);
+        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;
+      }
    }
 
    return ret;