Segfaults while calling Rpc_methods from client.h

Aditya Kousik adit267.kousik at ...9...
Tue May 12 02:37:58 CEST 2015

Hello Dr. Norman,

I stumbled upon some useful examples in test/ds_ownership and general
search showed me how to pull off shared memory. It's an interesting

What I did:
Ram_dataspace_capability ds = env()->ram_session()->alloc(SIZE);
void* arg = env()->rm_session()->attach(ds);

I returned this ds through a getDataspace() RPC method on the server side
to the invoking client.
I'm able to effectively write bulk data between components. Thank you for
directing me toward this.

I have a couple of spinoff questions though.
1. Initially I tried creating a Ram_connection ram1 and allocated as in the
ds_ownership program

env()->ram_session()->transfer_quota(ram1.cap(), 8*1024);

Then Ram_dataspace_capability ds = ram1.alloc(SIZE); and attached ds to RM
session and sent back ds.
But the client threw a C++ IPC error and called abort().

A) Is this because ram1 was local to the server?

B) Is the transfer quota mechanism is similar to the transfer_quota from
the client during the creation of a session
in the constructor?

2. I'm still trying to get my head around the concept of a capability. I
tried going through the definition of a capability
in base/capability.h, but I seemed to get nowhere. What can a user do with
a capability - mechanisms such as
attach and detach with the help of a capability etc.

I'm sure you've had similar questions asked before. Thank you taking the
time to respond.


On Mon, May 11, 2015 at 2:32 PM, Aditya Kousik <adit267.kousik at ...9...>

> Hello Norman,
> This documentation is quite exquisite, I'm just laying my eyes on it. Are
> there any implementation examples to support the sequence diagrams? They'll
> help map the theory to the implementation.
> Cheers,
> Aditya
> On Mon, May 11, 2015 at 2:02 PM, Norman Feske <
> norman.feske at ...1...> wrote:
>> Hi Aditya,
>> passing non-POD objects such as connected lists, maps, etc. as RPC
>> arguments is not supposed to work. The reason is that a pointer with a
>> meaning in one address space is meaningless in another address space.
>> Please refer to the Section 8.12 of the manual [1] and particularly
>> Section 8.12.2 for more details about the RPC mechanism.
>> To transfer bulk data from one component to another, you may need to
>> manually serialize your information to a shared memory buffer, to be
>> picked up on the receiving side. See section 3.6 for the various
>> approaches of inter-component communication.
>> [1]
>> Cheers
>> Norman
>> On 05/11/2015 10:49 PM, Aditya Kousik wrote:
>> > Hello,
>> >
>> > Calling Rpc_<method>(args, ...) from Session_client causes segfault 11
>> > when I try to pass anything other than a default datatype. I'm trying to
>> > pass an object of std::string, and it prints the string inside the
>> > <method> just fine, but when I make the call<Rpc_method>(st), it breaks.
>> >
>> > I tried working around this by creating a char* pointer instead. Print
>> > inside this method works and the rpc to session_component method also
>> > reaches, but whatever pointer I receive in the session_component is
>> > garbage data. How do I fix the RPC calls?
>> >
>> > Thanks,
>> > Aditya.
>> --
>> Dr.-Ing. Norman Feske
>> Genode Labs
>> ·
>> Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
>> Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth
>> ------------------------------------------------------------------------------
>> One dashboard for servers and applications across Physical-Virtual-Cloud
>> Widest out-of-the-box monitoring support with 50+ applications
>> Performance metrics, stats and reports that give you Actionable Insights
>> Deep dive visibility with transaction tracing using APM Insight.
>> _______________________________________________
>> genode-main mailing list
>> genode-main at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the users mailing list