Skip to content
  • Jan Kiszka's avatar
    cobalt/syscall: Account for different syscall argument marshaling · d1fe9293
    Jan Kiszka authored
    
    
    I-pipe makes sure that arguments of compat calls are ordered just like
    native calls. Dovetail does not. But it is better to use the kernel's
    syscall_get_arguments for retrieving the arguments anyway. Introduce
    pipeline_get_syscall_args to abstract that difference.
    
    Xenomai/ARM syscalls have an unconventional argument marshalling, with
    ARM_ORIG_r0 containing the Xenomai syscall number (ORed with
    __COBALT_SYSCALL_BIT), followed by the first actual argument to the
    syscall in ARM_r1.
    
    For this reason, using syscall_get_arguments() to collect the syscall
    parameters won't yield the expected result, with regs[0] matching
    __xn_reg_sys(regs) instead of __xn_reg_arg1(regs).
    
    Allow Dovetail-enabled architectures to override the generic
    implementation of pipeline_get_syscall_args(), provide a working one
    for ARM.
    
    Signed-off-by: default avatarJan Kiszka <jan.kiszka@siemens.com>
    [Philippe: add special handling of ARM]
    Signed-off-by: default avatarPhilippe Gerum <rpm@xenomai.org>
    d1fe9293