]> git.hungrycats.org Git - linux/commitdiff
[PATCH] fix ia64 core dump code
authorAndrew Morton <akpm@osdl.org>
Tue, 7 Oct 2003 00:53:26 +0000 (17:53 -0700)
committerLinus Torvalds <torvalds@home.osdl.org>
Tue, 7 Oct 2003 00:53:26 +0000 (17:53 -0700)
From: Roland Turner <roland@redhat.com>

Fixes a BUG which occurs when an ia64 application tries to dump core.

include/asm-ia64/elf.h

index cebb025766c247ddad266730b967ac8113eebbfa..9364bb2ee060f2dc1c4d3381ebfeb86982c41bd5 100644 (file)
@@ -218,19 +218,22 @@ do {                                                                              \
 #define ELF_CORE_EXTRA_PHDRS           (GATE_EHDR->e_phnum)
 #define ELF_CORE_WRITE_EXTRA_PHDRS                                             \
 do {                                                                           \
-       const struct elf_phdr *const vsyscall_phdrs =                         \
+       const struct elf_phdr *const gate_phdrs =                             \
                (const struct elf_phdr *) (GATE_ADDR + GATE_EHDR->e_phoff);   \
        int i;                                                                  \
-       Elf32_Off ofs = 0;                                                    \
+       Elf64_Off ofs = 0;                                                    \
        for (i = 0; i < GATE_EHDR->e_phnum; ++i) {                              \
-               struct elf_phdr phdr = vsyscall_phdrs[i];                     \
+               struct elf_phdr phdr = gate_phdrs[i];                         \
                if (phdr.p_type == PT_LOAD) {                                   \
-                       BUG_ON(ofs != 0);                                     \
-                       ofs = phdr.p_offset = offset;                           \
                        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 */                  \
@@ -239,13 +242,15 @@ do {                                                                              \
 } while (0)
 #define ELF_CORE_WRITE_EXTRA_DATA                                      \
 do {                                                                   \
-       const struct elf_phdr *const vsyscall_phdrs =                         \
+       const struct elf_phdr *const gate_phdrs =                             \
                (const struct elf_phdr *) (GATE_ADDR + GATE_EHDR->e_phoff);   \
        int i;                                                          \
        for (i = 0; i < GATE_EHDR->e_phnum; ++i) {                      \
-               if (vsyscall_phdrs[i].p_type == PT_LOAD)                      \
-                       DUMP_WRITE((void *) vsyscall_phdrs[i].p_vaddr,        \
-                                  PAGE_ALIGN(vsyscall_phdrs[i].p_memsz));    \
+               if (gate_phdrs[i].p_type == PT_LOAD) {                        \
+                       DUMP_WRITE((void *) gate_phdrs[i].p_vaddr,            \
+                                  PAGE_ALIGN(gate_phdrs[i].p_memsz));        \
+                       break;                                                \
+               }                                                             \
        }                                                               \
 } while (0)