Thread (5 messages) 5 messages, 3 authors, 2012-02-18

arm assembly doubt

From: 卜弋天 <hidden>
Date: 2012-02-18 13:36:17

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: subingangadharan at gmail.com
To: suren at gatech.edu
CC: kernelnewbies at 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 [off-list ref] wrote:
quoted
Hi,
On Feb 15, 2012, at 11:30 PM, subin gangadharan wrote:
quoted
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 at 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 at kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120218/ba921841/attachment.html 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help