From: Julian Seward Date: Sun, 25 Nov 2007 12:30:36 +0000 (+0000) Subject: Fix completely bogus implementation of VG_(seginfo_sect_kind). This X-Git-Tag: svn/VALGRIND_3_3_0~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e78a73e9257e535f83013eaa7d04d3adc740ed47;p=thirdparty%2Fvalgrind.git 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 --- diff --git a/coregrind/m_debuginfo/debuginfo.c b/coregrind/m_debuginfo/debuginfo.c index ca830040f7..39ed3a706d 100644 --- a/coregrind/m_debuginfo/debuginfo.c +++ b/coregrind/m_debuginfo/debuginfo.c @@ -1263,36 +1263,43 @@ 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) { - - 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;