lkml.org 
[lkml]   [2015]   [Apr]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 116/155] powerpc: Fix sys_call_table declaration to enable syscall tracing
    Date
    From: Romeo Cane <romeo.cane.ext@coriant.com>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    commit 1028ccf560b97adbf272381a61a67e17d44d1054 upstream.

    Declaring sys_call_table as a pointer causes the compiler to generate
    the wrong lookup code in arch_syscall_addr().

    <arch_syscall_addr>:
    lis r9,-16384
    rlwinm r3,r3,2,0,29
    - lwz r11,30640(r9)
    - lwzx r3,r11,r3
    + addi r9,r9,30640
    + lwzx r3,r9,r3
    blr

    The actual sys_call_table symbol, declared in assembler, is an
    array. If we lie about that to the compiler we get the wrong code
    generated, as above.

    This definition seems only to be used by the syscall tracing code in
    kernel/trace/trace_syscalls.c. With this patch I can successfully use
    the syscall tracepoints:

    bash-3815 [002] .... 333.239082: sys_write -> 0x2
    bash-3815 [002] .... 333.239087: sys_dup2(oldfd: a, newfd: 1)
    bash-3815 [002] .... 333.239088: sys_dup2 -> 0x1
    bash-3815 [002] .... 333.239092: sys_fcntl(fd: a, cmd: 1, arg: 0)
    bash-3815 [002] .... 333.239093: sys_fcntl -> 0x1
    bash-3815 [002] .... 333.239094: sys_close(fd: a)
    bash-3815 [002] .... 333.239094: sys_close -> 0x0

    Signed-off-by: Romeo Cane <romeo.cane.ext@coriant.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    arch/powerpc/include/asm/syscall.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h
    index b54b2add07be..528ba9d8eed5 100644
    --- a/arch/powerpc/include/asm/syscall.h
    +++ b/arch/powerpc/include/asm/syscall.h
    @@ -17,7 +17,7 @@

    /* ftrace syscalls requires exporting the sys_call_table */
    #ifdef CONFIG_FTRACE_SYSCALLS
    -extern const unsigned long *sys_call_table;
    +extern const unsigned long sys_call_table[];
    #endif /* CONFIG_FTRACE_SYSCALLS */

    static inline long syscall_get_nr(struct task_struct *task,
    --
    2.3.4


    \
     
     \ /
      Last update: 2015-04-07 15:41    [W:4.100 / U:0.236 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site