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