Hi Norman,
just a shot in the dark: Have you called 'Rpc_entrypoint::manage(ds)' for your dataspace object? Or to put the question differently: Is the dataspace capability that you return in 'Io_mem_session_component::dataspace()' valid inside core? If not, you have most likely missed to associate your 'Dataspace_component' object with core's entrypoint.
I had this issue already in the first email where I tried to do exaclty this. I read through it again and my explanation wasn't clear. When I add
_ds_cap = _ds_ep->manage(&_ds);
It fails to build with
In file included from /.../genode/repos/base/include/dataspace/capability.h:17:0, from /.../genode/repos/base/include/dataspace/client.h:17, from /.../genode/repos/base-linux/src/include/linux_dataspace/client.h:17, from /.../genode/repos/base-linux/src/core/io_mem_session_component.cc:15: /.../genode/repos/base/include/base/capability.h: In instantiation of âGenode::Untyped_capability Genode::Capability< <template-parameter-1-1> >::_check_compatibility(const Genode::Capability<FROM_RPC_INTERFACE>&) const [with FROM_RPC_INTERFACE = Genode::Linux_dataspace; RPC_INTERFACE = Genode::Io_mem_dataspace; Genode::Untyped_capability = Genode::Native_capability]â: /.../genode/repos/base/include/base/capability.h:153:49: required from âGenode::Capability< <template-parameter-1-1> >::Capability(const Genode::Capability<FROM_RPC_INTERFACE>&) [with FROM_RPC_INTERFACE = Genode::Linux_dataspace; RPC_INTERFACE = Genode::Io_mem_dataspace]â /.../genode/repos/base-linux/src/core/io_mem_session_component.cc:72:34: required from here /.../genode/repos/base/include/base/capability.h:134:24: error: cannot convert âGenode::Linux_dataspace*â to âGenode::Io_mem_dataspace*â in initialization RPC_INTERFACE *to = from;
I tried to circumvent this by trying different casts but I could not find an appropriate solution (fooling the compiler with typedefs is not one). When you said that opening the file and adding the file descriptor was enough I misinterpret that I don't need to call manage.
Could you point me to a branch where I can have look at the code and reproduce the problem?
I have a state on [1] that contains a test `run/io_mem` which tests that behaviour. I also have added a check to [2] so `attach` does not segfault but throws an `Invalid_dataspace` exception. In io_mem_session_component.cc I have already added (but commented out) the line to call manage which does not build yet.
Thanks for your help and regards, Johannes
[1]: https://github.com/jklmnn/genode/tree/ac59709d4af406125454180e5453f30184505a... [2]: https://github.com/jklmnn/genode/blob/ac59709d4af406125454180e5453f30184505a... [3]: https://github.com/jklmnn/genode/blob/ac59709d4af406125454180e5453f30184505a...