diff --git a/base/include/base/child.h b/base/include/base/child.h index 02038bf8e..95d11029e 100644 --- a/base/include/base/child.h +++ b/base/include/base/child.h @@ -69,7 +69,8 @@ namespace Genode { */ virtual bool announce_service(const char *name, Root_capability root, - Allocator *alloc) + Allocator *alloc, + Server *server) { return false; } /** @@ -296,6 +297,9 @@ namespace Genode { /* child policy */ Child_policy *_policy; + /* server role */ + Server _server; + /** * Session-argument buffer */ @@ -376,7 +380,8 @@ namespace Genode { _entrypoint(entrypoint), _parent_cap(_entrypoint->manage(this)), _process(elf_ds, ram, cpu, rm, _parent_cap, policy->name(), 0), - _policy(policy) + _policy(policy), + _server(ram) { } /** @@ -437,7 +442,7 @@ namespace Genode { { if (!name.is_valid_string()) return; - _policy->announce_service(name.string(), root, heap()); + _policy->announce_service(name.string(), root, heap(), &_server); } Session_capability session(Service_name const &name, Session_args const &args) diff --git a/gems/src/server/d3m/block_service.h b/gems/src/server/d3m/block_service.h index c80427f4c..c0b8e8407 100644 --- a/gems/src/server/d3m/block_service.h +++ b/gems/src/server/d3m/block_service.h @@ -92,7 +92,8 @@ class Iso9660_boot_probe bool announce_service(char const *service_name, Genode::Root_capability root, - Genode::Allocator *alloc) + Genode::Allocator *alloc, + Genode::Server *server) { if (Genode::strcmp(service_name, "ROM") != 0) return false; diff --git a/gems/src/server/d3m/main.cc b/gems/src/server/d3m/main.cc index 374044724..c626c044f 100644 --- a/gems/src/server/d3m/main.cc +++ b/gems/src/server/d3m/main.cc @@ -61,7 +61,8 @@ class Ipxe_policy : public Genode::Slave_policy, public Nic::Provider bool announce_service(const char *service_name, Genode::Root_capability root, - Genode::Allocator *alloc) + Genode::Allocator *alloc, + Genode::Server *server) { if (Genode::strcmp(service_name, "Nic")) return false; @@ -105,7 +106,8 @@ struct Ps2_policy : public Genode::Slave_policy bool announce_service(const char *service_name, Genode::Root_capability root, - Genode::Allocator *alloc) + Genode::Allocator *alloc, + Genode::Server *server) { if (Genode::strcmp(service_name, "Input")) return false; @@ -155,7 +157,8 @@ struct Usb_policy : public Genode::Slave_policy bool announce_service(const char *service_name, Genode::Root_capability root, - Genode::Allocator *alloc) + Genode::Allocator *alloc, + Genode::Server *server) { if (Genode::strcmp(service_name, "Input") == 0) { _input_source_registry_entry.connect(root); @@ -202,7 +205,8 @@ class Atapi_policy : public Genode::Slave_policy bool announce_service(char const *service_name, Genode::Root_capability root, - Genode::Allocator *alloc) + Genode::Allocator *alloc, + Genode::Server *server) { if (Genode::strcmp(service_name, "Block")) return false; diff --git a/os/include/init/child.h b/os/include/init/child.h index 3ee786a8e..e9f465736 100644 --- a/os/include/init/child.h +++ b/os/include/init/child.h @@ -552,7 +552,8 @@ namespace Init { bool announce_service(const char *service_name, Genode::Root_capability root, - Genode::Allocator *alloc) + Genode::Allocator *alloc, + Genode::Server *server) { if (config_verbose) Genode::printf("child \"%s\" announces service \"%s\"\n", diff --git a/os/include/init/child_policy.h b/os/include/init/child_policy.h index d37ac6624..f644efdb8 100644 --- a/os/include/init/child_policy.h +++ b/os/include/init/child_policy.h @@ -309,7 +309,8 @@ namespace Init { bool announce_service(const char *service_name, Genode::Root_capability root, - Genode::Allocator *alloc) + Genode::Allocator *alloc, + Genode::Server *server) { if (_child_services->find(service_name)) { PWRN("%s: service %s is already registered", diff --git a/os/src/drivers/acpi/main.cc b/os/src/drivers/acpi/main.cc index 61f63e8f9..8f3924524 100644 --- a/os/src/drivers/acpi/main.cc +++ b/os/src/drivers/acpi/main.cc @@ -168,7 +168,8 @@ class Pci_policy : public Genode::Slave_policy, public Pci::Provider bool announce_service(const char *service_name, Genode::Root_capability root, - Genode::Allocator *alloc) + Genode::Allocator *alloc, + Genode::Server *server) { /* wait for 'pci_drv' to announce the PCI service */ if (Genode::strcmp(service_name, "PCI")) diff --git a/ports/src/app/gdb_monitor/app_child.h b/ports/src/app/gdb_monitor/app_child.h index 2c411af9c..cf37d64d4 100644 --- a/ports/src/app/gdb_monitor/app_child.h +++ b/ports/src/app/gdb_monitor/app_child.h @@ -307,7 +307,8 @@ namespace Gdb_monitor { bool announce_service(const char *name, Root_capability root, - Allocator *alloc) + Allocator *alloc, + Server *server) { /* create and announce proxy for the child's root interface */ Child_service_root *r = new (alloc)