What is asmlinkage ?

卜弋天 buyit at live.cn
Fri Jan 11 03:29:34 EST 2013



在 2013-1-11,11:16,"Peter Teoh" <htmldeveloper at gmail.com> 写道:

> asmlinkage is defined for almost all arch:
> 
> grep asmlinkage arch/arm/*/* and u got the answer.
> 
> It seemed that:
> 
>  http://kernelnewbies.org/FAQ/asmlinkage
> 
> gave the impression that asmlinkage is only for system call, or associated with it.   Not really, nothing to do with system call actually.
> 
> Even though majority (or ALL) of syscall are defined with asmlinkage, but there are many that are not, eg, in arch/arm subdirectory:
> 
> kernel/irq.c:asmlinkage void __exception_irq_entry
> kernel/process.c:asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
> kernel/smp.c:asmlinkage void __cpuinit secondary_start_kernel(void)
> kernel/smp.c:asmlinkage void __exception_irq_entry do_IPI(int ipinr, struct pt_regs *regs)
> 
> just a few examples.   Essentially, it is just declared so that the name, for example, "do_IPI" can be called from assembly, for example in the following pair (arch/arm assumed):
> 
> /kernel/smp.c:
> asmlinkage void __exception_irq_entry do_IPI(int ipinr, struct pt_regs *regs)
> 
> ./include/asm/entry-macro-multi.S:
> 	bne	do_IPI
> 
> More info:
> 
> http://stackoverflow.com/questions/10060168/is-asmlinkage-required-for-a-c-function-to-be-called-from-assembly
> 
> From above, asmlinkage is also NOT the only way......
> 
> 

    The link you provided is obviously specific for X86, rather than ARM.
Rajat mentioned that there is no definition of linkage in arch/arm.  This should be true.

    And as I know, arm use register r7 to pass system call number, and use register r0~r3 to pass parameters. This is used by Google when they implement system call in Android. 
     And for calling C function from assembly code is also platform specific, in ARM, it has fixed standard ABI which defines the details about how assembly code calls C function, you can never ask GCC to compile C function by passing parameters on stack and then assume this function can be called from assembly code which is implemented by other developers who obeys standard ARM ABI.




> On Fri, Jan 4, 2013 at 6:29 PM, anish singh <anish198519851985 at gmail.com> wrote:
>> 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
>> >
>> 
>> _______________________________________________
>> Kernelnewbies mailing list
>> Kernelnewbies at kernelnewbies.org
>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> 
> 
> 
> -- 
> Regards,
> Peter Teoh
> _______________________________________________
> 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/20130111/1c83dd9f/attachment.html 
-------------- next part --------------
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies at kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


More information about the Kernelnewbies mailing list