OSDN Git Service

* support "monitor set COMPONENT ATTRIBUTE VALUE" from gdb.
authorfche <fche>
Wed, 3 Oct 2001 17:06:01 +0000 (17:06 +0000)
committerfche <fche>
Wed, 3 Oct 2001 17:06:01 +0000 (17:06 +0000)
* part 1/2

2001-10-03  Frank Ch. Eigler  <fche@redhat.com>

        * gdb.cxx (ctor): Add "cfgroot" relationship.
        (process_rcmd_hook, process_rcmd): Support "set" Rcmds.
        * gdb.h: Corresponding changes.

sid/component/gdb/ChangeLog
sid/component/gdb/gdb.cxx
sid/component/gdb/gdb.h

index 2cfa2ff..3db2bb6 100644 (file)
@@ -1,3 +1,9 @@
+2001-10-03  Frank Ch. Eigler  <fche@redhat.com>
+
+       * gdb.cxx (ctor): Add "cfgroot" relationship.
+       (process_rcmd_hook, process_rcmd): Support "set" Rcmds.
+       * gdb.h: Corresponding changes.
+
 2001-08-03  matthew green  <mrg@redhat.com>
 
        * gdb.cxx (std::hex, std::setw, std::dec): Use these.
index bd44e68..c8acefa 100644 (file)
@@ -42,10 +42,10 @@ gdbsid_target_attach_hook (struct gdbserv *gdbserv, void *globalstate)
 }
 
 extern "C" void
-process_get_gen_hook (struct gdbserv *gdbserv)
+process_rcmd_hook (struct gdbserv *gdbserv, const char* cmd, int sizeof_cmd)
 {
   gdb* g = static_cast<gdb*> (gdbserv_target_data (gdbserv));
-  return g->process_get_gen ();
+  g->process_rcmd (cmd, sizeof_cmd);
 }
 
 extern "C" void
@@ -56,6 +56,13 @@ process_set_gen_hook (struct gdbserv *gdbserv)
 }
 
 extern "C" void
+process_get_gen_hook (struct gdbserv *gdbserv)
+{
+  gdb* g = static_cast<gdb*> (gdbserv_target_data (gdbserv));
+  return g->process_get_gen ();
+}
+
+extern "C" void
 process_set_args_hook (struct gdbserv *gdbserv)
 {
   gdb* g = static_cast<gdb*> (gdbserv_target_data (gdbserv));
@@ -217,6 +224,8 @@ process_detach_hook (struct gdbserv *gdbserv)
 }
 
 
+
+
 // ----------------------------------------------------------------------------
 // Implementations for base class.
 
@@ -237,6 +246,7 @@ gdb::gdbsid_target_attach (struct gdbserv *gdbserv)
       assert (gdbtarget != 0);
       memset (gdbtarget, 0, sizeof (*gdbtarget)); // XXX: needed?
 
+      gdbtarget->process_rcmd = process_rcmd_hook;
       gdbtarget->process_get_gen = process_get_gen_hook;
       gdbtarget->process_set_gen = process_set_gen_hook;
       gdbtarget->process_set_args = process_set_args_hook;
@@ -287,6 +297,33 @@ gdb::gdbsid_target_attach (struct gdbserv *gdbserv)
 
 
 void
+gdb::process_rcmd (const char *cmd, int sizeof_cmd)
+{
+  string command = string (cmd, sizeof_cmd);
+  vector<string> tokens = sidutil::tokenize (command, " ");
+
+  if (trace_gdbsid)
+    cerr << "process_rcmd " << command << endl;
+
+  if (tokens.size() >= 1 &&
+      tokens[0] == "set" &&
+      this->cfgroot != 0)
+    {
+      // pass command string straight through to cfgroot
+      component::status s = this->cfgroot->set_attribute_value ("config-line!", command);
+      if (s != component::ok)
+       gdbserv_output_string (gdbserv, "E02");
+      else
+       gdbserv_output_string (gdbserv, "OK");
+
+      return;
+    }
+
+  gdbserv_output_string (gdbserv, "E01");
+}
+
+
+void
 gdb::process_get_gen ()
 {
 }
@@ -1179,6 +1216,8 @@ gdb::gdb ():
 
   cpu = 0;
   gloss = 0;
+  cfgroot = 0;
+  add_uni_relation ("cfgroot", & cfgroot);
   add_uni_relation ("cpu", & cpu);
   add_uni_relation ("gloss", & gloss);
   add_multi_relation ("target-schedulers", & target_schedulers);
index f8a537f..892f467 100644 (file)
@@ -96,6 +96,7 @@ private:
   output_pin remote_tx_pin;
 
   // cpu/gloss<->gdb connections
+  component* cfgroot;
   component* cpu;
   component* gloss;
   input_pin cpu_trap_code_pin;
@@ -155,6 +156,7 @@ public:
   void gdbsid_client_write (const unsigned char* ch, unsigned len);
   // gdbserv<->gdb callback hooks
   struct gdbserv_target* gdbsid_target_attach (struct gdbserv *gdbserv);
+  void process_rcmd (const char *cmd, int sizeof_cmd);
   void process_get_gen ();
   void process_set_gen ();
   void process_set_args ();