BFD: Extract PID from MIPS core dump file
authorDjordje Todorovic <djordje.todorovic@rt-rk.com>
Wed, 8 Nov 2017 21:19:05 +0000 (21:19 +0000)
committerMaciej W. Rozycki <macro@mips.com>
Wed, 8 Nov 2017 21:19:05 +0000 (21:19 +0000)
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
bfd/elf32-mips.c
bfd/elf64-mips.c
bfd/elfn32-mips.c

index b977944..8e61929 100644 (file)
@@ -1,5 +1,11 @@
 2017-11-08  Djordje Todorovic  <djordje.todorovic@rt-rk.com>
 
+       * 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  <djordje.todorovic@rt-rk.com>
+
        * elf32-mips.c (elf32_mips_write_core_note): New function.
        (elf_backend_write_core_note): New macro.
        * elf64-mips.c (elf64_mips_write_core_note): New function.
index 3b48103..ec4e7d3 100644 (file)
@@ -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
index af0c01c..291a8a9 100644 (file)
@@ -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
index 8e5efa5..8de1ff4 100644 (file)
@@ -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