base: unify platform.cc between base, base-linux

This is a preparatory step for merging 'init_platform()' with
'bootstrap_component()'.

Issue #4784
This commit is contained in:
Norman Feske 2023-06-21 15:06:42 +02:00
parent 54cc70f9b1
commit 3a8c3dcc2d
15 changed files with 45 additions and 45 deletions

View File

@ -50,7 +50,7 @@ void Thread::_init_platform_thread(size_t, Type type)
}
void Genode::init_thread_bootstrap(Thread_capability main_cap)
void Genode::init_thread_bootstrap(Cpu_session &, Thread_capability main_cap)
{
main_thread_cap(main_cap);
}

View File

@ -122,7 +122,7 @@ void Genode::init_thread_start(Capability<Pd_session> pd_cap)
}
void Genode::init_thread_bootstrap(Thread_capability main_cap)
void Genode::init_thread_bootstrap(Cpu_session &, Thread_capability main_cap)
{
main_thread_cap(main_cap);
}

View File

@ -122,7 +122,7 @@ void Genode::init_thread_start(Capability<Pd_session> pd_cap)
}
void Genode::init_thread_bootstrap(Thread_capability main_cap)
void Genode::init_thread_bootstrap(Cpu_session &, Thread_capability main_cap)
{
main_thread_cap(main_cap);
}

View File

@ -19,6 +19,7 @@
#include <base/heap.h>
/* base-internal includes */
#include <base/internal/globals.h>
#include <base/internal/expanding_cpu_session_client.h>
#include <base/internal/expanding_region_map_client.h>
#include <base/internal/expanding_pd_session_client.h>
@ -35,7 +36,9 @@ struct Genode::Platform
{
Region_map_mmap rm { false };
Local_parent parent;
static Capability<Parent> _obtain_parent_cap();
Local_parent parent { _obtain_parent_cap(), rm, heap };
Pd_session_capability pd_cap =
static_cap_cast<Pd_session>(parent.session_cap(Parent::Env::pd()));
@ -49,15 +52,7 @@ struct Genode::Platform
Heap heap { pd, rm };
Platform(Parent_capability cap) : parent(cap, rm, heap)
{
_attach_stack_area();
}
~Platform()
{
parent.exit(0);
}
Platform() { _attach_stack_area(); }
/**
* Attach stack area to local address space (for non-hybrid components)

View File

@ -26,4 +26,7 @@ void Platform::_attach_stack_area()
pd._address_space.attach_at(pd._stack_area.dataspace(),
stack_area_virtual_base(),
stack_area_virtual_size());
env_stack_area_region_map = &pd._stack_area;
env_stack_area_ram_allocator = &pd;
}

View File

@ -21,7 +21,6 @@
/* base-internal includes */
#include <base/internal/platform.h>
#include <base/internal/native_thread.h>
#include <base/internal/globals.h>
#include <base/internal/parent_socket_handle.h>
#include <base/internal/capability_space_tpl.h>
@ -153,10 +152,10 @@ Env_deprecated *Genode::env_deprecated()
Parent *parent() override { return &_pf.parent; }
Cpu_session *cpu_session() override { return &_pf.cpu; }
Cpu_session_capability cpu_session_cap() override { return _pf.cpu_cap; }
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_cap; }
Pd_session_capability pd_session_cap() override { return _pf.pd.rpc_cap(); }
};
static Impl impl { *_platform_ptr };
@ -165,7 +164,7 @@ Env_deprecated *Genode::env_deprecated()
}
static Parent_capability obtain_parent_cap()
Capability<Parent> Platform::_obtain_parent_cap()
{
long const local_name = get_env_ulong("parent_local_name");
@ -190,27 +189,16 @@ void Genode::init_parent_resource_requests(Genode::Env & env)
void Genode::init_platform()
{
static Platform platform { obtain_parent_cap() };
/* allow use of deprecated_env */
_platform_ptr = &platform;
static Genode::Platform platform;
init_log(platform.parent);
init_rpc_cap_alloc(platform.parent);
init_cap_slab(platform.pd, platform.parent);
init_thread(platform.cpu, platform.rm);
init_thread_start(platform.pd_cap);
init_thread_bootstrap(platform.parent.main_thread_cap());
init_thread_start(platform.pd.rpc_cap());
init_thread_bootstrap(platform.cpu, platform.parent.main_thread_cap());
env_stack_area_region_map = &platform.pd._stack_area;
env_stack_area_ram_allocator = &platform.pd;
/* register TID and PID of the main thread at core */
Linux_native_cpu_client native_cpu(platform.cpu.native_cpu());
native_cpu.thread_id(platform.parent.main_thread_cap(),
lx_getpid(), lx_gettid());
init_rpc_cap_alloc(platform.parent);
_platform_ptr = &platform;
}

View File

@ -190,7 +190,11 @@ void Genode::init_thread_start(Capability<Pd_session> pd_cap)
}
void Genode::init_thread_bootstrap(Thread_capability main_cap)
void Genode::init_thread_bootstrap(Cpu_session &cpu, Thread_capability main_cap)
{
main_thread_cap(main_cap);
/* register TID and PID of the main thread at core */
Linux_native_cpu_client native_cpu(cpu.native_cpu());
native_cpu.thread_id(main_cap, lx_getpid(), lx_gettid());
}

View File

@ -410,7 +410,14 @@ static void *thread_start(void *arg)
void Genode::init_thread(Cpu_session &, Region_map &) { }
void Genode::init_thread_start(Capability<Pd_session>) { }
void Genode::init_thread_bootstrap(Thread_capability) { }
void Genode::init_thread_bootstrap(Cpu_session &cpu, Thread_capability main_cap)
{
/* register TID and PID of the main thread at core */
Linux_native_cpu_client native_cpu(cpu.native_cpu());
native_cpu.thread_id(main_cap, lx_getpid(), lx_gettid());
}
extern "C" void *malloc(::size_t size);

View File

@ -212,7 +212,7 @@ void Genode::init_thread_start(Capability<Pd_session> pd_cap)
}
void Genode::init_thread_bootstrap(Thread_capability main_cap)
void Genode::init_thread_bootstrap(Cpu_session &, Thread_capability main_cap)
{
main_thread_cap(main_cap);
}

View File

@ -95,7 +95,7 @@ void Thread::_init_platform_thread(size_t, Type type)
}
void Genode::init_thread_bootstrap(Thread_capability main_cap)
void Genode::init_thread_bootstrap(Cpu_session &, Thread_capability main_cap)
{
main_thread_cap(main_cap);
}

View File

@ -64,7 +64,7 @@ void Genode::Thread::_init_platform_thread(size_t, Type type)
}
void Genode::init_thread_bootstrap(Thread_capability main_cap)
void Genode::init_thread_bootstrap(Cpu_session &, Thread_capability main_cap)
{
main_thread_cap(main_cap);
}

View File

@ -40,4 +40,4 @@ void Genode::Thread::_thread_bootstrap()
}
void Genode::init_thread_bootstrap(Thread_capability) { }
void Genode::init_thread_bootstrap(Cpu_session &, Thread_capability) { }

View File

@ -44,7 +44,7 @@ namespace Genode {
void init_heartbeat_monitoring(Env &);
void init_thread(Cpu_session &, Region_map &);
void init_thread_start(Capability<Pd_session>);
void init_thread_bootstrap(Thread_capability);
void init_thread_bootstrap(Cpu_session &, Thread_capability);
void deinit_heartbeat_monitoring();
void exec_static_constructors();

View File

@ -17,6 +17,7 @@
/* base-internal includes */
#include <base/internal/parent_cap.h>
#include <base/internal/globals.h>
#include <base/internal/attached_stack_area.h>
#include <base/internal/expanding_cpu_session_client.h>
#include <base/internal/expanding_pd_session_client.h>
@ -45,6 +46,12 @@ struct Genode::Platform : Noncopyable
parent, pd.rpc_cap(), pd.address_space(), Parent::Env::pd() };
Attached_stack_area stack_area { parent, pd.rpc_cap() };
Platform()
{
env_stack_area_ram_allocator = &pd;
env_stack_area_region_map = &stack_area;
}
};
#endif /* _INCLUDE__BASE__INTERNAL__PLATFORM_H_ */

View File

@ -14,7 +14,6 @@
#include <deprecated/env.h>
#include <base/internal/platform.h>
#include <base/internal/globals.h>
#include <base/connection.h>
#include <base/service.h>
@ -70,10 +69,7 @@ void Genode::init_platform()
init_cap_slab(platform.pd, platform.parent);
init_thread(platform.cpu, platform.rm);
init_thread_start(platform.pd.rpc_cap());
init_thread_bootstrap(platform.parent.main_thread_cap());
env_stack_area_ram_allocator = &platform.pd;
env_stack_area_region_map = &platform.stack_area;
init_thread_bootstrap(platform.cpu, platform.parent.main_thread_cap());
_platform_ptr = &platform;
}