• Andrew Morton's avatar
    [PATCH] ppc cond_syscall fix · efe067fa
    Andrew Morton authored
    From: Matt Mackall <mpm@selenic.com>
    
    Experimenting with trying to use cond_syscall for a few arch-specific
    syscalls, I discovered that it can't actually be used outside the file
    in which sys_ni_syscall is declared because the assembler doesn't feel
    obliged to output the symbol in that case:
    
    weak.c:
    
    #define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
    cond_syscall(sys_foo);
    
    $ nm weak.o
             U sys_ni_syscall
    
    One arch (PPC) is apparently trying to use cond_syscall this way
    anyway, though it's probably never been actually tested as the above
    test was done on a PPC.
    
    After trying a bunch of tricks to get it to work nicely, I decided
    there are basically two alternatives: make weak versions of
    sys_ni_syscall wherever they're wanted or put the arch-specific
    cond_syscalls in kernel/sys.c where sys_ni_syscall is defined.
    
    The former approach is a bit crufty and doesn't actually do the right
    thing in practice as you'll get multiple copies of sys_ni_syscall in
    your final image.
    
    The latter introduces some slight arch-pollution in sys.c, but as
    arch-specific cond_syscalls aren't all that frequent, it should be
    pretty minor. So here's a patch to move the current offender to sys.c:
    efe067fa
sys.c 32.9 KB