Я думал, что вызов функции с помощью модификатора asmlinkage должен вытолкнуть все аргументы в стек, пока я не сбился с толку из следующего в источнике ядра Linux (3.16).вызов конвенции относительно asmlinkage
источник в entry_64.S link
movq %rsp,%rdi
call sync_regs
Определение sync_regs
в arch/x86/kernel/traps.c
:
asmlinkage __visible notrace struct pt_regs *sync_regs(struct pt_regs *eregs)
{
struct pt_regs *regs = task_pt_regs(current);
*regs = *eregs;
return regs;
}
Не следует ли ему необходимо нажать %rdi
/%rsp
в стек?
Ответ/вынос: Благодаря @Jester, ответ я описываю ниже:
- ВНИМАНИЕ! На x86-64, все аргументы в регистрах, так это
- имеет значение только на 32-битное ядро.»[linux src comment]
В 64-битном соглашении о вызовах используются регистры для первых нескольких аргументов. Прочтите abi docs. – Jester
Я думал, что для настройки по умолчанию (wo asmlinkage) ... так что для x_86_64, asmlikage НЕ будет принимать аргумент в стек? ... или asmlinkage только для 32 бит? – Richard