What is asmlinkage ?

anish singh anish198519851985 at gmail.com
Fri Jan 4 05:29:21 EST 2013


On Fri, Jan 4, 2013 at 3:41 PM, Rajat Sharma <fs.rajat at gmail.com> wrote:
>> Is this correct for all architectures?
>
> I guess not, asmlinkage is undefined for arm, so I assume this mechanism is
> not there for arm.
then how do they do it?
>
>
>
> On Fri, Jan 4, 2013 at 2:24 PM, 卜弋天 <buyit at live.cn> wrote:
>>
>>
>>
>> 在 2013-1-4,15:38,"Rajat Sharma" <fs.rajat at gmail.com> 写道:
>>
>> > So with asmlinkage we request compiler to put args on stack. What is
>> > advantage of this to start_kernel or in general to other functions ?
>>
>> See its about implementation ease and little of performance too. Assuming
>> the default model of keeping arguments in registers is used. lets say
>> arguments are assumed to be in registers R1, R2, R3, R4, R5, R6 and beyond
>> that in stack. Since system call number is a transparent argument which is
>> chopped off when calling the actual kernel handler and if R1 had the system
>> call number, then you have to shift all register values and stack arguments
>> too.
>>
>>    Is this correct for all architectures?
>>
>>    As I remembered, ARM uses SWI instruction to implement the system call,
>> it will pass system call number by register R7, and use normal register
>> R0~R3 to pass parameters.
>>
>>
>>
>> Now consider that all arguments are pushed on stack (as enforced by
>> asmlinkage), you have all function argument in the beginning of the stack
>> and the system call number on top of the stack. you just need to pop out
>> stack top to remove system call number from function argument.
>>
>> You might argue that why not always keep system call number on stack top
>> and use registers for function arguments? But thats part of the compiler ABI
>> and if you had fewer arguments lets say 2 only and used up R1 and R2 only,
>> you may not jump to stack top directly for storing system call as its turn
>> for R3 as argument.
>>
>> So, isn't it simpler implementation with everything on stack?
>>
>> -Rajat
>>
>>
>> On Fri, Jan 4, 2013 at 12:13 PM, Rahul Bedarkar <rpal143 at gmail.com> wrote:
>>>
>>> Thanks. So with asmlinkage we request compiler to put args on stack. What
>>> is advantage of this to start_kernel or in general to other functions ?
>>>
>>> Regards,
>>> Rahul
>>>
>>>
>>> On Thu, Jan 3, 2013 at 9:34 PM, Mulyadi Santosa
>>> <mulyadi.santosa at gmail.com> wrote:
>>>>
>>>> On Thu, Jan 3, 2013 at 7:40 PM, Rahul Bedarkar <rpal143 at gmail.com>
>>>> wrote:
>>>> > Hi,
>>>> >
>>>> > I was searching for asmlinkage and found that it is already explained
>>>> > at
>>>> > http://kernelnewbies.org/FAQ/asmlinkage
>>>> >
>>>> > But I didn't get this. Can someone tell me about it in brief ?
>>>>
>>>> the point is, parameters which is usually passed via stack, is passed
>>>> using different way.
>>>>
>>>> A good example is system call.... they are passed using registers IIRC
>>>>
>>>>
>>>> --
>>>> regards,
>>>>
>>>> Mulyadi Santosa
>>>> Freelance Linux trainer and consultant
>>>>
>>>> blog: the-hydra.blogspot.com
>>>> training: mulyaditraining.blogspot.com
>>>
>>>
>>>
>>> _______________________________________________
>>> Kernelnewbies mailing list
>>> Kernelnewbies at kernelnewbies.org
>>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>>>
>>
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>



More information about the Kernelnewbies mailing list