Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <pedro@codesourcery.com>
To: gdb-patches@sourceware.org
Subject: Make remote-sim target always have a thread
Date: Thu, 03 Jul 2008 18:04:00 -0000	[thread overview]
Message-ID: <200807031904.20942.pedro@codesourcery.com> (raw)
In-Reply-To: <200807031623.29562.pedro@codesourcery.com>

[-- Attachment #1: Type: text/plain, Size: 3417 bytes --]

A Thursday 03 July 2008 16:23:29, Pedro Alves wrote:
> This patch makes the monitor targets always register an execution control
> task in GDB's thread list.  Needed to clean up inferior control, and
> get rid of context switching.
>
> I confirmed that it builds with x86_64-unknown-linux-gnu x h8300-elf cross,
> and that it doesn't introduce any new warnings (this file is built without
> -Werror).
>
> As I said in my previous email, I don't even know how to test this,
> although I don't except to be any fallout.
>
> Does it look OK?  Can anyone instruct me how to test this; or do a test
> spin for me; or claim that it looks ok, and we'll fix problems as
> they arise?  :-)

This patch does the same to remote-sim.

(applies on top of the monitor patch)

Managed to get myself an arm-elf toolchain and tested with a
x86_64-unknow-linux-gnu x arm-elf, --target_board=arm-sim,
without regressions.  Does it look OK?

Default results look much better than I was expecting without
tweaking the boardfile.

FAIL: gdb.base/args.exp: argc for one empty
FAIL: gdb.base/args.exp: argv[2] for one empty
FAIL: gdb.base/args.exp: argv[3] for one empty
FAIL: gdb.base/args.exp: argc for two empty
FAIL: gdb.base/args.exp: argv[2] for two empty
FAIL: gdb.base/args.exp: argv[3] for two empty
FAIL: gdb.base/args.exp: argv[4] for two empty
FAIL: gdb.base/args.exp: argv[2] for one empty (with single quotes)
FAIL: gdb.base/args.exp: argv[2] for two empty (with single quotes)
FAIL: gdb.base/args.exp: argv[3] for two empty (with single quotes)
FAIL: gdb.base/chng-syms.exp: running with invalidated bpt condition after 
executable changes
FAIL: gdb.base/fileio.exp: Creating already existing file returns EEXIST
FAIL: gdb.base/fileio.exp: Open directory for writing returns EISDIR
FAIL: gdb.base/fileio.exp: Open for write but no write permission returns 
EACCES
FAIL: gdb.base/fileio.exp: Writing to a file
FAIL: gdb.base/fileio.exp: Write using invalid file descriptor returns EBADF
FAIL: gdb.base/fileio.exp: Reading from a file
FAIL: gdb.base/fileio.exp: Read using invalid file descriptor returns EBADF
FAIL: gdb.base/fileio.exp: Lseeking END a file
FAIL: gdb.base/fileio.exp: Closing an invalid file descriptor returns EBADF
FAIL: gdb.base/fileio.exp: Stat a file
FAIL: gdb.base/fileio.exp: Fstat an open file
FAIL: gdb.base/fileio.exp: Fstat an invalid file descriptor returns EBADF
FAIL: gdb.base/fileio.exp: Isatty (invalid fd)
FAIL: gdb.base/fileio.exp: Isatty (open file)
FAIL: gdb.base/fileio.exp: System says shell is available
FAIL: gdb.base/fileio.exp: System(3) call
FAIL: gdb.base/fileio.exp: System with invalid command returns 127
FAIL: gdb.base/fileio.exp: Rename a file
FAIL: gdb.base/fileio.exp: Renaming a file to existing directory returns 
EISDIR
FAIL: gdb.base/fileio.exp: Renaming a directory to a non-empty directory 
returns ENOTEMPTY or EEXIST
FAIL: gdb.base/fileio.exp: Renaming a directory to a subdir of itself returns 
EINVAL
FAIL: gdb.base/fileio.exp: Renaming a nonexistant file returns ENOENT
FAIL: gdb.base/fileio.exp: Unlinking a file in a directory w/o write access 
returns EACCES
FAIL: gdb.base/fileio.exp: Unlinking a nonexistant file returns ENOENT

# of expected passes            2493
# of unexpected failures        35
# of expected failures          3
# of untested testcases         3
# of unsupported tests          39

(only board tweakable failures, cool)

-- 
Pedro Alves

[-- Attachment #2: remote_sim_always_a_thread.diff --]
[-- Type: text/x-diff, Size: 5105 bytes --]

2008-07-03  Pedro Alves  <pedro@codesourcery.com>

	* remote-sim.c: Include gdbthread.h.
	(remote_sim_ptid): New global.
	(gdbsim_create_inferior): Silently add the main task to GDB's
	thread list.
	(gdbsim_close, gdbsim_mourn_inferior): Silently delete the main
	task from GDB's thread list.
	(gdbsim_resume): Adjust to use remote_sim_ptid.
	(gdbsim_thread_alive, gdbsim_pid_to_str): New.
	(init_gdbsim_ops): Register gdbsim_thread_alive and
	gdbsim_pid_to_str.
	(_initialize_remote_sim): Initialize remote_sim_ptid.
	* Makefile.in (remote-sim.o): Depend on $(gdbthread_h).

---
 gdb/Makefile.in  |    2 +-
 gdb/remote-sim.c |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 52 insertions(+), 4 deletions(-)

Index: src/gdb/remote-sim.c
===================================================================
--- src.orig/gdb/remote-sim.c	2008-07-03 18:21:37.000000000 +0100
+++ src/gdb/remote-sim.c	2008-07-03 18:47:41.000000000 +0100
@@ -41,6 +41,7 @@
 #include "sim-regno.h"
 #include "arch-utils.h"
 #include "readline/readline.h"
+#include "gdbthread.h"
 
 /* Prototypes */
 
@@ -115,6 +116,12 @@ static int program_loaded = 0;
    back to the other sim_foo routines.  */
 static SIM_DESC gdbsim_desc = 0;
 
+/* This is the ptid we use while we're connected to the simulator.
+   It's value is arbitrary, as the simulator target don't have a
+   notion or processes or threads, but we need something non-null to
+   place in inferior_ptid.  */
+static ptid_t remote_sim_ptid;
+
 static void
 dump_mem (char *buf, int len)
 {
@@ -452,7 +459,8 @@ gdbsim_create_inferior (char *exec_file,
 		     (exec_file ? exec_file : "(NULL)"),
 		     args);
 
-  gdbsim_kill ();
+  if (ptid_equal (inferior_ptid, remote_sim_ptid))
+    gdbsim_kill ();
   remove_breakpoints ();
   init_wait_for_inferior ();
 
@@ -471,7 +479,9 @@ gdbsim_create_inferior (char *exec_file,
     argv = NULL;
   sim_create_inferior (gdbsim_desc, exec_bfd, argv, env);
 
-  inferior_ptid = pid_to_ptid (42);
+  inferior_ptid = remote_sim_ptid;
+  add_thread_silent (inferior_ptid);
+
   target_mark_running (&gdbsim_ops);
   insert_breakpoints ();	/* Needed to get correct instruction in cache */
 
@@ -579,6 +589,8 @@ gdbsim_close (int quitting)
     }
 
   end_callbacks ();
+  if (!ptid_equal (inferior_ptid, null_ptid))
+    delete_thread_silent (inferior_ptid);
   generic_mourn_inferior ();
 }
 
@@ -612,7 +624,7 @@ static int resume_step;
 static void
 gdbsim_resume (ptid_t ptid, int step, enum target_signal siggnal)
 {
-  if (PIDGET (inferior_ptid) != 42)
+  if (!ptid_equal (inferior_ptid, remote_sim_ptid))
     error (_("The program is not being run."));
 
   if (remote_debug)
@@ -815,6 +827,7 @@ gdbsim_mourn_inferior (void)
   if (remote_debug)
     printf_filtered ("gdbsim_mourn_inferior:\n");
 
+  delete_thread_silent (inferior_ptid);
   remove_breakpoints ();
   target_mark_exited (&gdbsim_ops);
   generic_mourn_inferior ();
@@ -849,6 +862,35 @@ simulator_command (char *args, int from_
   registers_changed ();
 }
 
+/* Check to see if a thread is still alive.  */
+
+static int
+gdbsim_thread_alive (ptid_t ptid)
+{
+  if (ptid_equal (ptid, remote_sim_ptid))
+    /* The simulators' task is always alive.  */
+    return 1;
+
+  return 0;
+}
+
+/* Convert a thread ID to a string.  Returns the string in a static
+   buffer.  */
+
+static char *
+gdbsim_pid_to_str (ptid_t ptid)
+{
+  static char buf[64];
+
+  if (ptid_equal (remote_sim_ptid, ptid))
+    {
+      xsnprintf (buf, sizeof buf, "Thread <main>");
+      return buf;
+    }
+
+  return normal_pid_to_str (ptid);
+}
+
 /* Define the target subroutine names */
 
 struct target_ops gdbsim_ops;
@@ -876,6 +918,8 @@ init_gdbsim_ops (void)
   gdbsim_ops.to_create_inferior = gdbsim_create_inferior;
   gdbsim_ops.to_mourn_inferior = gdbsim_mourn_inferior;
   gdbsim_ops.to_stop = gdbsim_stop;
+  gdbsim_ops.to_thread_alive = gdbsim_thread_alive;
+  gdbsim_ops.to_pid_to_str = gdbsim_pid_to_str;
   gdbsim_ops.to_stratum = process_stratum;
   gdbsim_ops.to_has_all_memory = 1;
   gdbsim_ops.to_has_memory = 1;
@@ -897,4 +941,8 @@ _initialize_remote_sim (void)
 
   add_com ("sim", class_obscure, simulator_command,
 	   _("Send a command to the simulator."));
+
+  /* Yes, 42000 is arbitrary.  The only sense out of it, is that it
+     isn't 0.  */
+  remote_sim_ptid = ptid_build (42000, 0, 42000);
 }
Index: src/gdb/Makefile.in
===================================================================
--- src.orig/gdb/Makefile.in	2008-07-03 18:21:37.000000000 +0100
+++ src/gdb/Makefile.in	2008-07-03 18:24:21.000000000 +0100
@@ -2671,7 +2671,7 @@ remote-sim.o: remote-sim.c $(defs_h) $(i
 	$(gdb_string_h) $(terminal_h) $(target_h) $(gdbcore_h) \
 	$(gdb_callback_h) $(gdb_remote_sim_h) $(command_h) \
 	$(regcache_h) $(gdb_assert_h) $(sim_regno_h) $(arch_utils_h) \
-	$(readline_h)
+	$(readline_h) $(gdbthread_h)
 rs6000-nat.o: rs6000-nat.c $(defs_h) $(inferior_h) $(target_h) $(gdbcore_h) \
 	$(xcoffsolib_h) $(symfile_h) $(objfiles_h) $(libbfd_h) $(bfd_h) \
 	$(exceptions_h) $(gdb_stabs_h) $(regcache_h) $(arch_utils_h) \

  reply	other threads:[~2008-07-03 18:04 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-03 15:23 Make monitor targets " Pedro Alves
2008-07-03 18:04 ` Pedro Alves [this message]
2008-07-04 15:00   ` fix load command bug [was : Re: Make remote-sim target always have a thread] Pedro Alves
2008-07-07 19:20     ` Daniel Jacobowitz
2008-07-09 11:18       ` Pedro Alves
2008-07-07 19:15   ` Make remote-sim target always have a thread Daniel Jacobowitz
2008-07-09 10:53     ` [ob] don't skip most of the testsuite... [was: Re: Make remote-sim target always have a thread] Pedro Alves
2008-07-09 12:36       ` Daniel Jacobowitz
2008-07-09 11:11     ` Make remote-sim target always have a thread Pedro Alves
2008-07-09 12:39       ` Daniel Jacobowitz
2008-07-07 19:12 ` Make monitor targets " Daniel Jacobowitz
2008-07-07 19:16   ` Stan Shebs
2008-07-07 19:22     ` Daniel Jacobowitz
2008-07-07 19:51       ` Stan Shebs

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200807031904.20942.pedro@codesourcery.com \
    --to=pedro@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox