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