diff mbox

[committed,v7,2/3] BFD: Extract PID from MIPS core dump file

Message ID alpine.DEB.2.00.1711082104500.10088@tp.orcam.me.uk
State Committed
Headers show

Commit Message

Maciej W. Rozycki Nov. 8, 2017, 9:23 p.m. UTC
From: Djordje Todorovic <djordje.todorovic@rt-rk.com>

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/elf32-mips.c  |    2 ++
 bfd/elf64-mips.c  |    2 ++
 bfd/elfn32-mips.c |    2 ++
 3 files changed, 6 insertions(+)
diff mbox

Patch

Index: binutils/bfd/elf32-mips.c
===================================================================
--- binutils.orig/bfd/elf32-mips.c	2017-11-08 21:05:36.456371632 +0000
+++ binutils/bfd/elf32-mips.c	2017-11-08 21:05:37.530049782 +0000
@@ -2353,6 +2353,8 @@  elf32_mips_grok_psinfo (bfd *abfd, Elf_I
 	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: binutils/bfd/elf64-mips.c
===================================================================
--- binutils.orig/bfd/elf64-mips.c	2017-11-08 21:05:36.474538851 +0000
+++ binutils/bfd/elf64-mips.c	2017-11-08 21:05:37.538147336 +0000
@@ -4228,6 +4228,8 @@  elf64_mips_grok_psinfo (bfd *abfd, Elf_I
 	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: binutils/bfd/elfn32-mips.c
===================================================================
--- binutils.orig/bfd/elfn32-mips.c	2017-11-08 21:05:36.489887759 +0000
+++ binutils/bfd/elfn32-mips.c	2017-11-08 21:05:37.562322680 +0000
@@ -3562,6 +3562,8 @@  elf32_mips_grok_psinfo (bfd *abfd, Elf_I
 	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