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 b977944865f752d3ac4f1b9b44a4537625b7d11c..8e619290921734df297f079feafd75a1a9103eb6 100644 (file)
@@ -1,3 +1,9 @@
+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.
index 3b4810310232ccae03abc0198726ea35db46915b..ec4e7d38c57111fb399f0514b574805d9ed0f777 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 af0c01c5410f89e9f5c7b297f615e927665a3b4a..291a8a9370fa4a0637bd4cb503588dc9aff9b252 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 8e5efa55255c4905ac8151fe57f6b702bb3014bc..8de1ff4971e45b43f23e320784baa6919f0c4214 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