• Willy Tarreau's avatar
    x86, ptrace: fix build breakage with gcc 4.7 · 4ed3bb08
    Willy Tarreau authored
    Christoph Biedl reported that 2.6.32 does not build with gcc 4.7 on
    i386 :
    
      CC      arch/x86/kernel/ptrace.o
    arch/x86/kernel/ptrace.c:1472:17: error: conflicting types for 'syscall_trace_enter'
    In file included from /PKGBUILDDIR/arch/x86/include/asm/vm86.h:130:0,
                     from /PKGBUILDDIR/arch/x86/include/asm/processor.h:10,
                     from /PKGBUILDDIR/arch/x86/include/asm/thread_info.h:22,
                     from include/linux/thread_info.h:56,
                     from include/linux/preempt.h:9,
                     from include/linux/spinlock.h:50,
                     from include/linux/seqlock.h:29,
                     from include/linux/time.h:8,
                     from include/linux/timex.h:56,
                     from include/linux/sched.h:56,
                     from arch/x86/kernel/ptrace.c:11:
    /PKGBUILDDIR/arch/x86/include/asm/ptrace.h:145:13: note: previous declaration of 'syscall_trace_enter' was here
    arch/x86/kernel/ptrace.c:1517:17: error: conflicting types for 'syscall_trace_leave'
    In file included from /PKGBUILDDIR/arch/x86/include/asm/vm86.h:130:0,
                     from /PKGBUILDDIR/arch/x86/include/asm/processor.h:10,
                     from /PKGBUILDDIR/arch/x86/include/asm/thread_info.h:22,
                     from include/linux/thread_info.h:56,
                     from include/linux/preempt.h:9,
                     from include/linux/spinlock.h:50,
                     from include/linux/seqlock.h:29,
                     from include/linux/time.h:8,
                     from include/linux/timex.h:56,
                     from include/linux/sched.h:56,
                     from arch/x86/kernel/ptrace.c:11:
    /PKGBUILDDIR/arch/x86/include/asm/ptrace.h:146:13: note: previous declaration of 'syscall_trace_leave' was here
    make[4]: *** [arch/x86/kernel/ptrace.o] Error 1
    make[3]: *** [arch/x86/kernel] Error 2
    make[3]: *** Waiting for unfinished jobs....
    
    He also found that this issue did not appear in more recent kernels since
    this asmregparm disappeared in 3.0-rc1 with commit 1b4ac2a9 that was
    applied after some UM changes that we don't necessarily want in 2.6.32.
    
    Thus, the cleanest fix for older kernels is to make the declaration in
    ptrace.h match the one in ptrace.c by specifying asmregparm on these
    functions. They're only called from asm which explains why it used to
    work despite the inconsistency in the declaration.
    Reported-by: default avatarChristoph Biedl <linux-kernel.bfrz@manchmal.in-ulm.de>
    Tested-by: default avatarChristoph Biedl <linux-kernel.bfrz@manchmal.in-ulm.de>
    Signed-off-by: default avatarWilly Tarreau <w@1wt.eu>
    4ed3bb08
ptrace.h 5.4 KB