base: make PD session upgradeable

Ref #1443
This commit is contained in:
Stefan Kalkowski
2015-05-05 08:50:16 +02:00
committed by Christian Helmuth
parent 2d41f13229
commit 73c3a81e0b
38 changed files with 250 additions and 146 deletions

View File

@ -53,21 +53,22 @@ static bool _check_dynamic_elf(Dataspace_capability elf_ds_cap)
Process::Process(Dataspace_capability elf_data_ds_cap,
Pd_session_capability pd_session_cap,
Ram_session_capability ram_session_cap,
Cpu_session_capability cpu_session_cap,
Rm_session_capability rm_session_cap,
Parent_capability parent_cap,
char const *name,
Native_pd_args const *pd_args)
char const *name)
:
_pd(name, pd_args),
_pd_session_client(pd_session_cap),
_cpu_session_client(cpu_session_cap),
_rm_session_client(Rm_session_capability())
{
/* check for dynamic program header */
if (_check_dynamic_elf(elf_data_ds_cap)) {
if (!_dynamic_linker_cap.valid()) {
PERR("Dynamically linked file found, but no dynamic linker binary present");
PERR("Dynamically linked file found, "
"but no dynamic linker binary present");
return;
}
elf_data_ds_cap = _dynamic_linker_cap;
@ -83,7 +84,8 @@ Process::Process(Dataspace_capability elf_data_ds_cap,
enum { WEIGHT = Cpu_session::DEFAULT_WEIGHT };
_thread0_cap = _cpu_session_client.create_thread(WEIGHT, name);
Linux_pd_session_client lx_pd(static_cap_cast<Linux_pd_session>(_pd.cap()));
Linux_pd_session_client
lx_pd(static_cap_cast<Linux_pd_session>(pd_session_cap));
lx_pd.assign_parent(parent_cap);
lx_pd.start(elf_data_ds_cap);