summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDjordje Todorovic <djordje.todorovic@rt-rk.com>2017-11-08 21:19:05 +0000
committerMaciej W. Rozycki <macro@mips.com>2017-11-08 21:19:05 +0000
commitc9ec0e8945d057979a361e3545d42b3f15adf04a (patch)
tree732d9773b220e43ee35c449d5b2434e4a7ffad11
parent9031cb4af0adcf1c73cb9b8c73ca2d989023af2f (diff)
downloadbinutils-gdb-c9ec0e8945d057979a361e3545d42b3f15adf04a.tar.gz
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.
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf32-mips.c2
-rw-r--r--bfd/elf64-mips.c2
-rw-r--r--bfd/elfn32-mips.c2
4 files changed, 12 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index b977944865f..8e619290921 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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.
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