From 7a7c2b0497c5727a38bbb8c89aef67e017c4ea44 Mon Sep 17 00:00:00 2001 From: fche Date: Wed, 3 Oct 2001 17:06:01 +0000 Subject: [PATCH] * support "monitor set COMPONENT ATTRIBUTE VALUE" from gdb. * part 1/2 2001-10-03 Frank Ch. Eigler * gdb.cxx (ctor): Add "cfgroot" relationship. (process_rcmd_hook, process_rcmd): Support "set" Rcmds. * gdb.h: Corresponding changes. --- sid/component/gdb/ChangeLog | 6 ++++++ sid/component/gdb/gdb.cxx | 43 +++++++++++++++++++++++++++++++++++++++++-- sid/component/gdb/gdb.h | 2 ++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/sid/component/gdb/ChangeLog b/sid/component/gdb/ChangeLog index 2cfa2ffb94..3db2bb6f49 100644 --- a/sid/component/gdb/ChangeLog +++ b/sid/component/gdb/ChangeLog @@ -1,3 +1,9 @@ +2001-10-03 Frank Ch. Eigler + + * gdb.cxx (ctor): Add "cfgroot" relationship. + (process_rcmd_hook, process_rcmd): Support "set" Rcmds. + * gdb.h: Corresponding changes. + 2001-08-03 matthew green * gdb.cxx (std::hex, std::setw, std::dec): Use these. diff --git a/sid/component/gdb/gdb.cxx b/sid/component/gdb/gdb.cxx index bd44e682b9..c8acefac82 100644 --- a/sid/component/gdb/gdb.cxx +++ b/sid/component/gdb/gdb.cxx @@ -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 (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 (gdbserv_target_data (gdbserv)); + return g->process_get_gen (); +} + +extern "C" void process_set_args_hook (struct gdbserv *gdbserv) { gdb* g = static_cast (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 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); diff --git a/sid/component/gdb/gdb.h b/sid/component/gdb/gdb.h index f8a537f9ad..892f467f9c 100644 --- a/sid/component/gdb/gdb.h +++ b/sid/component/gdb/gdb.h @@ -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 (); -- 2.11.0