From:Suzuki K. Poulose <suz...@in.ibm.com>

ia64 impelementation for elf_core_copy_extra_phdrs(). Adapted from
elf_core_write_extra_phdrs().

Signed-off-by: Suzuki K. Poulose <suz...@in.ibm.com>
---
 arch/ia64/kernel/elfcore.c |   34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/arch/ia64/kernel/elfcore.c b/arch/ia64/kernel/elfcore.c
index bac1639..64c8acf 100644
--- a/arch/ia64/kernel/elfcore.c
+++ b/arch/ia64/kernel/elfcore.c
@@ -42,6 +42,40 @@ int elf_core_write_extra_phdrs(struct file *file, loff_t 
offset, size_t *size,
        return 1;
 }
 
+int elf_core_copy_extra_phdrs(char *bufp, loff_t offset, size_t *size,
+                               unsigned long limit)
+{
+       const struct elf_phdr *const gate_phdrs =
+               (const struct elf_phdr *) (GATE_ADDR + GATE_EHDR->e_phoff);
+       int i;
+       Elf64_Off ofs = 0;
+       struct elf_phdr *phdr = (struct elf_phdr *) bufp;
+
+       for (i = 0; i < GATE_EHDR->e_phnum; ++i) {
+               *size += sizeof(*phdr);
+               if (*size > limit)
+                       return 0;
+
+               *phdr = gate_phdrs[i];
+
+               if (phdr->p_type == PT_LOAD) {
+                       phdr->p_memsz = PAGE_ALIGN(phdr->p_memsz);
+                       phdr->p_filesz = phdr->p_memsz;
+                       if (ofs == 0) {
+                               ofs = phdr->p_offset = *offset;
+                               offset += phdr->p_filesz;
+                       } else {
+                               phdr->p_offset = ofs;
+                       }
+               } else {
+                       phdr->p_offset += ofs;
+               }
+               phdr->p_paddr = 0; /* match other core phdrs */
+               phdr++;
+       }
+       return 1;
+}
+
 int elf_core_write_extra_data(struct file *file, size_t *size,
                              unsigned long limit)
 {

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to