|
From: Jeremy F. <je...@go...> - 2005-02-25 05:32:25
|
CVS commit by fitzhardinge:
Fix a long-standing bug in the core-dumper, revealed by the
avoid-device-maps patch.
M +15 -12 vg_signals.c 1.132
--- valgrind/coregrind/vg_signals.c #1.131:1.132
@@ -1096,5 +1096,5 @@ static void make_coredump(ThreadId tid,
Elf32_Phdr *phdrs;
Int num_phdrs;
- Int i;
+ Int i, idx;
UInt off;
struct note *notelist, *note;
@@ -1186,13 +1186,15 @@ static void make_coredump(ThreadId tid,
off = PGROUNDUP(off);
- for(seg = VG_(first_segment)(), i = 1;
+ for(seg = VG_(first_segment)(), idx = 1;
seg != NULL;
- seg = VG_(next_segment)(seg), i++) {
+ seg = VG_(next_segment)(seg)) {
if (!may_dump(seg))
continue;
- fill_phdr(&phdrs[i], seg, off, (seg->len + off) < max_size);
+ fill_phdr(&phdrs[idx], seg, off, (seg->len + off) < max_size);
- off += phdrs[i].p_filesz;
+ off += phdrs[idx].p_filesz;
+
+ idx++;
}
@@ -1206,18 +1208,19 @@ static void make_coredump(ThreadId tid,
VG_(lseek)(core_fd, phdrs[1].p_offset, VKI_SEEK_SET);
- for(seg = VG_(first_segment)(), i = 1;
+ for(seg = VG_(first_segment)(), idx = 1;
seg != NULL;
- seg = VG_(next_segment)(seg), i++) {
+ seg = VG_(next_segment)(seg)) {
if (!should_dump(seg))
continue;
- if (phdrs[i].p_filesz > 0) {
+ if (phdrs[idx].p_filesz > 0) {
Int ret;
- vg_assert(VG_(lseek)(core_fd, phdrs[i].p_offset, VKI_SEEK_SET) == phdrs[i].p_offset);
+ vg_assert(VG_(lseek)(core_fd, phdrs[idx].p_offset, VKI_SEEK_SET) == phdrs[idx].p_offset);
+ vg_assert(seg->len >= phdrs[idx].p_filesz);
- vg_assert(seg->len >= phdrs[i].p_filesz);
- ret = VG_(write)(core_fd, (void *)seg->addr, phdrs[i].p_filesz);
+ ret = VG_(write)(core_fd, (void *)seg->addr, phdrs[idx].p_filesz);
}
+ idx++;
}
|