在 2013-1-11,11:16,"Peter Teoh" <htmldevelo...@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 <anish198519851...@gmail.com> > wrote: >> On Fri, Jan 4, 2013 at 3:41 PM, Rajat Sharma <fs.ra...@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, 卜弋天 <bu...@live.cn> wrote: >> >> >> >> >> >> >> >> 在 2013-1-4,15:38,"Rajat Sharma" <fs.ra...@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 <rpal...@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.sant...@gmail.com> wrote: >> >>>> >> >>>> On Thu, Jan 3, 2013 at 7:40 PM, Rahul Bedarkar <rpal...@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@kernelnewbies.org >> >>> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies >> >>> >> >> >> >> _______________________________________________ >> >> 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 >> > >> >> _______________________________________________ >> Kernelnewbies mailing list >> Kernelnewbies@kernelnewbies.org >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > > > > -- > Regards, > Peter Teoh > _______________________________________________ > 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
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies