From 486e534df0fd43b364f53346431a96a76c5759da Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 21 Jan 2019 10:34:56 +0100 Subject: [PATCH] gdb_monitor: remove use of deprecated APIs Issue #1987 --- repos/ports/run/gdb_monitor.run | 13 +- repos/ports/src/app/gdb_monitor/app_child.h | 142 +++++++++--------- .../ports/src/app/gdb_monitor/child_config.h | 12 +- .../app/gdb_monitor/cpu_session_component.cc | 8 +- .../app/gdb_monitor/cpu_session_component.h | 15 +- .../app/gdb_monitor/cpu_thread_component.cc | 45 +++--- .../app/gdb_monitor/cpu_thread_component.h | 33 ++-- .../app/gdb_monitor/gdbserver/genode-low.cc | 33 ++-- .../app/gdb_monitor/pd_session_component.h | 6 +- .../app/gdb_monitor/ram_session_component.h | 68 --------- .../app/gdb_monitor/region_map_component.cc | 7 +- .../app/gdb_monitor/region_map_component.h | 1 + repos/ports/src/test/gdb_monitor/main.cc | 62 +++----- repos/ports/src/test/gdb_monitor/target.mk | 2 +- 14 files changed, 183 insertions(+), 264 deletions(-) delete mode 100644 repos/ports/src/app/gdb_monitor/ram_session_component.h diff --git a/repos/ports/run/gdb_monitor.run b/repos/ports/run/gdb_monitor.run index 418c8b1b4..cf83e5863 100644 --- a/repos/ports/run/gdb_monitor.run +++ b/repos/ports/run/gdb_monitor.run @@ -230,13 +230,13 @@ puts "\n" puts "----- test: thread info -----" puts "" -send "b Test_thread::entry()\n" +send "b test_thread_start\n" run_genode_until {\(gdb\)} 20 $gdb_id send "c\n" run_genode_until {\(gdb\)} 20 $gdb_id -if {![regexp {Breakpoint 4, Test_thread::entry()} $output]} { +if {![regexp {Breakpoint 4, test_thread_start} $output]} { puts stderr "*** Error: Breakpoint in test thread did not trigger" exit -1 } @@ -245,7 +245,7 @@ send "info threads\n" run_genode_until {\(gdb\)} 20 $gdb_id if {![regexp { 4 Thread 3} $output] || - ![regexp {\* 3 Thread 4 Test_thread::entry} $output] || + ![regexp {\* 3 Thread 4 test_thread_start} $output] || ![regexp { 2 Thread 2} $output] || ![regexp { 1 Thread 1} $output]} { puts stderr "*** Error: Thread info is not as expected" @@ -262,7 +262,7 @@ run_genode_until {\(gdb\)} 30 $gdb_id send "thread 2\n" run_genode_until {\(gdb\)} 20 $gdb_id -if {![regexp {Test_thread::step_func} $output]} { +if {![regexp {test_thread_step} $output]} { puts stderr "*** Error: Step into function didn't result in the expected output" exit -1 } @@ -293,8 +293,9 @@ if {![have_spec arm]} { run_genode_until {\(gdb\)} 20 $gdb_id if {![regexp {Genode::Cancelable_lock::lock\(\)} $output] || - ![regexp {Genode::Thread::join\(\)} $output] || - ![regexp {in main \(\)} $output]} { + ![regexp {Genode::Signal_receiver::block_for_signal\(\)} $output] || + ![regexp {Genode::Entrypoint::_wait_and_dispatch_one_io_signal\(bool\)} $output] || + ![regexp {Libc::Kernel::run\(Libc::Application_code&\)} $output] } { puts stderr "*** Error: Stack trace when in syscall is not as expected" exit -1 diff --git a/repos/ports/src/app/gdb_monitor/app_child.h b/repos/ports/src/app/gdb_monitor/app_child.h index 76074bfcb..8410c53b1 100644 --- a/repos/ports/src/app/gdb_monitor/app_child.h +++ b/repos/ports/src/app/gdb_monitor/app_child.h @@ -40,8 +40,8 @@ namespace Gdb_monitor { class Gdb_monitor::App_child : public Child_policy, public Async_service::Wakeup, public Init::Report_update_trigger, - public Init::Routed_service::Ram_accessor, - public Init::Routed_service::Pd_accessor + public Init::Routed_service::Pd_accessor, + public Init::Routed_service::Ram_accessor { private: @@ -62,27 +62,28 @@ class Gdb_monitor::App_child : public Child_policy, Local_env(Env &genode_env) : genode_env(genode_env) { } - Parent &parent() { return genode_env.parent(); } - Ram_session &ram() { return genode_env.ram(); } - Cpu_session &cpu() { return genode_env.cpu(); } - Region_map &rm() { return genode_env.rm(); } - Pd_session &pd() { return genode_env.pd(); } - Entrypoint &ep() { return local_ep; } - Ram_session_capability ram_session_cap() { return genode_env.ram_session_cap(); } - Cpu_session_capability cpu_session_cap() { return genode_env.cpu_session_cap(); } - Pd_session_capability pd_session_cap() { return genode_env.pd_session_cap(); } - Id_space &id_space() { return genode_env.id_space(); } + Parent &parent() override { return genode_env.parent(); } + Cpu_session &cpu() override { return genode_env.cpu(); } + Region_map &rm() override { return genode_env.rm(); } + Pd_session &pd() override { return genode_env.pd(); } + Entrypoint &ep() override { return local_ep; } + Cpu_session_capability cpu_session_cap() override { return genode_env.cpu_session_cap(); } + Pd_session_capability pd_session_cap() override { return genode_env.pd_session_cap(); } + Id_space &id_space() override { return genode_env.id_space(); } + + Pd_session_capability ram_session_cap() { return pd_session_cap(); } + Pd_session &ram() { return pd(); } Session_capability session(Parent::Service_name const &service_name, Parent::Client::Id id, Parent::Session_args const &session_args, - Affinity const &affinity) + Affinity const &affinity) override { return genode_env.session(service_name, id, session_args, affinity); } - void upgrade(Parent::Client::Id id, Parent::Upgrade_args const &args) + void upgrade(Parent::Client::Id id, Parent::Upgrade_args const &args) override { return genode_env.upgrade(id, args); } - void close(Parent::Client::Id id) { return genode_env.close(id); } + void close(Parent::Client::Id id) override { return genode_env.close(id); } void exec_static_constructors() override { } @@ -120,7 +121,7 @@ class Gdb_monitor::App_child : public Child_policy, Genode_child_resources _genode_child_resources; - Signal_dispatcher _unresolved_page_fault_dispatcher; + Signal_handler _unresolved_page_fault_handler; Dataspace_pool _managed_ds_map; @@ -147,7 +148,7 @@ class Gdb_monitor::App_child : public Child_policy, Child *_child; - void _dispatch_unresolved_page_fault(unsigned) + void _handle_unresolved_page_fault() { _genode_child_resources.cpu_session_component().handle_unresolved_page_fault(); } @@ -177,30 +178,63 @@ class Gdb_monitor::App_child : public Child_policy, void trigger_report_update() override { } void trigger_immediate_report_update() override { } - /** - * Init::Routed_service::Ram_accessor interface - */ - Ram_session &ram() override { return _child->ram(); } - Ram_session_capability ram_cap() const override { return _child->ram_session_cap(); } - /** * Init::Routed_service::Pd_accessor interface */ Pd_session &pd() override { return _child->pd(); } Pd_session_capability pd_cap() const override { return _child->pd_session_cap(); } + /** + * Init::Routed_service::Ram_accessor interface + */ + Pd_session &ram() override { return _child->pd(); } + Pd_session_capability ram_cap() const override { return _child->pd_session_cap(); } + + Service &_matching_service(Service::Name const &service_name, + Session_label const &label) + { + Service *service = nullptr; + + /* check for config file request */ + if ((service = _config_policy.resolve_session_request_with_label(service_name, label))) + return *service; + + /* check for "session_requests" ROM request */ + if ((service_name == Genode::Rom_session::service_name()) && + (label.last_element() == Genode::Session_requester::rom_name())) + return _session_requester.service(); + + if (service_name == "CPU") + return _cpu_service; + + if (service_name == "PD") + return _pd_service; + + if (service_name == "ROM") + return _rom_service; + + service = _find_service(_parent_services, service_name); + if (!service) + service = new (_alloc) Parent_service(_parent_services, _env, service_name); + + if (!service) + throw Service_denied(); + + return *service; + } + public: /** * Constructor */ - App_child(Env &env, - Allocator &alloc, - char const *unique_name, - Ram_quota ram_quota, - Cap_quota cap_quota, - Signal_receiver &signal_receiver, - Xml_node target_node) + App_child(Env &env, + Allocator &alloc, + char const *unique_name, + Ram_quota ram_quota, + Cap_quota cap_quota, + Entrypoint &signal_ep, + Xml_node target_node) : _env(env), _alloc(alloc), @@ -209,15 +243,14 @@ class Gdb_monitor::App_child : public Child_policy, _ram_quota(ram_quota), _cap_quota(cap_quota), _child_config(_env.ram(), _rm, target_node), _config_policy("config", _child_config.dataspace(), &_env.ep().rpc_ep()), - _unresolved_page_fault_dispatcher(signal_receiver, - *this, - &App_child::_dispatch_unresolved_page_fault), + _unresolved_page_fault_handler(signal_ep, *this, + &App_child::_handle_unresolved_page_fault), _cpu_factory(_env, _env.ep().rpc_ep(), _alloc, _pd.core_pd_cap(), - signal_receiver, &_genode_child_resources), + signal_ep, &_genode_child_resources), _rom_factory(_env, _env.ep().rpc_ep(), _alloc) { _genode_child_resources.region_map_component(&_pd.region_map()); - _pd.region_map().fault_handler(_unresolved_page_fault_dispatcher); + _pd.region_map().fault_handler(_unresolved_page_fault_handler); } ~App_child() @@ -267,38 +300,12 @@ class Gdb_monitor::App_child : public Child_policy, }); } - Service &resolve_session_request(Service::Name const &service_name, - Session_state::Args const &args) override + Route resolve_session_request(Service::Name const &service_name, + Session_label const &label) override { - Service *service = nullptr; - - /* check for config file request */ - if ((service = _config_policy.resolve_session_request(service_name.string(), args.string()))) - return *service; - - /* check for "session_requests" ROM request */ - Genode::Session_label const label(Genode::label_from_args(args.string())); - if ((service_name == Genode::Rom_session::service_name()) && - (label.last_element() == Genode::Session_requester::rom_name())) - return _session_requester.service(); - - if (service_name == "CPU") - return _cpu_service; - - if (service_name == "PD") - return _pd_service; - - if (service_name == "ROM") - return _rom_service; - - service = _find_service(_parent_services, service_name); - if (!service) - service = new (_alloc) Parent_service(_parent_services, _env, service_name); - - if (!service) - throw Service_denied(); - - return *service; + return Route { .service = _matching_service(service_name, label), + .label = label, + .diag = Session::Diag() }; } void announce_service(Service::Name const &service_name) override @@ -310,8 +317,7 @@ class Gdb_monitor::App_child : public Child_policy, new (_alloc) Init::Routed_service(_child_services, "target", - *this, - *this, + *this, *this, _session_requester.id_space(), _child->session_factory(), service_name, diff --git a/repos/ports/src/app/gdb_monitor/child_config.h b/repos/ports/src/app/gdb_monitor/child_config.h index 73cc9e3c9..bfea871f5 100644 --- a/repos/ports/src/app/gdb_monitor/child_config.h +++ b/repos/ports/src/app/gdb_monitor/child_config.h @@ -18,7 +18,7 @@ #include #include -#include +#include namespace Init { class Child_config; } @@ -27,7 +27,7 @@ class Init::Child_config { private: - Genode::Ram_session &_ram; + Genode::Ram_allocator &_ram; typedef Genode::String<64> Rom_name; Rom_name const _rom_name; @@ -51,7 +51,7 @@ class Init::Child_config */ Genode::Ram_dataspace_capability _ram_ds_from_start_node(Genode::Xml_node start, - Genode::Ram_session &ram, Genode::Region_map &rm) + Genode::Ram_allocator &ram, Genode::Region_map &rm) { /* * If the start node contains a 'config' entry, we copy this entry @@ -75,8 +75,8 @@ class Init::Child_config */ Genode::Attached_dataspace attached(rm, ram_ds); - Genode::memcpy(attached.local_addr(), - config.addr(), config.size()); + config.with_raw_node([&] (char const *start, size_t length) { + Genode::memcpy(attached.local_addr(), start, length); }); attached.local_addr()[config.size()] = 0; @@ -105,7 +105,7 @@ class Init::Child_config * If the start node contains a 'filename' entry, we only keep the * information about the ROM module name. */ - Child_config(Genode::Ram_session &ram, Genode::Region_map &local_rm, + Child_config(Genode::Ram_allocator &ram, Genode::Region_map &local_rm, Genode::Xml_node start) : _ram(ram), diff --git a/repos/ports/src/app/gdb_monitor/cpu_session_component.cc b/repos/ports/src/app/gdb_monitor/cpu_session_component.cc index 7486f560b..5c3d2edb3 100644 --- a/repos/ports/src/app/gdb_monitor/cpu_session_component.cc +++ b/repos/ports/src/app/gdb_monitor/cpu_session_component.cc @@ -43,9 +43,9 @@ Rpc_entrypoint &Cpu_session_component::thread_ep() } -Signal_receiver &Cpu_session_component::exception_signal_receiver() +Entrypoint &Cpu_session_component::signal_ep() { - return _exception_signal_receiver; + return _signal_ep; } @@ -306,7 +306,7 @@ Cpu_session_component::Cpu_session_component(Env &env, Rpc_entrypoint &ep, Allocator &md_alloc, Pd_session_capability core_pd, - Signal_receiver &exception_signal_receiver, + Entrypoint &signal_ep, const char *args, Affinity const &affinity) : _env(env), @@ -314,7 +314,7 @@ Cpu_session_component::Cpu_session_component(Env &env, _md_alloc(md_alloc), _core_pd(core_pd), _parent_cpu_session(env.session(_id_space_element.id(), args, affinity)), - _exception_signal_receiver(exception_signal_receiver), + _signal_ep(signal_ep), _native_cpu_cap(_setup_native_cpu()) { _ep.manage(this); diff --git a/repos/ports/src/app/gdb_monitor/cpu_session_component.h b/repos/ports/src/app/gdb_monitor/cpu_session_component.h index b7d24850c..a74b802d1 100644 --- a/repos/ports/src/app/gdb_monitor/cpu_session_component.h +++ b/repos/ports/src/app/gdb_monitor/cpu_session_component.h @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -59,7 +58,7 @@ class Gdb_monitor::Cpu_session_component : public Rpc_object Pd_session_capability _core_pd; Cpu_session_client _parent_cpu_session; - Signal_receiver &_exception_signal_receiver; + Entrypoint &_signal_ep; Append_list _thread_list; @@ -80,7 +79,7 @@ class Gdb_monitor::Cpu_session_component : public Rpc_object Rpc_entrypoint &ep, Allocator &md_alloc, Pd_session_capability core_pd, - Signal_receiver &exception_signal_receiver, + Entrypoint &signal_ep, const char *args, Affinity const &affinity); @@ -91,7 +90,7 @@ class Gdb_monitor::Cpu_session_component : public Rpc_object Cpu_session &parent_cpu_session(); Rpc_entrypoint &thread_ep(); - Signal_receiver &exception_signal_receiver(); + Entrypoint &signal_ep(); Thread_capability thread_cap(unsigned long lwpid); unsigned long lwpid(Thread_capability thread_cap); Cpu_thread_component *lookup_cpu_thread(unsigned long lwpid); @@ -137,7 +136,7 @@ class Gdb_monitor::Local_cpu_factory : public Cpu_service::Factory Allocator &_md_alloc; Pd_session_capability _core_pd; - Signal_receiver &_signal_receiver; + Entrypoint &_signal_ep; Genode_child_resources *_genode_child_resources; @@ -147,12 +146,12 @@ class Gdb_monitor::Local_cpu_factory : public Cpu_service::Factory Rpc_entrypoint &ep, Allocator &md_alloc, Pd_session_capability core_pd, - Signal_receiver &signal_receiver, + Entrypoint &signal_ep, Genode_child_resources *genode_child_resources) : _env(env), _ep(ep), _md_alloc(md_alloc), _core_pd(core_pd), - _signal_receiver(signal_receiver), + _signal_ep(signal_ep), _genode_child_resources(genode_child_resources) { } @@ -168,7 +167,7 @@ class Gdb_monitor::Local_cpu_factory : public Cpu_service::Factory _ep, _md_alloc, _core_pd, - _signal_receiver, + _signal_ep, args.string(), affinity); _genode_child_resources->cpu_session_component(cpu_session_component); diff --git a/repos/ports/src/app/gdb_monitor/cpu_thread_component.cc b/repos/ports/src/app/gdb_monitor/cpu_thread_component.cc index b9c007d84..83e521159 100644 --- a/repos/ports/src/app/gdb_monitor/cpu_thread_component.cc +++ b/repos/ports/src/app/gdb_monitor/cpu_thread_component.cc @@ -42,13 +42,13 @@ bool Cpu_thread_component::_set_breakpoint_at_first_instruction(addr_t ip) if (genode_read_memory(_breakpoint_ip, _original_instructions, breakpoint_len) != 0) { - PWRN("%s: could not read memory at thread start address", __PRETTY_FUNCTION__); + warning(__PRETTY_FUNCTION__, ": could not read memory at thread start address"); return false; } if (genode_write_memory(_breakpoint_ip, breakpoint_data, breakpoint_len) != 0) { - PWRN("%s: could not set breakpoint at thread start address", __PRETTY_FUNCTION__); + warning(__PRETTY_FUNCTION__, ": could not set breakpoint at thread start address"); return false; } @@ -60,23 +60,23 @@ void Cpu_thread_component::_remove_breakpoint_at_first_instruction() { if (genode_write_memory(_breakpoint_ip, _original_instructions, breakpoint_len) != 0) - PWRN("%s: could not remove breakpoint at thread start address", __PRETTY_FUNCTION__); + warning(__PRETTY_FUNCTION__, ": could not remove breakpoint at thread start address"); } -void Cpu_thread_component::_dispatch_exception(unsigned) +void Cpu_thread_component::_handle_exception() { deliver_signal(SIGTRAP); } -void Cpu_thread_component::_dispatch_sigstop(unsigned) +void Cpu_thread_component::_handle_sigstop() { deliver_signal(SIGSTOP); } -void Cpu_thread_component::_dispatch_sigint(unsigned) +void Cpu_thread_component::_handle_sigint() { deliver_signal(SIGINT); } @@ -88,25 +88,20 @@ Cpu_thread_component::Cpu_thread_component(Cpu_session_component &cpu_session_ Affinity::Location affinity, Cpu_session::Weight weight, addr_t utcb) -: _cpu_session_component(cpu_session_component), - _parent_cpu_thread( - _cpu_session_component.parent_cpu_session().create_thread(pd, - name, - affinity, - weight, - utcb)), - _exception_dispatcher( - _cpu_session_component.exception_signal_receiver(), - *this, - &Cpu_thread_component::_dispatch_exception), - _sigstop_dispatcher( - _cpu_session_component.exception_signal_receiver(), - *this, - &Cpu_thread_component::_dispatch_sigstop), - _sigint_dispatcher( - _cpu_session_component.exception_signal_receiver(), - *this, - &Cpu_thread_component::_dispatch_sigint) +: + _cpu_session_component(cpu_session_component), + _parent_cpu_thread( + _cpu_session_component.parent_cpu_session().create_thread(pd, + name, + affinity, + weight, + utcb)), + _exception_handler(_cpu_session_component.signal_ep(), *this, + &Cpu_thread_component::_handle_exception), + _sigstop_handler(_cpu_session_component.signal_ep(), *this, + &Cpu_thread_component::_handle_sigstop), + _sigint_handler(_cpu_session_component.signal_ep(), *this, + &Cpu_thread_component::_handle_sigint) { _cpu_session_component.thread_ep().manage(this); diff --git a/repos/ports/src/app/gdb_monitor/cpu_thread_component.h b/repos/ports/src/app/gdb_monitor/cpu_thread_component.h index 9db269821..ce5f1b1dd 100644 --- a/repos/ports/src/app/gdb_monitor/cpu_thread_component.h +++ b/repos/ports/src/app/gdb_monitor/cpu_thread_component.h @@ -42,16 +42,16 @@ class Gdb_monitor::Cpu_thread_component : public Rpc_object, /* * SIGTRAP, SIGSTOP and SIGINT must get delivered to the gdbserver code * in the same order that they were generated. Since these signals are - * generated by different threads, the exception signal receiver is - * used as synchronization point. + * generated by different threads, the signal ep is used as + * synchronization point. */ - Signal_dispatcher _exception_dispatcher; - Signal_dispatcher _sigstop_dispatcher; - Signal_dispatcher _sigint_dispatcher; + Signal_handler _exception_handler; + Signal_handler _sigstop_handler; + Signal_handler _sigint_handler; - int _pipefd[2]; - bool _initial_sigtrap_pending = true; - bool _initial_breakpoint_handled = false; + int _pipefd[2]; + bool _initial_sigtrap_pending = true; + bool _initial_breakpoint_handled = false; /* data for breakpoint at first instruction */ enum { MAX_BREAKPOINT_LEN = 8 }; /* value from mem-break.c */ @@ -61,9 +61,9 @@ class Gdb_monitor::Cpu_thread_component : public Rpc_object, bool _set_breakpoint_at_first_instruction(addr_t ip); void _remove_breakpoint_at_first_instruction(); - void _dispatch_exception(unsigned); - void _dispatch_sigstop(unsigned); - void _dispatch_sigint(unsigned); + void _handle_exception(); + void _handle_sigstop(); + void _handle_sigint(); public: @@ -78,23 +78,26 @@ class Gdb_monitor::Cpu_thread_component : public Rpc_object, Signal_context_capability exception_signal_context_cap() { - return _exception_dispatcher; + return _exception_handler; } Signal_context_capability sigstop_signal_context_cap() { - return _sigstop_dispatcher; + return _sigstop_handler; } Signal_context_capability sigint_signal_context_cap() { - return _sigint_dispatcher; + return _sigint_handler; } Thread_capability thread_cap() { return cap(); } unsigned long lwpid() { return _lwpid; } - Thread_capability parent_thread_cap() { return _parent_cpu_thread; } + Thread_capability parent_thread_cap() + { + return _parent_cpu_thread.rpc_cap(); + } int signal_pipe_read_fd() { return _pipefd[0]; } diff --git a/repos/ports/src/app/gdb_monitor/gdbserver/genode-low.cc b/repos/ports/src/app/gdb_monitor/gdbserver/genode-low.cc index 2eaeef695..c1591e360 100644 --- a/repos/ports/src/app/gdb_monitor/gdbserver/genode-low.cc +++ b/repos/ports/src/app/gdb_monitor/gdbserver/genode-low.cc @@ -20,7 +20,6 @@ #include "app_child.h" #include "cpu_thread_component.h" #include "genode_child_resources.h" -#include "signal_handler_thread.h" /* libc includes */ #include @@ -441,17 +440,23 @@ extern "C" int fork() /* extract target filename from config file */ - static char filename[32] = ""; + typedef String<32> Filename; + Filename filename { }; Genode::Attached_rom_dataspace config { *genode_env, "config" }; + try { - config.xml().sub_node("target").attribute("name").value(filename, sizeof(filename)); + Xml_node const target = config.xml().sub_node("target"); + + if (!target.has_attribute("name")) { + error("missing 'name' attribute of '' sub node"); + return -1; + } + filename = target.attribute_value("name", Filename()); + } catch (Xml_node::Nonexistent_sub_node) { error("missing '' sub node"); return -1; - } catch (Xml_node::Nonexistent_attribute) { - error("missing 'name' attribute of '' sub node"); - return -1; } /* extract target node from config file */ @@ -465,7 +470,7 @@ extern "C" int fork() try { Xml_node preserve_node = config.xml().sub_node("preserve"); if (preserve_node.attribute("name").has_value("RAM")) - preserve_node.attribute("quantum").value(&preserved_ram_quota); + preserve_node.attribute("quantum").value(preserved_ram_quota); else throw Xml_node::Exception(); } catch (...) { @@ -473,7 +478,7 @@ extern "C" int fork() return -1; } - Number_of_bytes ram_quota = genode_env->ram().avail_ram().value - preserved_ram_quota; + Number_of_bytes ram_quota = genode_env->pd().avail_ram().value - preserved_ram_quota; Cap_quota const avail_cap_quota = genode_env->pd().avail_caps(); @@ -490,18 +495,16 @@ extern "C" int fork() static Heap alloc(genode_env->ram(), genode_env->rm()); - static Signal_receiver signal_receiver; - - static Gdb_monitor::Signal_handler_thread - signal_handler_thread(*genode_env, signal_receiver); - signal_handler_thread.start(); + enum { SIGNAL_EP_STACK_SIZE = 2*1024*sizeof(addr_t) }; + static Entrypoint signal_ep { *genode_env, SIGNAL_EP_STACK_SIZE, + "sig_handler", Affinity::Location() }; App_child *child = new (alloc) App_child(*genode_env, alloc, - filename, + filename.string(), Ram_quota{ram_quota}, cap_quota, - signal_receiver, + signal_ep, target_node); _genode_child_resources = child->genode_child_resources(); diff --git a/repos/ports/src/app/gdb_monitor/pd_session_component.h b/repos/ports/src/app/gdb_monitor/pd_session_component.h index fd1fa69e1..97fbf83d7 100644 --- a/repos/ports/src/app/gdb_monitor/pd_session_component.h +++ b/repos/ports/src/app/gdb_monitor/pd_session_component.h @@ -55,9 +55,9 @@ class Gdb_monitor::Pd_session_component : public Rpc_object _ep(ep), _alloc(alloc), _pd(env, binary_name), - _address_space(_ep, _alloc, managed_ds_map, _pd, _pd.address_space()), - _stack_area (_ep, _alloc, managed_ds_map, _pd, _pd.stack_area()), - _linker_area (_ep, _alloc, managed_ds_map, _pd, _pd.linker_area()) + _address_space(_ep, _alloc, managed_ds_map, _pd.rpc_cap(), _pd.address_space()), + _stack_area (_ep, _alloc, managed_ds_map, _pd.rpc_cap(), _pd.stack_area()), + _linker_area (_ep, _alloc, managed_ds_map, _pd.rpc_cap(), _pd.linker_area()) { _ep.manage(this); } diff --git a/repos/ports/src/app/gdb_monitor/ram_session_component.h b/repos/ports/src/app/gdb_monitor/ram_session_component.h deleted file mode 100644 index 152e5f2a6..000000000 --- a/repos/ports/src/app/gdb_monitor/ram_session_component.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * \brief Core-specific instance of the RAM session interface - * \author Norman Feske - * \date 2006-06-19 - */ - -/* - * Copyright (C) 2006-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _RAM_SESSION_COMPONENT_H_ -#define _RAM_SESSION_COMPONENT_H_ - -/* Genode includes */ -#include -#include - -namespace Gdb_monitor -{ - using namespace Genode; - - class Ram_session_component; -} - -class Gdb_monitor::Ram_session_component : public Rpc_object -{ - private: - - Env &_env; - - Parent::Client _parent_client; - - Id_space::Element const _id_space_element - { _parent_client, _env.id_space() }; - - Ram_session_client _parent_ram_session; - - public: - - /** - * Constructor - */ - Ram_session_component(Env &env, const char *args, - Affinity const &affinity); - - /** - * Destructor - */ - ~Ram_session_component(); - - - /*************************** - ** RAM Session interface ** - ***************************/ - - Ram_dataspace_capability alloc(size_t, Cache_attribute) override; - void free(Ram_dataspace_capability) override; - size_t dataspace_size(Ram_dataspace_capability) const override; - void ref_account(Ram_session_capability) override; - void transfer_quota(Ram_session_capability, Ram_quota) override; - Ram_quota ram_quota() const override; - Ram_quota used_ram() const override; -}; - -#endif /* _RAM_SESSION_COMPONENT_H_ */ diff --git a/repos/ports/src/app/gdb_monitor/region_map_component.cc b/repos/ports/src/app/gdb_monitor/region_map_component.cc index f47106327..e6027cff8 100644 --- a/repos/ports/src/app/gdb_monitor/region_map_component.cc +++ b/repos/ports/src/app/gdb_monitor/region_map_component.cc @@ -13,7 +13,6 @@ /* Genode includes */ #include -#include #include #include @@ -59,14 +58,14 @@ Region_map_component::attach(Dataspace_capability ds_cap, size_t size, size_t ds_size = Dataspace_client(ds_cap).size(); if (offset < 0 || (size_t)offset >= ds_size) { - PWRN("offset outside of dataspace"); + warning("offset outside of dataspace"); throw Region_conflict(); } if (size == 0) size = ds_size - offset; else if (size > ds_size - offset) { - PWRN("size bigger than remainder of dataspace"); + warning("size bigger than remainder of dataspace"); throw Region_conflict(); } @@ -88,7 +87,7 @@ void Region_map_component::detach(Region_map::Local_addr local_addr) Lock::Guard lock_guard(_region_map_lock); Region *region = _region_map.first()->find_by_addr(local_addr); if (!region) { - PERR("address not in region map"); + warning("address not in region map"); return; } _region_map.remove(region); diff --git a/repos/ports/src/app/gdb_monitor/region_map_component.h b/repos/ports/src/app/gdb_monitor/region_map_component.h index 61511fd98..e0945e022 100644 --- a/repos/ports/src/app/gdb_monitor/region_map_component.h +++ b/repos/ports/src/app/gdb_monitor/region_map_component.h @@ -17,6 +17,7 @@ /* Genode includes */ #include +#include #include #include diff --git a/repos/ports/src/test/gdb_monitor/main.cc b/repos/ports/src/test/gdb_monitor/main.cc index 05f004935..24edd0e39 100644 --- a/repos/ports/src/test/gdb_monitor/main.cc +++ b/repos/ports/src/test/gdb_monitor/main.cc @@ -5,56 +5,39 @@ */ /* - * Copyright (C) 2011-2017 Genode Labs GmbH + * Copyright (C) 2011-2019 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. */ -/* Genode includes */ -#include -#include -#include - -/* libc includes */ +#include #include + /* a variable to be modified with GDB */ int test_var = 1; -/* a thread to test GDB thread switching support */ -class Test_thread : public Genode::Thread_deprecated<2*4096> + +void test_thread_step() { - public: + /* nothing */ +} - Test_thread() : Thread_deprecated("test") { } - void step_func() - { - /* nothing */ - } +void test_thread_sigsegv() +{ + *(int *)0 = 42; +} - void sigsegv_func() - { - /* - * make sure that the main thread is sleeping in - * Genode::sleep_forever() when the segfault happens - */ - static Timer::Connection timer; - timer.msleep(500); - *(int *)0 = 42; - } +void *test_thread_start(void*) +{ + test_thread_step(); + test_thread_sigsegv(); + return nullptr; +} - void entry() /* set a breakpoint here to test the 'info threads' command */ - { - step_func(); - - sigsegv_func(); - - Genode::sleep_forever(); - } -}; /* * This function returns the current value of 'test_var' + 1 and can be called from @@ -88,16 +71,13 @@ int func1() } -int main(void) +int main() { - Test_thread test_thread; - func1(); - test_thread.start(); - - test_thread.join(); + pthread_t test_thread; + pthread_create(&test_thread, nullptr, test_thread_start, nullptr); + pthread_join(test_thread, nullptr); return 0; } - diff --git a/repos/ports/src/test/gdb_monitor/target.mk b/repos/ports/src/test/gdb_monitor/target.mk index b2a568826..6276efd50 100644 --- a/repos/ports/src/test/gdb_monitor/target.mk +++ b/repos/ports/src/test/gdb_monitor/target.mk @@ -1,6 +1,6 @@ TARGET = test-gdb_monitor SRC_CC = main.cc -LIBS = posix +LIBS = base posix CC_OLEVEL = -O0