Skip to content
  • Ingo Molnar's avatar
    symbols, stacktrace: look up init symbols after module symbols · 4a44bac1
    Ingo Molnar authored
    Impact: fix incomplete stacktraces
    
    I noticed such weird stacktrace entries in lockdep dumps:
    
    [    0.285956] {HARDIRQ-ON-W} state was registered at:
    [    0.285956]   [<ffffffff802bce90>] mark_irqflags+0xbe/0x125
    [    0.285956]   [<ffffffff802bf2fd>] __lock_acquire+0x674/0x82d
    [    0.285956]   [<ffffffff802bf5b2>] lock_acquire+0xfc/0x128
    [    0.285956]   [<ffffffff8135b636>] rt_spin_lock+0xc8/0xd0
    [    0.285956]   [<ffffffffffffffff>] 0xffffffffffffffff
    
    The stacktrace entry is cut off after rt_spin_lock.
    
    After much debugging i found out that stacktrace entries that
    belong to init symbols dont get printed out, due to commit:
    
      a2da4052
    
    : module: Don't report discarded init pages as kernel text.
    
    The reason is this check added to core_kernel_text():
    
    -       if (addr >= (unsigned long)_sinittext &&
    +       if (system_state == SYSTEM_BOOTING &&
    +           addr >= (unsigned long)_sinittext &&
                addr <= (unsigned long)_einittext)
                    return 1;
    
    This will discard inittext symbols even though their symbol table
    is still present and even though stacktraces done while the system
    was booting up might still be relevant.
    
    To not reintroduce the (not well-specified) bug addressed in that
    commit, first do a module symbols lookup, then a final init-symbols
    lookup.
    
    This will work fine on architectures that have separate address
    spaces for modules (such as x86) - and should not crash any other
    architectures either.
    
    Acked-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    LKML-Reference: <new-discussion>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    4a44bac1