From c9ec0e8945d057979a361e3545d42b3f15adf04a Mon Sep 17 00:00:00 2001 From: Djordje Todorovic Date: Wed, 8 Nov 2017 21:19:05 +0000 Subject: [PATCH] BFD: Extract PID from MIPS core dump file On MIPS o32, n32 and n64 platforms, PID information was not correctly propagated from core dump file to internal GDB structures. This patch fixes that behavior. A correct PID is needed by `libthread_db' library supplied with glibc repository revisions before commit c579f48edba8 ("Remove cached PID/TID in clone") or released versions before 2.25 for GDB to fetch value of TLS variable from core file. bfd/ChangeLog: * elf32-mips.c (elf32_mips_grok_psinfo): Extract core->pid. * elf64-mips.c (elf64_mips_grok_psinfo): Likewise. * elfn32-mips.c (elf32_mips_grok_psinfo): Likewise. --- bfd/ChangeLog | 6 ++++++ bfd/elf32-mips.c | 2 ++ bfd/elf64-mips.c | 2 ++ bfd/elfn32-mips.c | 2 ++ 4 files changed, 12 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b977944865f..8e619290921 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2017-11-08 Djordje Todorovic + + * elf32-mips.c (elf32_mips_grok_psinfo): Extract core->pid. + * elf64-mips.c (elf64_mips_grok_psinfo): Likewise. + * elfn32-mips.c (elf32_mips_grok_psinfo): Likewise. + 2017-11-08 Djordje Todorovic * elf32-mips.c (elf32_mips_write_core_note): New function. diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index 3b481031023..ec4e7d38c57 100644 --- a/bfd/elf32-mips.c +++ b/bfd/elf32-mips.c @@ -2353,6 +2353,8 @@ elf32_mips_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) return FALSE; case 128: /* Linux/MIPS elf_prpsinfo */ + elf_tdata (abfd)->core->pid + = bfd_get_32 (abfd, note->descdata + 16); elf_tdata (abfd)->core->program = _bfd_elfcore_strndup (abfd, note->descdata + 32, 16); elf_tdata (abfd)->core->command diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c index af0c01c5410..291a8a9370f 100644 --- a/bfd/elf64-mips.c +++ b/bfd/elf64-mips.c @@ -4228,6 +4228,8 @@ elf64_mips_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) return FALSE; case 136: /* Linux/MIPS - N64 kernel elf_prpsinfo */ + elf_tdata (abfd)->core->pid + = bfd_get_32 (abfd, note->descdata + 24); elf_tdata (abfd)->core->program = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16); elf_tdata (abfd)->core->command diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c index 8e5efa55255..8de1ff4971e 100644 --- a/bfd/elfn32-mips.c +++ b/bfd/elfn32-mips.c @@ -3562,6 +3562,8 @@ elf32_mips_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) return FALSE; case 128: /* Linux/MIPS elf_prpsinfo */ + elf_tdata (abfd)->core->pid + = bfd_get_32 (abfd, note->descdata + 16); elf_tdata (abfd)->core->program = _bfd_elfcore_strndup (abfd, note->descdata + 32, 16); elf_tdata (abfd)->core->command -- 2.30.2