From bcd823f19e31e93df9818913b1c1313175125bc9 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 16 Jun 2011 17:42:59 +0000 Subject: [PATCH] Support x32 core dump. 2011-06-16 H.J. Lu * elf64-x86-64.c (elf_x86_64_grok_prstatus): Support x32. (elf_x86_64_grok_psinfo): Likewise. --- bfd/ChangeLog | 5 +++++ bfd/elf64-x86-64.c | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index fd2c5d8..41b22cc 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2011-06-16 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_grok_prstatus): Support x32. + (elf_x86_64_grok_psinfo): Likewise. + 2011-06-16 Nick Clifton * elf.c (elf_find_function): Fail if not provided with a symbol diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 8ebd56e..de65197 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -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); -- 2.7.4