--- kcore.c.0   Wed Nov 10 15:57:16 1999
+++ kcore.c     Wed Nov 10 16:08:12 1999
@@ -147,7 +147,7 @@
{
       struct elf_prstatus prstatus;   /* NT_PRSTATUS */
       struct elf_prpsinfo psinfo;     /* NT_PRPSINFO */
-       struct elf_phdr *nhdr, *dhdr;
+       struct elf_phdr *nhdr, *phdr;
       struct elfhdr *elf;
       struct memelfnote notes[3];
       off_t offset = 0;
@@ -194,38 +194,47 @@
       nhdr->p_align   = 0;

       /* acquire an ELF program header blocks from the buffer for data */
-       dhdr = (struct elf_phdr *) bufp;
+       phdr = (struct elf_phdr *) bufp;
       bufp += sizeof(struct elf_phdr);
       offset += sizeof(struct elf_phdr);

       /* store program headers for data dump */
-       dhdr->p_type    = PT_LOAD;
-       dhdr->p_flags   = PF_R|PF_W|PF_X;
-       dhdr->p_offset  = PAGE_SIZE;
-       dhdr->p_vaddr   = PAGE_OFFSET;
-       dhdr->p_paddr   = __pa(PAGE_OFFSET);
-       dhdr->p_filesz  = ((unsigned long)high_memory - PAGE_OFFSET + PAGE_SIZE);
-       dhdr->p_memsz   = ((unsigned long)high_memory - PAGE_OFFSET + PAGE_SIZE);
-       dhdr->p_align   = PAGE_SIZE;
+       phdr->p_type    = PT_LOAD;
+       phdr->p_flags   = PF_R|PF_W|PF_X;
+       phdr->p_offset  = PAGE_SIZE;
+       phdr->p_vaddr   = PAGE_OFFSET;
+       phdr->p_paddr   = __pa(PAGE_OFFSET);
+       phdr->p_filesz  = ((unsigned long)high_memory - PAGE_OFFSET + PAGE_SIZE);
+       phdr->p_memsz   = ((unsigned long)high_memory - PAGE_OFFSET + PAGE_SIZE);
+       phdr->p_align   = PAGE_SIZE;

#ifdef CONFIG_MODULES
       {
               struct module *m;
+               unsigned long hdr_size = sizeof(struct elf_phdr); /* for nhdr */
+
               read_lock(&modlist_lock);
               for (m=module_list; m; m=m->next) {
-                       dhdr = (struct elf_phdr *) bufp;
+                       hdr_size += sizeof(struct elf_phdr);
+                       elf->e_phnum++;
+               }
+               hdr_size = PAGE_ALIGN(hdr_size);
+               phdr->p_offset = hdr_size;
+               phdr->p_filesz = ((unsigned long)high_memory - PAGE_OFFSET + hdr_size);
+               phdr->p_memsz = ((unsigned long)high_memory - PAGE_OFFSET + hdr_size);
+               for (m=module_list; m; m=m->next) {
+                       phdr = (struct elf_phdr *) bufp;
                       bufp += sizeof(struct elf_phdr);
                       offset += sizeof(struct elf_phdr);

-                       dhdr->p_type    = PT_LOAD;
-                       dhdr->p_flags   = PF_R|PF_W|PF_X;
-                       dhdr->p_offset  = (unsigned long)m - PAGE_OFFSET + PAGE_SIZE;
-                       dhdr->p_vaddr   = (unsigned long)m;
-                       dhdr->p_paddr   = __pa(m);
-                       dhdr->p_filesz  = m->size;
-                       dhdr->p_memsz   = m->size;
-                       dhdr->p_align   = 0;
-                       elf->e_phnum++;
+                       phdr->p_type    = PT_LOAD;
+                       phdr->p_flags   = PF_R|PF_W|PF_X;
+                       phdr->p_offset  = (unsigned long)m - PAGE_OFFSET + hdr_size;
+                       phdr->p_vaddr   = (unsigned long)m;
+                       phdr->p_paddr   = __pa(m);
+                       phdr->p_filesz  = m->size;
+                       phdr->p_memsz   = m->size;
+                       phdr->p_align   = 0;
               }
               read_unlock(&modlist_lock);
       }