lkml.org 
[lkml]   [2006]   [Jun]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 1/2] fall back to old-style call trace if no unwinding is possible

    hm, could you please merge this ontop of the stacktrace-output
    beautification patch below that Andrew already has in his post-mm2 tree?
    (or the other way around - whichever you prefer)

    Ingo

    -----------------------------------
    Subject: beautify x86_64 backtraces
    From: Ingo Molnar <mingo@elte.hu>

    make x86_64 stack backtraces human-readable.

    Before:

    sshd S ffff810033d05bf8 0 3119 2816 3121 (NOTLB)
    ffff810033d05bf8 00000000000614d7 ffff810034b230b8 ffff810034b22ee0
    ffffffff8062c900 0000003835024076 0000000034b23680 ffff810034b22ee0
    0000000000000000 ffffffff80502099
    Call Trace:
    [<ffffffff804ffc51>] schedule_timeout+0x22/0xb3
    [<ffffffff804e98a3>] unix_stream_recvmsg+0x274/0x561
    [<ffffffff80497124>] do_sock_read+0x9b/0x9f
    [<ffffffff80497271>] sock_aio_read+0x57/0x67
    [<ffffffff8027976e>] do_sync_read+0xf0/0x12e
    [<ffffffff80279a10>] vfs_read+0xe5/0x17e [<ffffffff8027a505>] sys_read+0x45/0x6e
    [<ffffffff8020946a>] system_call+0x7e/0x83

    After:

    sshd S ffff81003981dbf8 0 2875 2805 2878 (NOTLB)
    ffff81003981dbf8 0000000000001592 ffff81003f5ce3e8 ffff81003f5ce210
    ffff81003ffaa0d0 00000009afd9e025 000000013f5ce9b0 ffff81003f5ce210
    0000000000000000 ffffffff80502049
    Call Trace:
    [<ffffffff804ffc01>] schedule_timeout+0x22/0xb3
    [<ffffffff804e9853>] unix_stream_recvmsg+0x274/0x561
    [<ffffffff804970d4>] do_sock_read+0x9b/0x9f
    [<ffffffff80497221>] sock_aio_read+0x57/0x67
    [<ffffffff8027971e>] do_sync_read+0xf0/0x12e
    [<ffffffff802799c0>] vfs_read+0xe5/0x17e
    [<ffffffff8027a4b5>] sys_read+0x45/0x6e
    [<ffffffff8020946a>] system_call+0x7e/0x83

    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    ---
    arch/x86_64/kernel/process.c | 2 +-
    arch/x86_64/kernel/traps.c | 27 +++++++++++----------------
    arch/x86_64/mm/fault.c | 1 -
    include/asm-x86_64/kdebug.h | 2 +-
    4 files changed, 13 insertions(+), 19 deletions(-)

    Index: linux/arch/x86_64/kernel/process.c
    ===================================================================
    --- linux.orig/arch/x86_64/kernel/process.c
    +++ linux/arch/x86_64/kernel/process.c
    @@ -296,7 +296,7 @@ void __show_regs(struct pt_regs * regs)
    init_utsname()->version);
    printk("RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->rip);
    printk_address(regs->rip);
    - printk("\nRSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss, regs->rsp,
    + printk("RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss, regs->rsp,
    regs->eflags);
    printk("RAX: %016lx RBX: %016lx RCX: %016lx\n",
    regs->rax, regs->rbx, regs->rcx);
    Index: linux/arch/x86_64/kernel/traps.c
    ===================================================================
    --- linux.orig/arch/x86_64/kernel/traps.c
    +++ linux/arch/x86_64/kernel/traps.c
    @@ -110,7 +110,7 @@ static int kstack_depth_to_print = 10;

    #ifdef CONFIG_KALLSYMS
    # include <linux/kallsyms.h>
    -int printk_address(unsigned long address)
    +void printk_address(unsigned long address)
    {
    unsigned long offset = 0, symsize;
    const char *symname;
    @@ -120,17 +120,19 @@ int printk_address(unsigned long address

    symname = kallsyms_lookup(address, &symsize, &offset,
    &modname, namebuf);
    - if (!symname)
    - return printk(" [<%016lx>]", address);
    + if (!symname) {
    + printk(" [<%016lx>]\n", address);
    + return;
    + }
    if (!modname)
    modname = delim = "";
    - return printk(" [<%016lx>] %s%s%s%s+0x%lx/0x%lx",
    + printk(" [<%016lx>] %s%s%s%s+0x%lx/0x%lx\n",
    address, delim, modname, delim, symname, offset, symsize);
    }
    #else
    -int printk_address(unsigned long address)
    +void printk_address(unsigned long address)
    {
    - return printk(" [<%016lx>]", address);
    + printk(" [<%016lx>]\n", address);
    }
    #endif

    @@ -230,15 +232,8 @@ in_exception_stack(unsigned cpu, unsigne

    static void show_trace_unwind(struct unwind_frame_info *info, void *context)
    {
    - int i = 11;
    -
    while (unwind(info) == 0 && UNW_PC(info)) {
    - if (i > 50) {
    - printk("\n ");
    - i = 7;
    - } else
    - i += printk(" ");
    - i += printk_address(UNW_PC(info));
    + printk_address(UNW_PC(info));
    if (arch_unw_user_mode(info))
    break;
    }
    @@ -385,8 +380,8 @@ static void _show_stack(struct task_stru
    break;
    }
    if (i && ((i % 4) == 0))
    - printk("\n ");
    - printk("%016lx ", *stack++);
    + printk("\n");
    + printk(" %016lx", *stack++);
    touch_nmi_watchdog();
    }
    show_trace(tsk, regs, rsp);
    Index: linux/arch/x86_64/mm/fault.c
    ===================================================================
    --- linux.orig/arch/x86_64/mm/fault.c
    +++ linux/arch/x86_64/mm/fault.c
    @@ -569,7 +569,6 @@ no_context:
    printk(KERN_ALERT "Unable to handle kernel paging request");
    printk(" at %016lx RIP: \n" KERN_ALERT,address);
    printk_address(regs->rip);
    - printk("\n");
    dump_pagetable(address);
    tsk->thread.cr2 = address;
    tsk->thread.trap_no = 14;
    Index: linux/include/asm-x86_64/kdebug.h
    ===================================================================
    --- linux.orig/include/asm-x86_64/kdebug.h
    +++ linux/include/asm-x86_64/kdebug.h
    @@ -49,7 +49,7 @@ static inline int notify_die(enum die_va
    return atomic_notifier_call_chain(&die_chain, val, &args);
    }

    -extern int printk_address(unsigned long address);
    +extern void printk_address(unsigned long address);
    extern void die(const char *,struct pt_regs *,long);
    extern void __die(const char *,struct pt_regs *,long);
    extern void show_registers(struct pt_regs *regs);
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-06-02 13:59    [W:0.028 / U:2.688 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site