Support x32 core dump.
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 16 Jun 2011 17:42:59 +0000 (17:42 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 16 Jun 2011 17:42:59 +0000 (17:42 +0000)
2011-06-16  H.J. Lu  <hongjiu.lu@intel.com>

* elf64-x86-64.c (elf_x86_64_grok_prstatus): Support x32.
(elf_x86_64_grok_psinfo): Likewise.

bfd/ChangeLog
bfd/elf64-x86-64.c

index fd2c5d89fcaddf11ac5ad81c552d1f94bde109be..41b22cc11c8663e769d8bdc01b05801a02e02868 100644 (file)
@@ -1,3 +1,8 @@
+2011-06-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * elf64-x86-64.c (elf_x86_64_grok_prstatus): Support x32.
+       (elf_x86_64_grok_psinfo): Likewise.
+
 2011-06-16  Nick Clifton  <nickc@redhat.com>
 
        * elf.c (elf_find_function): Fail if not provided with a symbol
index 8ebd56ed685eebb8ab9e8bfae9d67b392535155a..de65197876181fe593b8e8d7c672c521d24841a9 100644 (file)
@@ -311,6 +311,19 @@ elf_x86_64_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
       default:
        return FALSE;
 
+      case 296:                /* sizeof(istruct elf_prstatus) on Linux/x32 */
+       /* pr_cursig */
+       elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
+
+       /* pr_pid */
+       elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24);
+
+       /* pr_reg */
+       offset = 72;
+       size = 216;
+
+       break;
+
       case 336:                /* sizeof(istruct elf_prstatus) on Linux/x86_64 */
        /* pr_cursig */
        elf_tdata (abfd)->core_signal
@@ -340,6 +353,15 @@ elf_x86_64_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
       default:
        return FALSE;
 
+      case 124:                /* sizeof(struct elf_prpsinfo) on Linux/x32 */
+       elf_tdata (abfd)->core_pid
+         = bfd_get_32 (abfd, note->descdata + 12);
+       elf_tdata (abfd)->core_program
+         = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
+       elf_tdata (abfd)->core_command
+         = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
+       break;
+
       case 136:                /* sizeof(struct elf_prpsinfo) on Linux/x86_64 */
        elf_tdata (abfd)->core_pid
          = bfd_get_32 (abfd, note->descdata + 24);