From: Julian Seward Date: Sun, 2 Dec 2007 22:03:43 +0000 (+0000) Subject: Back out r7210 ("Fix completely bogus implementation of X-Git-Tag: svn/VALGRIND_3_3_0~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06214b0c463039ccd883d96f91295527795c52c9;p=thirdparty%2Fvalgrind.git Back out r7210 ("Fix completely bogus implementation of 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 --- diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c index 3b763e8e49..ea14c082e4 100644 --- a/coregrind/m_debuginfo/debuginfo.c +++ b/coregrind/m_debuginfo/debuginfo.c @@ -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;