This patch unifies the Native_capability classes for the different kernel
platforms by introducing an appropriate template, and eliminating naming
differences. Please refer issue #145.
To give the platform developer more freedom in how the Native_capability
class is internally implemented (e.g. turning it into a smart-pointer),
this patch removes the memcpy operation, when transfering the parent-capability
to a new process from the generic code, and let the implementation of the
platform-specific Native_capability decide how the transfer has to be done.
Please refer to issue #144.
Introduce a factory-, and dereference method for local capabilities. These are
capabilities that reference objects of services, which are known to be used
protection-domain internally only. To support the new Capability class methods
a protected constructor and accessor to the local object's pointer is needed
in the platform's capability base-classes. For further discussion details please
refer issue #139.
The kernel distinguishes local from global IDs by looking at the lowest
6 bits of the thread ID (i.e., in 'L4_ThreadControl'). If those bits are
zero, the ID is interpreted as a local ID. Because those zero bits
overlap with the version bits of global IDs, this invariant could be
violated once the version of a global ID reaches 64. In this case,
'L4_ThreadControl' will return an error on the attempt to create a new
PD. To prevent this from happening, we always set the lowest bit to 1.