libdwfl: linux-pid-attach.c: Report actual PID (Tgid) to dwfl_attach_state.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
This commit is contained in:
Mark Wielaard
2013-12-23 14:20:06 +01:00
parent 3e98ab73f3
commit 97bbf9b7ca
2 changed files with 29 additions and 0 deletions
+5
View File
@@ -1,3 +1,8 @@
2013-12-23 Mark Wielaard <mjw@redhat.com>
* linux-pid-attach.c (__libdwfl_attach_state_for_pid): Report actual
pid (thread group leader) to dwfl_attach_state.
2013-12-21 Mark Wielaard <mjw@redhat.com>
* frame_unwind.c (handle_cfi): Track whether the return register
+24
View File
@@ -285,6 +285,30 @@ bool
internal_function
__libdwfl_attach_state_for_pid (Dwfl *dwfl, pid_t pid)
{
char buffer[36];
FILE *procfile;
/* Make sure to report the actual PID (thread group leader) to
dwfl_attach_state. */
snprintf (buffer, sizeof (buffer), "/proc/%ld/status", (long) pid);
procfile = fopen (buffer, "r");
if (procfile == NULL)
return false;
char *line = NULL;
size_t linelen = 0;
while (getline (&line, &linelen, procfile) >= 0)
if (strncmp (line, "Tgid:", 5) == 0)
{
pid = atoi (&line[5]);
break;
}
free (line);
fclose (procfile);
if (pid == 0)
return false;
char dirname[64];
int i = snprintf (dirname, sizeof (dirname), "/proc/%ld/task", (long) pid);
assert (i > 0 && i < (ssize_t) sizeof (dirname) - 1);