L4_SYSCALL_INVOKE is a negative PC value?
Adam Lackorzynski
adam at os.inf.tu-dresden.de
Sat Sep 27 11:21:11 CEST 2014
On Fri Sep 26, 2014 at 07:22:09 +0000, Zachary wrote:
> In cache.h file(..\l4\pkg\l4sys\include\ARCH-arm\cache.h), a piece of code
> is as follows:
>
> l4_cache_op_arm_call(unsigned long op,
> unsigned long start,
> unsigned long end)
> {
> ...
>
> __asm__ __volatile__
> ("@ l4_cache_op_arm_call(start) \n\t"
> "mov lr, pc \n\t"
> "mov pc, %[sc] \n\t"
> "@ l4_cache_op_arm_call(end) \n\t"
> :
> "=r" (_op),
> "=r" (_start),
> "=r" (_end)
> :
> [sc] "i" (L4_SYSCALL_MEM_OP),
> "0" (_op),
> "1" (_start),
> "2" (_end)
> :
> "cc", "memory", "lr"
> );
> }
>
> My question is whether the code means that PC jumps to the address of
> L4_SYSCALL_MEM_OP(actual value is -0x00000010)? If it is true, then it means
> the address is 0xFFFFFFF0 ?
Yes.
> My second question is whether the address 0xFFFFFFF0 corresponds to the
> sys_arm_mem_op in the following definition?
> (..\kernel\fiasco\src\kern\arm\asm_entry.h)
Yes, the syscall table is used to find the function to branch to.
Adam
--
Adam adam at os.inf.tu-dresden.de
Lackorzynski http://os.inf.tu-dresden.de/~adam/
More information about the l4-hackers
mailing list