Hi Carsten,
This leads to compile errors due to conflicting declarations...
I attached a patch for DICE. Could you check if it fixes this problem?
yes, thank you, the patch fixed the header problem.
The second problem I have regards IPC-calls:
static CORBA_Environment env;
This is wrong. Please use the DICE_DECLARE_ENV macro to declare and properly initialize the CORBA environment: DICE_DECLARE_ENV(env);
thanks again, this solved my pagefault :)
Now the IPCs are working, but I identified another problem, that I am not able to solve:
I have the following interface:
int register([in, size_is(name_len), max_is(MAX_NAME_LEN)] char *name, [in] long name_len, [in] long in1, [out] long *out1, [out] long out2 );
long read ([in] long in1, [in] long in2, [in] long bytes_to_read, [out, max_is(MAX_PAGE_SIZE)] char read_buffer[] );
The server is implemented as an L4Linux-task. I have three clients:
1) Native L4-client
works :)
2) L4Linux application
works aswell
3) L4Linux kernel module
fails... The kernel module registers itself during the __init phase via the "register" function and this function also works. But as soon as I try to execute a "read"-call, I get:
--Unset id on stack (c)----------------------------------IP: 00401e30 [l4lx.cpu0] (10.05) jdb: g 00000505.00000002 failed CLI: 00000010.00000005
--Unset id on stack (c)----------------------------------IP: 00401e30 [l4lx.cpu0] (10.05) jdb: g 0000050500000002 failed STI: 00000010.00000005
The strange thing is, that the DICE-environmnent is set (otherwise the names_query_name() and the register()-method would fail). I even tried to put the env manually on the stack prior calling via: { DICE_DECLARE_ENV(env); result = read(...); } But that didn't help either.
Do you have any idea, what I might be missing? I thought that this might have something to do with the buffer's memory allocation, I even tried the "prealloc_client" flag in the idl-file and I manually forced dice to use my own CORBA_alloc methods using Linux kernels memory allocation:
void *CORBA_alloc(unsigned long size) return vmalloc(size);
void CORBA_free(void *addr) vfree(addr);
Btw.: With which flags do you call gcc (we are talking about C here, right?) and which compiler version are you using?
gcc-4.1.2 gcc-params: -nostdlib -nostdinc -Wall -Werror -DL4API_l4v2 -I [alotofincludes] dice-3.3.0 dice-params: -fforce-corba-alloc -fforce-c-bindings -nostdinc -P-DL4API_l4v2 -P-I/include [...] and some more includes
Thanks again, Marcel