RE: arm assembly doubt

2012-02-18 Thread 卜弋天

Hi:  the  SWI is used for system APIs such as open, read, write. user mode 
applications call system APIs via SWI, which will change ARM mode from USER to 
SVC. so when vector_swi is called, Linux will do as below: 1. store 
r0~r12, these registers are universal for USR mode SVC mode. 2. store r13 
and r14 of USER mode. Note, SWI is triggered from USER mode, so here Linux 
store USER mode's r13 and r14, rather than SVC's. for your two 
questions:  1. the ^ means to get USER mode registers, rather than current 
mode.
 2. no matter how you arrange registers in opcode {}, stmdb will always 
push lr first, then sp. so after line 348, the stack view is as 
below:lr_usrsp_usrr12...r0   Date: Thu, 16 Feb 2012 19:35:17 -0700
 Subject: Re: arm assembly doubt
 From: subingangadha...@gmail.com
 To: su...@gatech.edu
 CC: kernelnewbies@kernelnewbies.org
 
 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 su...@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.
 
 ___
 Kernelnewbies mailing list
 Kernelnewbies@kernelnewbies.org
 http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
  ___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Re: arm assembly doubt

2012-02-16 Thread subin gangadharan
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 su...@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.

___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


Re: arm assembly doubt

2012-02-15 Thread Surenkumar Nihalani
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.


___
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies