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