mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-25 00:11:07 +00:00
Cleanup of parent-cap handling
This patch alleviates the need for a Native_capability::Dst at the API level. The former use case of this type as argument to Deprecated_env::reinit uses the opaque Native_capability::Raw type instead. The 'Raw' type contains the portion of the capability that is transferred as-is when delegating the capability (i.e., when installing the parent capability into a new component, or when installing a new parent capability into a new forked Noux process). This information can be retrieved via the new Native_capability::raw method. Furthermore, this patch moves the functions for retriving the parent capability to base/internal/parent_cap.h, which is meant to be implemented in platform-specific ways. It replaces the former set of startup/internal/_main_parent_cap.h headers. Issue #1993
This commit is contained in:
parent
f7bdd383e2
commit
d71f0a9606
@ -38,7 +38,6 @@ namespace Genode {
|
||||
|
||||
struct Raw
|
||||
{
|
||||
Dst dst;
|
||||
long local_name;
|
||||
};
|
||||
|
||||
@ -107,6 +106,8 @@ namespace Genode {
|
||||
long local_name() const { return _idx ? _idx->id() : 0; }
|
||||
Dst dst() const { return _idx ? Dst(_idx->kcap()) : Dst(); }
|
||||
bool valid() const { return (_idx != 0) && _idx->valid(); }
|
||||
|
||||
Raw raw() const { return { local_name() }; }
|
||||
};
|
||||
}
|
||||
|
||||
|
50
repos/base-foc/src/include/base/internal/parent_cap.h
Normal file
50
repos/base-foc/src/include/base/internal/parent_cap.h
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* \brief Interface to obtain the parent capability for the component
|
||||
* \author Norman Feske
|
||||
* \date 2013-09-25
|
||||
*
|
||||
* On Fiasco.OC, we transfer merely the 'local_name' part of the capability
|
||||
* via the '_parent_cap' field of the ELF binary.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2006-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
#define _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <parent/capability.h>
|
||||
#include <util/string.h>
|
||||
#include <foc/native_capability.h>
|
||||
|
||||
/* base-internal includes */
|
||||
#include <base/internal/crt0.h>
|
||||
|
||||
|
||||
namespace Genode {
|
||||
|
||||
static inline Parent_capability parent_cap()
|
||||
{
|
||||
unsigned long const local_name = _parent_cap;
|
||||
|
||||
static Cap_index *i = cap_map()->insert(local_name,
|
||||
Fiasco::PARENT_CAP);
|
||||
/*
|
||||
* Update local name after a parent capability got reloaded via
|
||||
* 'Platform_env::reload_parent_cap()'.
|
||||
*/
|
||||
if (i->id() != local_name) {
|
||||
cap_map()->remove(i);
|
||||
i = cap_map()->insert(local_name, Fiasco::PARENT_CAP);
|
||||
}
|
||||
|
||||
return reinterpret_cap_cast<Parent>(Native_capability(i));
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_ */
|
@ -1,49 +0,0 @@
|
||||
/*
|
||||
* \brief Obtain parent capability
|
||||
* \author Norman Feske
|
||||
* \date 2010-01-26
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2010-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
#define _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <base/native_capability.h>
|
||||
#include <foc/native_capability.h>
|
||||
|
||||
/* base-internal includes */
|
||||
#include <base/internal/crt0.h>
|
||||
|
||||
namespace Genode {
|
||||
|
||||
/**
|
||||
* Return constructed parent capability
|
||||
*/
|
||||
Parent_capability parent_cap()
|
||||
{
|
||||
Native_capability::Raw *raw = (Native_capability::Raw *)&_parent_cap;
|
||||
|
||||
static Cap_index *i = cap_map()->insert(raw->local_name,
|
||||
Fiasco::PARENT_CAP);
|
||||
|
||||
/*
|
||||
* Update local name after a parent capability got reloaded via
|
||||
* 'Platform_env::reload_parent_cap()'.
|
||||
*/
|
||||
if (i->id() != raw->local_name) {
|
||||
cap_map()->remove(i);
|
||||
i = cap_map()->insert(raw->local_name, Fiasco::PARENT_CAP);
|
||||
}
|
||||
|
||||
return reinterpret_cap_cast<Parent>(Native_capability(i));
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_ */
|
@ -36,13 +36,7 @@ class Genode::Native_capability
|
||||
|
||||
public:
|
||||
|
||||
struct Raw
|
||||
{
|
||||
Dst dst;
|
||||
|
||||
/* obsolete in base-hw, but still used in generic code path */
|
||||
addr_t local_name;
|
||||
};
|
||||
struct Raw { };
|
||||
|
||||
/**
|
||||
* Create an invalid capability
|
||||
@ -90,6 +84,8 @@ class Genode::Native_capability
|
||||
_inc();
|
||||
return *this;
|
||||
}
|
||||
|
||||
Raw raw() const { return Raw(); }
|
||||
};
|
||||
|
||||
#endif /* _INCLUDE__BASE__NATIVE_CAPABILITY_H_ */
|
||||
|
30
repos/base-hw/src/include/base/internal/parent_cap.h
Normal file
30
repos/base-hw/src/include/base/internal/parent_cap.h
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* \brief Interface to obtain the parent capability for the component
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2015-04-27
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015-2016 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
#define _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <parent/capability.h>
|
||||
|
||||
namespace Hw { extern Genode::Untyped_capability _parent_cap; }
|
||||
|
||||
namespace Genode {
|
||||
|
||||
static inline Parent_capability parent_cap()
|
||||
{
|
||||
return reinterpret_cap_cast<Parent>(Hw::_parent_cap);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_ */
|
@ -1,37 +0,0 @@
|
||||
/*
|
||||
* \brief Obtain parent capability
|
||||
* \author Stefan Kalkowski
|
||||
* \date 2015-04-27
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
#define _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <parent/capability.h>
|
||||
|
||||
/* base-internal includes */
|
||||
#include <base/internal/crt0.h>
|
||||
|
||||
namespace Hw { extern Genode::Untyped_capability _parent_cap; }
|
||||
|
||||
namespace Genode {
|
||||
|
||||
/**
|
||||
* Return constructed parent capability
|
||||
*/
|
||||
Parent_capability parent_cap()
|
||||
{
|
||||
/* assemble parent capability */
|
||||
return reinterpret_cap_cast<Parent>(Hw::_parent_cap);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_ */
|
@ -90,7 +90,7 @@ class Genode::Platform_env_base : public Env_deprecated
|
||||
Pd_session *pd_session() override { return &_local_pd_session; }
|
||||
Pd_session_capability pd_session_cap() override { return _pd_session_cap; }
|
||||
|
||||
void reinit(Native_capability::Dst, long) override;
|
||||
void reinit(Native_capability::Raw) override;
|
||||
void reinit_main_thread(Capability<Region_map> &) override;
|
||||
};
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include <base/internal/platform_env.h>
|
||||
|
||||
|
||||
void Genode::Platform_env_base::reinit(Native_capability::Dst, long) { }
|
||||
void Genode::Platform_env_base::reinit(Native_capability::Raw) { }
|
||||
|
||||
|
||||
void Genode::Platform_env_base::reinit_main_thread(Capability<Region_map> &) { }
|
||||
|
@ -30,16 +30,7 @@ namespace Genode {
|
||||
|
||||
typedef Nova::Obj_crd Dst;
|
||||
|
||||
struct Raw
|
||||
{
|
||||
Dst dst;
|
||||
|
||||
/*
|
||||
* It is obsolete and unused in NOVA, however still used by
|
||||
* generic base part
|
||||
*/
|
||||
addr_t local_name;
|
||||
};
|
||||
struct Raw { };
|
||||
|
||||
private:
|
||||
|
||||
@ -169,6 +160,8 @@ namespace Genode {
|
||||
{
|
||||
return Native_capability();
|
||||
}
|
||||
|
||||
Raw raw() const { return Raw(); }
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* \brief Obtain parent capability
|
||||
* \brief Interface to obtain the parent capability for the component
|
||||
* \author Norman Feske
|
||||
* \author Alexander Boettcher
|
||||
* \date 2010-01-26
|
||||
@ -9,32 +9,29 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2010-2013 Genode Labs GmbH
|
||||
* Copyright (C) 2010-2016 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
#define _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
#ifndef _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
#define _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <util/string.h>
|
||||
#include <parent/capability.h>
|
||||
|
||||
/* NOVA includes */
|
||||
#include <nova/syscalls.h>
|
||||
|
||||
|
||||
namespace Genode {
|
||||
|
||||
/**
|
||||
* Return constructed parent capability
|
||||
*/
|
||||
Parent_capability parent_cap()
|
||||
static inline Parent_capability parent_cap()
|
||||
{
|
||||
/* assemble parent capability */
|
||||
return reinterpret_cap_cast<Parent>(
|
||||
Native_capability(Nova::PT_SEL_PARENT));
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_ */
|
||||
#endif /* _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_ */
|
@ -23,12 +23,10 @@ namespace Genode {
|
||||
public:
|
||||
|
||||
/*
|
||||
* XXX remove dependency in 'process.cc' and 'core_env.h' from
|
||||
* 'Raw', 'Dst', and the 'dst' member.
|
||||
* Platform-specific raw information of the capability that is
|
||||
* transferred as-is when the capability is delegated.
|
||||
*/
|
||||
typedef int Dst;
|
||||
struct Raw { Dst dst = 0; long local_name = 0; };
|
||||
Dst dst() const { return 0; }
|
||||
struct Raw { long v[4]; };
|
||||
|
||||
/**
|
||||
* Forward declaration of the platform-specific internal capability
|
||||
@ -96,6 +94,8 @@ namespace Genode {
|
||||
long local_name() const;
|
||||
|
||||
bool valid() const;
|
||||
|
||||
Raw raw() const { return { { 0, 0, 0, 0 } }; }
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,31 +1,32 @@
|
||||
/*
|
||||
* \brief Obtain parent capability
|
||||
* \brief Interface to obtain the parent capability for the component
|
||||
* \author Norman Feske
|
||||
* \date 2015-05-12
|
||||
*
|
||||
* On seL4, no information is propagated via the '_parent_cap' field of the
|
||||
* ELF image.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2015 Genode Labs GmbH
|
||||
* Copyright (C) 2015-2016 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
#define _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
#ifndef _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
#define _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <util/string.h>
|
||||
#include <parent/capability.h>
|
||||
|
||||
/* base-internal includes */
|
||||
#include <base/internal/capability_space_sel4.h>
|
||||
|
||||
|
||||
namespace Genode {
|
||||
|
||||
/**
|
||||
* Return constructed parent capability
|
||||
*/
|
||||
Parent_capability parent_cap()
|
||||
static inline Parent_capability parent_cap()
|
||||
{
|
||||
Capability_space::Ipc_cap_data const
|
||||
ipc_cap_data(Rpc_obj_key(), INITIAL_SEL_PARENT);
|
||||
@ -36,4 +37,4 @@ namespace Genode {
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_ */
|
||||
#endif /* _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_ */
|
@ -113,6 +113,11 @@ class Genode::Native_capability_tpl
|
||||
* Return capability destination
|
||||
*/
|
||||
Dst dst() const { return _dst; }
|
||||
|
||||
/**
|
||||
* Return raw data representation of the capability
|
||||
*/
|
||||
Raw raw() const { return { _dst, _local_name }; }
|
||||
};
|
||||
|
||||
#endif /* _INCLUDE__BASE__NATIVE_CAPABILITY_TPL_H_ */
|
||||
|
@ -106,7 +106,7 @@ struct Genode::Env_deprecated
|
||||
*
|
||||
* \noapi
|
||||
*/
|
||||
virtual void reinit(Native_capability::Dst, long) = 0;
|
||||
virtual void reinit(Native_capability::Raw) = 0;
|
||||
|
||||
/**
|
||||
* Reinitialize main-thread object
|
||||
|
@ -199,7 +199,7 @@ namespace Genode {
|
||||
return Pd_session_capability();
|
||||
}
|
||||
|
||||
void reinit(Capability<Parent>::Dst, long) override { }
|
||||
void reinit(Capability<Parent>::Raw) override { }
|
||||
|
||||
void reinit_main_thread(Capability<Region_map> &) override { }
|
||||
};
|
||||
|
@ -37,8 +37,9 @@ extern unsigned _stack_high; /* upper bound of intial stack */
|
||||
***************************************************/
|
||||
|
||||
/*
|
||||
* The protection domain creator initializes the information about
|
||||
* the parent capability prior the execution of the main thread.
|
||||
* The protection domain creator initializes the information about the parent
|
||||
* capability prior the execution of the main thread. It corresponds to the
|
||||
* '_parent_cap' symbol defined in 'src/ld/genode.ld'.
|
||||
*/
|
||||
extern unsigned long _parent_cap;
|
||||
|
||||
|
@ -2,6 +2,9 @@
|
||||
* \brief Interface to obtain the parent capability for the component
|
||||
* \author Norman Feske
|
||||
* \date 2013-09-25
|
||||
*
|
||||
* This implementation is used on platforms that rely on global IDs (thread
|
||||
* IDs, global unique object IDs) as capability representation.
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -14,8 +17,22 @@
|
||||
#ifndef _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
#define _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_
|
||||
|
||||
/* Genode includes */
|
||||
#include <parent/capability.h>
|
||||
#include <util/string.h>
|
||||
|
||||
namespace Genode { Parent_capability parent_cap(); }
|
||||
/* base-internal includes */
|
||||
#include <base/internal/crt0.h>
|
||||
|
||||
|
||||
namespace Genode {
|
||||
|
||||
static inline Parent_capability parent_cap()
|
||||
{
|
||||
Parent_capability cap;
|
||||
memcpy(&cap, (void *)&_parent_cap, sizeof(cap));
|
||||
return Parent_capability(cap);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__BASE__INTERNAL__PARENT_CAP_H_ */
|
||||
|
@ -108,7 +108,7 @@ class Genode::Platform_env : public Env_deprecated,
|
||||
/*
|
||||
* Support functions for implementing fork on Noux.
|
||||
*/
|
||||
void reinit(Native_capability::Dst, long) override;
|
||||
void reinit(Native_capability::Raw) override;
|
||||
void reinit_main_thread(Capability<Region_map> &) override;
|
||||
|
||||
|
||||
|
@ -1,36 +0,0 @@
|
||||
/*
|
||||
* \brief Obtain parent capability
|
||||
* \author Norman Feske
|
||||
* \date 2010-01-26
|
||||
*
|
||||
* This implementation is used on platforms that rely on global IDs (thread
|
||||
* IDs, global unique object IDs) as capability representation.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2010-2013 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU General Public License version 2.
|
||||
*/
|
||||
|
||||
#ifndef _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
#define _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_
|
||||
|
||||
/* base-internal includes */
|
||||
#include <base/internal/crt0.h>
|
||||
|
||||
namespace Genode {
|
||||
|
||||
/**
|
||||
* Return constructed parent capability
|
||||
*/
|
||||
Parent_capability parent_cap()
|
||||
{
|
||||
Parent_capability cap;
|
||||
memcpy(&cap, (void *)&_parent_cap, sizeof(cap));
|
||||
return Parent_capability(cap);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _INCLUDE__STARTUP__INTERNAL___MAIN_PARENT_CAP_H_ */
|
@ -19,6 +19,7 @@
|
||||
|
||||
/* base-internal includes */
|
||||
#include <base/internal/elf.h>
|
||||
#include <base/internal/parent_cap.h>
|
||||
|
||||
using namespace Genode;
|
||||
|
||||
@ -123,11 +124,7 @@ Child::Process::Loaded_executable::Loaded_executable(Dataspace_capability elf_ds
|
||||
* data segment
|
||||
*/
|
||||
if (!parent_info) {
|
||||
Native_capability::Raw *raw = (Native_capability::Raw *)ptr;
|
||||
|
||||
raw->dst = parent_cap.dst();
|
||||
raw->local_name = parent_cap.local_name();
|
||||
|
||||
*(Untyped_capability::Raw *)ptr = parent_cap.raw();
|
||||
parent_info = true;
|
||||
}
|
||||
|
||||
|
@ -27,8 +27,7 @@ void reinit_main_thread();
|
||||
namespace Genode { extern bool inhibit_tracing; }
|
||||
|
||||
|
||||
void Genode::Platform_env::reinit(Native_capability::Dst dst,
|
||||
long local_name)
|
||||
void Genode::Platform_env::reinit(Native_capability::Raw raw)
|
||||
{
|
||||
/*
|
||||
* This function is unused during the normal operation of Genode. It is
|
||||
@ -54,9 +53,7 @@ void Genode::Platform_env::reinit(Native_capability::Dst dst,
|
||||
* Patch new parent capability into the original location as specified by
|
||||
* the linker script.
|
||||
*/
|
||||
Native_capability::Raw *raw = (Native_capability::Raw *)(&_parent_cap);
|
||||
raw->dst = dst;
|
||||
raw->local_name = local_name;
|
||||
*(Native_capability::Raw *)(&_parent_cap) = raw;
|
||||
|
||||
/*
|
||||
* Re-initialize 'Platform_env' members
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include <base/component.h>
|
||||
|
||||
/* platform-specific local helper functions */
|
||||
#include <startup/internal/_main_parent_cap.h>
|
||||
#include <base/internal/parent_cap.h>
|
||||
#include <base/internal/crt0.h>
|
||||
|
||||
|
||||
|
29
repos/ports-foc/patches/parent_cap_ld_script.patch
Normal file
29
repos/ports-foc/patches/parent_cap_ld_script.patch
Normal file
@ -0,0 +1,29 @@
|
||||
+++ arch/l4/kernel/arch-arm/vmlinux.lds.S
|
||||
@@ -108,6 +108,12 @@ SECTIONS
|
||||
LONG(0xffffffff);
|
||||
_parent_cap_local_name = .;
|
||||
LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
} : rw
|
||||
|
||||
. = ALIGN(4096);
|
||||
+++ arch/l4/kernel/arch-x86/vmlinux.lds.S
|
||||
@@ -101,6 +101,13 @@ SECTIONS
|
||||
LONG(0xffffffff);
|
||||
_parent_cap_local_name = .;
|
||||
LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
+ LONG(0xffffffff);
|
||||
|
||||
/*
|
||||
* Platform-specific entry for Fiasco.OC.
|
@ -1 +1 @@
|
||||
07d72c264878024efa078d14241f1648172a39de
|
||||
1e6243ccb8f368ed15b7f42c339434e46d0062a9
|
||||
|
@ -4,6 +4,8 @@ DOWNLOADS := l4android.git
|
||||
URL(l4android) := https://github.com/skalk/l4linux.git
|
||||
REV(l4android) := cea6e7ab97a5ad421e53d456dd940893d5a14866
|
||||
DIR(l4android) := src/l4android
|
||||
PATCHES := patches/parent_cap_ld_script.patch
|
||||
PATCH_OPT := -p0 -d src/l4android
|
||||
sym_link := src/l4android/arch/l4/drivers
|
||||
|
||||
default: $(sym_link)
|
||||
|
@ -1 +1 @@
|
||||
64de371ac6ca2e4c117e0d3eb827aa97216d30e7
|
||||
153fac6366d79b8380ccc97a3a7ed099cedb51b2
|
||||
|
@ -4,6 +4,8 @@ DOWNLOADS := l4linux.git
|
||||
URL(l4linux) := https://github.com/skalk/l4linux.git
|
||||
REV(l4linux) := 25aa4a5f25c920e18aa18899e45c71974058d813
|
||||
DIR(l4linux) := src/l4linux
|
||||
PATCHES := patches/parent_cap_ld_script.patch
|
||||
PATCH_OPT := -p0 -d src/l4linux
|
||||
sym_link := src/l4linux/arch/l4/drivers
|
||||
|
||||
default: $(sym_link)
|
||||
|
@ -523,7 +523,7 @@ extern "C" void fork_trampoline()
|
||||
{
|
||||
/* reinitialize environment */
|
||||
using namespace Genode;
|
||||
env()->reinit(new_parent.dst, new_parent.local_name);
|
||||
env()->reinit(new_parent);
|
||||
|
||||
/* reinitialize standard-output connection */
|
||||
stdout_reconnect();
|
||||
|
@ -453,8 +453,7 @@ namespace Noux {
|
||||
void start_forked_main_thread(addr_t ip, addr_t sp, addr_t parent_cap_addr)
|
||||
{
|
||||
/* poke parent_cap_addr into child's address space */
|
||||
Capability<Parent> const &cap = _child.parent_cap();
|
||||
Capability<Parent>::Raw raw = { cap.dst(), cap.local_name() };
|
||||
Capability<Parent>::Raw const raw = _child.parent_cap().raw();
|
||||
|
||||
_pd.poke(parent_cap_addr, &raw, sizeof(raw));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user