This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fake PIDs in the core target.


Trying to avoiding yet-another-partial-transition in the tree...
I remembered the core_has_fake_pid global that can be replaced with the new
inferior->fake_pid_p field.

Tested on x86_64 Fedora 16 (also manually with some hacks to exercise
the fake pid paths) and checked in.

2012-01-26  Pedro Alves  <palves@redhat.com>

	* corelow.c (core_has_fake_pid): Delete.
	(core_close): Delete references to `core_has_fake_pid'.
	(add_to_thread_list): Adjust to mark the inferior's pid as fake.
	(core_open): Delete references to `core_has_fake_pid'.
	(core_pid_to_str): Adjust to check inferior->fake_pid_p instead of
	the removed global.
---
 gdb/corelow.c |   21 ++++++++++++---------
 1 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/gdb/corelow.c b/gdb/corelow.c
index 3e0c7cd..aa344c6 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -75,9 +75,6 @@ struct gdbarch *core_gdbarch = NULL;
    unix child targets.  */
 static struct target_section_table *core_data;

-/* True if we needed to fake the pid of the loaded core inferior.  */
-static int core_has_fake_pid = 0;
-
 static void core_files_info (struct target_ops *);

 static struct core_fns *sniff_core_bfd (bfd *);
@@ -217,7 +214,6 @@ core_close (int quitting)
 	  xfree (core_data);
 	  core_data = NULL;
 	}
-      core_has_fake_pid = 0;

       name = bfd_get_filename (core_bfd);
       gdb_bfd_close_or_warn (core_bfd);
@@ -244,6 +240,8 @@ add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
   int core_tid;
   int pid, lwpid;
   asection *reg_sect = (asection *) reg_sect_arg;
+  int fake_pid_p = 0;
+  struct inferior *inf;

   if (strncmp (bfd_section_name (abfd, asect), ".reg/", 5) != 0)
     return;
@@ -253,14 +251,18 @@ add_to_thread_list (bfd *abfd, asection *asect, void *reg_sect_arg)
   pid = bfd_core_file_pid (core_bfd);
   if (pid == 0)
     {
-      core_has_fake_pid = 1;
+      fake_pid_p = 1;
       pid = CORELOW_PID;
     }

   lwpid = core_tid;

-  if (current_inferior ()->pid == 0)
-    inferior_appeared (current_inferior (), pid);
+  inf = current_inferior ();
+  if (inf->pid == 0)
+    {
+      inferior_appeared (inf, pid);
+      inf->fake_pid_p = fake_pid_p;
+    }

   ptid = ptid_build (pid, lwpid, 0);

@@ -382,7 +384,6 @@ core_open (char *filename, int from_tty)
   init_thread_list ();

   inferior_ptid = null_ptid;
-  core_has_fake_pid = 0;

   /* Need to flush the register cache (and the frame cache) from a
      previous debug session.  If inferior_ptid ends up the same as the
@@ -849,6 +850,7 @@ static char *
 core_pid_to_str (struct target_ops *ops, ptid_t ptid)
 {
   static char buf[64];
+  struct inferior *inf;
   int pid;

   /* The preferred way is to have a gdbarch/OS specific
@@ -867,7 +869,8 @@ core_pid_to_str (struct target_ops *ops, ptid_t ptid)

   /* Otherwise, this isn't a "threaded" core -- use the PID field, but
      only if it isn't a fake PID.  */
-  if (!core_has_fake_pid)
+  inf = find_inferior_pid (ptid_get_pid (ptid));
+  if (inf != NULL && !inf->fake_pid_p)
     return normal_pid_to_str (ptid);

   /* No luck.  We simply don't have a valid PID to print.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]