diff --git a/repos/ports/run/noux_bash.run b/repos/ports/run/noux_bash.run index 8791d4310..bf3a3e0a7 100644 --- a/repos/ports/run/noux_bash.run +++ b/repos/ports/run/noux_bash.run @@ -167,7 +167,7 @@ append config { - + diff --git a/repos/ports/src/lib/libc_noux/plugin.cc b/repos/ports/src/lib/libc_noux/plugin.cc index cec8b2562..3256d2b00 100644 --- a/repos/ports/src/lib/libc_noux/plugin.cc +++ b/repos/ports/src/lib/libc_noux/plugin.cc @@ -98,9 +98,8 @@ class Noux_connection */ Genode::Rm_session_capability context_area_rm_session() { - using namespace Genode; - addr_t const addr = Native_config::context_area_virtual_base(); - return _connection.lookup_rm_session(addr); + int on_stack; + return _connection.lookup_rm_session((Genode::addr_t)&on_stack); } Noux::Session *session() { return &_connection; } @@ -518,10 +517,6 @@ extern "C" void fork_trampoline() /* reinitialize noux connection */ construct_at(noux_connection()); - /* reinitialize main-thread object which implies reinit of context area */ - auto context_area_rm = noux_connection()->context_area_rm_session(); - env()->reinit_main_thread(context_area_rm); - /* apply processor state that the forker had when he did the fork */ longjmp(fork_jmp_buf, 1); } @@ -538,6 +533,11 @@ extern "C" pid_t fork(void) /* * We got here via longjmp from 'fork_trampoline'. */ + + /* reinitialize main-thread object which implies reinit of context area */ + auto context_area_rm = noux_connection()->context_area_rm_session(); + Genode::env()->reinit_main_thread(context_area_rm); + return 0; } else {