Hello Johannes,
On Thu, Jan 25, 2018 at 11:25:20AM +0100, Johannes Kliemann wrote:
_ds_cap = _ds_ep->manage(&_ds);
Looking at the generic implementation we learn that it also needs a cast after the manage
base/src/core/io_mem_session_component.cc:87: _ds_cap = static_cap_cast<Io_mem_dataspace>(_ds_ep->manage(&_ds));
For testing I adapted this to the current inheritance state in base-linux, which then compiles
base-linux/src/core/io_mem_session_component.cc:72: _ds_cap = static_cap_cast<Io_mem_dataspace>(static_cap_cast<Dataspace>(_ds_ep->manage(&_ds)));
So, the implementation currently prevents to provide Io_mem_dataspace as easy as Dataspace because there's no hook to tell the generic parts that a Dataspace is in fact a Linux_dataspace because Io_mem_dataspace directly inherits Dataspace. Sounds twisted, but that's the reason in my opinion and we need to do some refactoring to make the Io_mem-related modules tweakable in this regard.
Regards