Thanks for the answer. Actually this is what I am trying to understand. ENTRY(vector_swi) 345 sub sp, sp, #S_FRAME_SIZE 346 stmia sp, {r0 - r12} @ Calling r0 - r12 347 ARM( add r8, sp, #S_PC ) 348 ARM( stmdb r8, {sp, lr}^ ) @ Calling sp, lr 349 THUMB( mov r8, sp ) 350 THUMB( store_user_sp_lr r8, r10, S_SP ) @ calling sp, lr 351 mrs r8, spsr @ called from non-FIQ mode, so ok. 352 str lr, [sp, #S_PC] @ Save calling PC 353 str r8, [sp, #S_PSR] @ Save CPSR 354 str r0, [sp, #S_OLD_R0] In this case after the line number 348(if its in arm mode),will the kernel stack have the contents r0-r12,sp,lr in this order or r0-r12,lr,sp this one. Beccause I believe stmdb r8, {sp, lr}^ will push the sp first then lr. In that case sp and lr will be interchanged in struct pt_regs. Please correct me if I am wrong. On Wed, Feb 15, 2012 at 9:34 PM, Surenkumar Nihalani <suren@gatech.edu> wrote:
Hi, On Feb 15, 2012, at 11:30 PM, subin gangadharan wrote:
Hi ,
I am trying to understand how system call is implmented in linux for arm.And I am not that familiar with arm assembly.
Could any body please help me to understand what exactly this ^ does in this instruction stmdb r8,{sp,lr}^
-- With Regards Subin Gangadharan
I am not afraid and I am also not afraid of being afraid.
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Example: LDFMD sp!, {r0-r12, pc}^ - The ^ qualifier specifies that the CPSR is restored from the SPSR. It must be used only from a privileged mode.
-- With Regards Subin Gangadharan I am not afraid and I am also not afraid of being afraid.