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;