From 7e1a2ac684b94e4ab79306c2e6315dd75310b8ac Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 21 Jun 2023 17:51:04 +0200 Subject: [PATCH] base: remove internal use of 'env_deprecated' Fixes #4784 --- repos/base-hw/src/lib/base/signal_receiver.cc | 32 ++++--- repos/base-linux/src/lib/base/platform.cc | 34 ------- repos/base/include/deprecated/env.h | 91 ------------------- repos/base/lib/symbols/ld | 1 - repos/base/src/core/include/core_env.h | 19 ++-- repos/base/src/core/main.cc | 4 - .../base/src/include/base/internal/globals.h | 1 - repos/base/src/lib/base/component.cc | 31 +------ repos/base/src/lib/base/platform.cc | 34 ------- 9 files changed, 28 insertions(+), 219 deletions(-) delete mode 100644 repos/base/include/deprecated/env.h diff --git a/repos/base-hw/src/lib/base/signal_receiver.cc b/repos/base-hw/src/lib/base/signal_receiver.cc index 55c1e609a7..aa2bb0095e 100644 --- a/repos/base-hw/src/lib/base/signal_receiver.cc +++ b/repos/base-hw/src/lib/base/signal_receiver.cc @@ -28,11 +28,11 @@ using namespace Genode; -static Pd_session *_pd_ptr; -static Pd_session &pd() +static Env *_env_ptr; +static Env &env() { - if (_pd_ptr) - return *_pd_ptr; + if (_env_ptr) + return *_env_ptr; class Missing_init_signal_thread { }; throw Missing_init_signal_thread(); @@ -43,14 +43,16 @@ static Pd_session &pd() * On base-hw, we don't use a signal thread. We mereely save the PD session * pointer of the passed 'env' argument. */ -void Genode::init_signal_thread(Env &env) { _pd_ptr = &env.pd(); } +void Genode::init_signal_thread(Env &env) { _env_ptr = &env; } + + void Genode::destroy_signal_thread() { } void Genode::init_signal_receiver(Pd_session &, Parent &) { } -Signal_receiver::Signal_receiver() : _pd(pd()) +Signal_receiver::Signal_receiver() : _pd(env().pd()) { for (;;) { @@ -58,15 +60,15 @@ Signal_receiver::Signal_receiver() : _pd(pd()) Cap_quota cap_upgrade { 0 }; try { - _cap = pd().alloc_signal_source(); + _cap = env().pd().alloc_signal_source(); break; } catch (Out_of_ram) { ram_upgrade = Ram_quota { 2*1024*sizeof(long) }; } catch (Out_of_caps) { cap_upgrade = Cap_quota { 4 }; } - internal_env().upgrade(Parent::Env::pd(), - String<100>("ram_quota=", ram_upgrade, ", " - "cap_quota=", cap_upgrade).string()); + env().upgrade(Parent::Env::pd(), + String<100>("ram_quota=", ram_upgrade, ", " + "cap_quota=", cap_upgrade).string()); } } @@ -74,7 +76,7 @@ Signal_receiver::Signal_receiver() : _pd(pd()) void Signal_receiver::_platform_destructor() { /* release server resources of receiver */ - pd().free_signal_source(_cap); + env().pd().free_signal_source(_cap); } @@ -112,7 +114,7 @@ Signal_context_capability Signal_receiver::manage(Signal_context * const c) try { /* use signal context as imprint */ - c->_cap = pd().alloc_context(_cap, (unsigned long)c); + c->_cap = env().pd().alloc_context(_cap, (unsigned long)c); c->_receiver = this; _contexts.insert_as_tail(c); return c->_cap; @@ -120,9 +122,9 @@ Signal_context_capability Signal_receiver::manage(Signal_context * const c) catch (Out_of_ram) { ram_upgrade = Ram_quota { 1024*sizeof(long) }; } catch (Out_of_caps) { cap_upgrade = Cap_quota { 4 }; } - internal_env().upgrade(Parent::Env::pd(), - String<100>("ram_quota=", ram_upgrade, ", " - "cap_quota=", cap_upgrade).string()); + env().upgrade(Parent::Env::pd(), + String<100>("ram_quota=", ram_upgrade, ", " + "cap_quota=", cap_upgrade).string()); } } diff --git a/repos/base-linux/src/lib/base/platform.cc b/repos/base-linux/src/lib/base/platform.cc index f5aa741822..3f72a96351 100644 --- a/repos/base-linux/src/lib/base/platform.cc +++ b/repos/base-linux/src/lib/base/platform.cc @@ -24,8 +24,6 @@ #include #include -#include - using namespace Genode; @@ -134,36 +132,6 @@ static unsigned long get_env_ulong(const char *key) } -static Platform *_platform_ptr; - - -Env_deprecated *Genode::env_deprecated() -{ - if (!_platform_ptr) { - error("missing call of init_platform"); - for (;;); - } - - struct Impl : Env_deprecated, Noncopyable - { - Platform &_pf; - - Impl(Platform &pf) : _pf(pf) { } - - Parent *parent() override { return &_pf.parent; } - Cpu_session *cpu_session() override { return &_pf.cpu; } - Cpu_session_capability cpu_session_cap() override { return _pf.cpu.rpc_cap(); } - Region_map *rm_session() override { return &_pf.rm; } - Pd_session *pd_session() override { return &_pf.pd; } - Pd_session_capability pd_session_cap() override { return _pf.pd.rpc_cap(); } - }; - - static Impl impl { *_platform_ptr }; - - return &impl; -} - - Capability Platform::_obtain_parent_cap() { long const local_name = get_env_ulong("parent_local_name"); @@ -196,8 +164,6 @@ Platform &Genode::init_platform() init_exception_handling(platform.pd, platform.rm); init_signal_receiver(platform.pd, platform.parent); - _platform_ptr = &platform; - return platform; } diff --git a/repos/base/include/deprecated/env.h b/repos/base/include/deprecated/env.h deleted file mode 100644 index b96f55cdb9..0000000000 --- a/repos/base/include/deprecated/env.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * \brief Environment of a component - * \author Norman Feske - * \date 2006-07-01 - * - * \deprecated This interface will be removed once all components are - * adjusted to the new API of base/component.h - */ - -/* - * 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 _INCLUDE__DEPRECATED__ENV_H_ -#define _INCLUDE__DEPRECATED__ENV_H_ - -#include -#include -#include -#include -#include -#include -#include - -namespace Genode { - - struct Env_deprecated; - - /** - * Return the interface to the component's environment - * - * \noapi - * \deprecated - */ - extern Env_deprecated *env_deprecated(); - - /** - * Return the interface to the component's environment - * - * \deprecated - */ - static inline Env_deprecated *env() __attribute__((deprecated)); - static inline Env_deprecated *env() - { - return env_deprecated(); - } -} - - -/** - * Component runtime environment - * - * The environment of a Genode component is defined by its parent. The 'Env' - * class allows the component to interact with its environment. It is - * initialized at the startup of the component. - */ -struct Genode::Env_deprecated : Interface -{ - /** - * Communication channel to our parent - */ - virtual Parent *parent() = 0; - - /** - * CPU session of the component - * - * This session is used to create the threads of the component. - */ - virtual Cpu_session *cpu_session() = 0; - virtual Cpu_session_capability cpu_session_cap() = 0; - - /** - * Region-manager session of the component as created by the parent - * - * \deprecated This function exists for API compatibility only. - * The functionality of the former RM service is now - * provided by the 'Region_map' interface. - */ - virtual Region_map *rm_session() = 0; - - /** - * PD session of the component as created by the parent - */ - virtual Pd_session *pd_session() = 0; - virtual Pd_session_capability pd_session_cap() = 0; -}; - -#endif /* _INCLUDE__DEPRECATED__ENV_H_ */ diff --git a/repos/base/lib/symbols/ld b/repos/base/lib/symbols/ld index 48703f93f0..d19a069fb0 100644 --- a/repos/base/lib/symbols/ld +++ b/repos/base/lib/symbols/ld @@ -122,7 +122,6 @@ _ZN6Genode14Signal_contextD0Ev T _ZN6Genode14Signal_contextD1Ev T _ZN6Genode14Signal_contextD2Ev T _ZN6Genode14cache_coherentEmm T -_ZN6Genode14env_deprecatedEv T _ZN6Genode14ipc_reply_waitERKNS_17Native_capabilityENS_18Rpc_exception_codeERNS_11Msgbuf_baseES5_ T _ZN6Genode15Signal_receiver12local_submitENS_6Signal4DataE T _ZN6Genode15Signal_receiver14pending_signalEv T diff --git a/repos/base/src/core/include/core_env.h b/repos/base/src/core/include/core_env.h index 8db02b38a9..a2436f6262 100644 --- a/repos/base/src/core/include/core_env.h +++ b/repos/base/src/core/include/core_env.h @@ -17,7 +17,6 @@ /* Genode includes */ #include -#include /* base-internal includes */ #include @@ -36,7 +35,7 @@ namespace Core { } -class Core::Core_env : public Env_deprecated, Noncopyable +class Core::Core_env : public Noncopyable { private: @@ -87,16 +86,12 @@ class Core::Core_env : public Env_deprecated, Noncopyable Rpc_entrypoint &signal_ep(); - /****************************** - ** Env_deprecated interface ** - ******************************/ - - Parent *parent() override { return nullptr; } - Region_map *rm_session() override { return &_region_map; } - Pd_session *pd_session() override { return &_pd_session; } - Cpu_session *cpu_session() override { ASSERT_NEVER_CALLED; } - Cpu_session_capability cpu_session_cap() override { ASSERT_NEVER_CALLED; } - Pd_session_capability pd_session_cap() override { return _pd_session.cap(); } + Parent *parent() { return nullptr; } + Region_map *rm_session() { return &_region_map; } + Pd_session *pd_session() { return &_pd_session; } + Cpu_session *cpu_session() { ASSERT_NEVER_CALLED; } + Cpu_session_capability cpu_session_cap() { ASSERT_NEVER_CALLED; } + Pd_session_capability pd_session_cap() { return _pd_session.cap(); } }; #endif /* _CORE__INCLUDE__CORE_ENV_H_ */ diff --git a/repos/base/src/core/main.cc b/repos/base/src/core/main.cc index 7b56385acd..f505113fe8 100644 --- a/repos/base/src/core/main.cc +++ b/repos/base/src/core/main.cc @@ -74,10 +74,6 @@ Core_env &Core::core_env() } -Env_deprecated *Genode::env_deprecated() { - return &core_env(); } - - Core::Platform &Core::platform_specific() { static Platform _platform; diff --git a/repos/base/src/include/base/internal/globals.h b/repos/base/src/include/base/internal/globals.h index f2b4b3e648..b01dd407b0 100644 --- a/repos/base/src/include/base/internal/globals.h +++ b/repos/base/src/include/base/internal/globals.h @@ -57,7 +57,6 @@ namespace Genode { void cxx_free_tls(void *thread); Id_space &env_session_id_space(); - Env &internal_env(); void prepare_init_main_thread(); void bootstrap_component(Platform &); diff --git a/repos/base/src/lib/base/component.cc b/repos/base/src/lib/base/component.cc index b1493f8e00..5903126c0b 100644 --- a/repos/base/src/lib/base/component.cc +++ b/repos/base/src/lib/base/component.cc @@ -18,18 +18,11 @@ #include #include #include -#include /* base-internal includes */ #include #include - -/* - * XXX remove this pointer once 'Env_deprecated' is removed - */ -static Genode::Env *env_ptr = nullptr; - namespace Genode { struct Component_env; } using namespace Genode; @@ -86,9 +79,7 @@ struct Genode::Component_env : Env Component_env(Platform &platform, Entrypoint &ep) : _platform(platform), _ep(ep) - { - env_ptr = this; - } + { } Parent &parent() override { return _parent; } Cpu_session &cpu() override { return _cpu; } @@ -222,23 +213,6 @@ struct Genode::Component_env : Env }; -namespace Genode { - - struct Startup; - - extern void bootstrap_component(); - - Env &internal_env() - { - class Env_ptr_not_initialized { }; - if (!env_ptr) - throw Env_ptr_not_initialized(); - - return *env_ptr; - } -} - - size_t Component::stack_size() __attribute__((weak)); size_t Component::stack_size() { return 64*1024; } @@ -259,6 +233,9 @@ void Genode::init_ldso_phdr(Env &) { } * We need to execute the constructor of the main entrypoint from a * class called 'Startup' as 'Startup' is a friend of 'Entrypoint'. */ +namespace Genode { struct Startup; } + + struct Genode::Startup { Component_env env; diff --git a/repos/base/src/lib/base/platform.cc b/repos/base/src/lib/base/platform.cc index 35c01b6fe2..dd7cf1d1c2 100644 --- a/repos/base/src/lib/base/platform.cc +++ b/repos/base/src/lib/base/platform.cc @@ -12,42 +12,10 @@ * under the terms of the GNU Affero General Public License version 3. */ -#include #include -#include -#include using namespace Genode; -static Platform *_platform_ptr; - - -Env_deprecated *Genode::env_deprecated() -{ - if (!_platform_ptr) { - error("missing call of init_platform"); - for (;;); - } - - struct Impl : Env_deprecated, Noncopyable - { - Platform &_pf; - - Impl(Platform &pf) : _pf(pf) { } - - Parent *parent() override { return &_pf.parent; } - Cpu_session *cpu_session() override { return &_pf.cpu; } - Cpu_session_capability cpu_session_cap() override { return _pf.cpu.rpc_cap(); } - Region_map *rm_session() override { return &_pf.rm; } - Pd_session *pd_session() override { return &_pf.pd; } - Pd_session_capability pd_session_cap() override { return _pf.pd.rpc_cap(); } - }; - - static Impl impl { *_platform_ptr }; - - return &impl; -} - void Genode::init_parent_resource_requests(Genode::Env &env) { @@ -68,8 +36,6 @@ Platform &Genode::init_platform() init_thread_bootstrap(platform.cpu, platform.parent.main_thread_cap()); init_signal_receiver(platform.pd, platform.parent); - _platform_ptr = &platform; - return platform; }