Index: sid/component/consoles/socketio.cxx =================================================================== RCS file: /cvs/src/src/sid/component/consoles/socketio.cxx,v retrieving revision 1.5 diff -c -p -r1.5 socketio.cxx *** sid/component/consoles/socketio.cxx 4 Mar 2002 20:38:56 -0000 1.5 --- sid/component/consoles/socketio.cxx 22 Mar 2004 18:48:32 -0000 *************** *** 1,7 **** // socketio.cxx - A console that uses a socket to do its I/O. // -*- C++ -*- ! // Copyright (C) 1999, 2000, 2002 Red Hat. // This file is part of SID and is licensed under the GPL. // See the file COPYING.SID for conditions for redistribution. --- 1,7 ---- // socketio.cxx - A console that uses a socket to do its I/O. // -*- C++ -*- ! // Copyright (C) 1999-2002, 2004 Red Hat. // This file is part of SID and is licensed under the GPL. // See the file COPYING.SID for conditions for redistribution. *************** void *** 297,302 **** --- 297,306 ---- socketio::fini_handler (host_int_4) { this->poll_control.cancel (); + + // Flush out any remaining data + if (this->connected_p) + this->poll_transmit (); if (this->connected_p) { Index: sid/component/gdb/gdb.cxx =================================================================== RCS file: /cvs/src/src/sid/component/gdb/gdb.cxx,v retrieving revision 1.10 diff -c -p -r1.10 gdb.cxx *** sid/component/gdb/gdb.cxx 8 May 2002 19:15:30 -0000 1.10 --- sid/component/gdb/gdb.cxx 22 Mar 2004 18:48:32 -0000 *************** *** 1,6 **** // gdb.cxx - GDB stub implementation. -*- C++ -*- ! // Copyright (C) 1999-2002 Red Hat. // This file is part of SID and is licensed under the GPL. // See the file COPYING.SID for conditions for redistribution. --- 1,6 ---- // gdb.cxx - GDB stub implementation. -*- C++ -*- ! // Copyright (C) 1999-2002, 2004 Red Hat. // This file is part of SID and is licensed under the GPL. // See the file COPYING.SID for conditions for redistribution. *************** gdb::deinit_handler (host_int_4) *** 1550,1556 **** { // disconnect if needed if (this->connected_p) ! this->remote_rx_eof_handler (); } --- 1550,1562 ---- { // disconnect if needed if (this->connected_p) ! { ! // shut down target ! target_power (false); ! // signal gdb ! gdbserv_fromtarget_exit (gdbserv, 0); ! this->remote_rx_eof_handler (); ! } } Index: sid/main/dynamic/commonCfg.cxx =================================================================== RCS file: /cvs/src/src/sid/main/dynamic/commonCfg.cxx,v retrieving revision 1.6 diff -c -p -r1.6 commonCfg.cxx *** sid/main/dynamic/commonCfg.cxx 27 Oct 2003 18:55:34 -0000 1.6 --- sid/main/dynamic/commonCfg.cxx 22 Mar 2004 18:48:34 -0000 *************** SessionCfg::SessionCfg (const string nam *** 530,536 **** tcl_bridge (NULL), loader (NULL), verbose (false), ! use_stdio (true) { add_child (host_sched); add_child (sim_sched); --- 530,538 ---- tcl_bridge (NULL), loader (NULL), verbose (false), ! use_stdio (true), ! board_count (0), ! gdb_count (0) { add_child (host_sched); add_child (sim_sched); *************** void SessionCfg::use_tcl_bridge () *** 657,662 **** --- 659,684 ---- init_seq->add_output (7, tcl_bridge, "!event"); } + void SessionCfg::write_config (Writer &w) + { + AggregateCfg::write_config (w); + + // Stop the host scheduler if all of the GDB stubs are stopped + if (gdb_count) + { + assert (host_sched); + Setting (host_sched, "yield-host-time-threshold", + sidutil::make_attribute (gdb_count)).write_to (w); + Setting (host_sched, "yield-host-time?", "0").write_to (w); + } + + // Stop the sim scheduler if any of the GDB stubs are stopped + assert (sim_sched); + Setting (sim_sched, "enable-threshold", + sidutil::make_attribute (board_count)).write_to (w); + Setting (sim_sched, "enabled?", + sidutil::make_attribute (board_count)).write_to (w); + } // LoaderCfg LoaderCfg::~LoaderCfg () {} *************** void BoardCfg::set_gdb (const string por *** 920,925 **** --- 942,948 ---- gdb = new GdbCfg ("gdb", port, cpu, this, sess); add_child (gdb); sess->use_no_stdio (); + sess->add_gdb (); } Index: sid/main/dynamic/commonCfg.h =================================================================== RCS file: /cvs/src/src/sid/main/dynamic/commonCfg.h,v retrieving revision 1.3 diff -c -p -r1.3 commonCfg.h *** sid/main/dynamic/commonCfg.h 21 Oct 2003 21:39:04 -0000 1.3 --- sid/main/dynamic/commonCfg.h 22 Mar 2004 18:48:34 -0000 *************** struct UlogCfg *** 182,187 **** --- 182,188 ---- // you should really only make one of these, with an empty name, // unless you want some crazy multi-session support. + class BoardCfg; class LoaderCfg; struct SessionCfg : *************** struct SessionCfg : *** 214,219 **** --- 215,226 ---- bool use_stdio; void add_ulog_file (const string filename); map ulog_map; + void add_gdb () { ++gdb_count; } + void add_board (ComponentCfg *b) { ++board_count; add_child (b); } + virtual void write_config (Writer &w); + private: + sid::host_int_4 board_count; + sid::host_int_4 gdb_count; }; class CpuCfg : *************** public: *** 277,283 **** virtual ~GprofCfg (); }; - class BoardCfg; class GdbCfg : virtual public AggregateCfg { --- 284,289 ---- Index: sid/main/dynamic/mainDynamic.cxx =================================================================== RCS file: /cvs/src/src/sid/main/dynamic/mainDynamic.cxx,v retrieving revision 1.5 diff -c -p -r1.5 mainDynamic.cxx *** sid/main/dynamic/mainDynamic.cxx 21 Oct 2003 21:39:04 -0000 1.5 --- sid/main/dynamic/mainDynamic.cxx 22 Mar 2004 18:48:34 -0000 *************** main(int argc, char* argv[]) *** 617,623 **** { need_sess (sess); if (curr_board) ! sess->add_child (curr_board); curr_board = NULL; string new_board_type = optstring(); string new_board_name (new_board_type + "-" + --- 617,623 ---- { need_sess (sess); if (curr_board) ! sess->add_board (curr_board); curr_board = NULL; string new_board_type = optstring(); string new_board_name (new_board_type + "-" + *************** main(int argc, char* argv[]) *** 878,884 **** } if (sess && curr_board) ! sess->add_child (curr_board); if (persistent_p) config_items.push_back (make_pair (false, string("set main persistent? true"))); --- 878,884 ---- } if (sess && curr_board) ! sess->add_board (curr_board); if (persistent_p) config_items.push_back (make_pair (false, string("set main persistent? true")));