--- 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);
 	}
