[Crash-utility] dis command not correct in crash [ ARM only ]

Dave Anderson anderson at redhat.com
Tue Mar 5 13:58:58 UTC 2013



----- Original Message -----
> On Mon, Mar 04, 2013 at 10:17:26AM -0500, Dave Anderson wrote:
> > But in 3.1.1, the "task_rq_lock" function is renamed to
> > "task_rq_lock.isra.123":
> >  
> >  crash> dis task_rq_lock
> >  symbol not found: task_rq_lock
> >  possible alternatives:
> >    c0015c60 (t) task_rq_lock.isra.123
> >  crash>
> > 
> > which is also reflected in the vmlinux file:
> > 
> >  crash> !nm -Bn vmlinux | grep task_rq_lock
> >  c0015c60 t task_rq_lock.isra.123
> >  crash>
> > 
> > I don't know what "isra" means, but it disassembles OK when used
> > like this:
> > 
> >  crash> dis task_rq_lock.isra.123
> >  0xc0015c60 <task_rq_lock.isra.123>:     push    {r11, lr}
> >  0xc0015c64 <task_rq_lock.isra.123+4>:   add     r11, sp, #4
> >  0xc0015c68 <task_rq_lock.isra.123+8>:   mrs     r3, CPSR
> >  0xc0015c6c <task_rq_lock.isra.123+12>:  orr     r2, r3, #128    ;
> >  0x80
> >  0xc0015c70 <task_rq_lock.isra.123+16>:  msr     CPSR_c, r2
> >  0xc0015c74 <task_rq_lock.isra.123+20>:  str     r3, [r0]
> >  0xc0015c78 <task_rq_lock.isra.123+24>:  mov     r0, #1
> >  0xc0015c7c <task_rq_lock.isra.123+28>:  bl      0xc0015ba4
> >  <add_preempt_count>
> >  0xc0015c80 <task_rq_lock.isra.123+32>:  mov     r0, #1
> >  0xc0015c84 <task_rq_lock.isra.123+36>:  bl      0xc0015ba4
> >  <add_preempt_count>
> >  0xc0015c88 <task_rq_lock.isra.123+40>:  ldr     r0, [pc, #0]    ;
> >  0xc0015c90 <task_rq_lock.isra.123+48>
> >  0xc0015c8c <task_rq_lock.isra.123+44>:  pop     {r11, pc}
> >  0xc0015c90 <task_rq_lock.isra.123+48>:  eorsgt  lr, r12, r0, asr
> >  r2
> >  crash>
> > 
> > And interestingly enough, gdb accepts the symbol without the
> > "isra.123",
> > strips it from the text symbol, and it looks like this:
> > 
> >  crash> disass task_rq_lock
> >  Dump of assembler code for function task_rq_lock:
> >     0xc0015c60 <+0>:     push    {r11, lr}
> >     0xc0015c64 <+4>:     add     r11, sp, #4
> >     0xc0015c68 <+8>:     mrs     r3, CPSR
> >     0xc0015c6c <+12>:    orr     r2, r3, #128    ; 0x80
> >     0xc0015c70 <+16>:    msr     CPSR_c, r2
> >     0xc0015c74 <+20>:    str     r3, [r0]
> >     0xc0015c78 <+24>:    mov     r0, #1
> >     0xc0015c7c <+28>:    bl      0xc0015ba4 <add_preempt_count>
> >     0xc0015c80 <+32>:    mov     r0, #1
> >     0xc0015c84 <+36>:    bl      0xc0015ba4 <add_preempt_count>
> >     0xc0015c88 <+40>:    ldr     r0, [pc, #0]    ; 0xc0015c90
> >     <task_rq_lock+48>
> >     0xc0015c8c <+44>:    pop     {r11, pc}
> >     0xc0015c90 <+48>:    eorsgt  lr, r12, r0, asr r2
> >  End of assembler dump.
> >  crash>
> 
> Dave, it looks like those symbols exist in x86_64 kernel images as well. Are
> you able to run 'dis' over some of those symbols on x86_64? I wonder if we
> have more generic problem at hand.

Sure enough -- I never noticed them before.  I'll have to check when
that started happening.  Anyway, thanks for checking and catching that.

I'm thinking that it's probably best that the ".isra..." should be stripped
during the symbol storage phase so that the crash sources have no idea 
that they ever existed with those names.  The module symbol storage code has
always done a similar thing in strip_module_symbol_end(). 

And the gdb module must be doing the same kind of thing, because you can pass
the "stripped" symbol name to gdb, and it knows what it is:

 crash> dis get_sigframe
 symbol not found: get_sigframe
 possible alternatives:
   ffffffff81058090 (t) get_sigframe.isra.1
 crash>

 crash> disass get_sigframe
 Dump of assembler code for function get_sigframe:
    0xffffffff81058090 <+0>:     nopl   0x0(%rax,%rax,1)
    0xffffffff81058095 <+5>:     push   %rbp
    0xffffffff81058096 <+6>:     mov    %rsp,%rbp
    0xffffffff81058099 <+9>:     push   %rbx
    0xffffffff8105809a <+10>:    mov    %rdx,%rbx
    0xffffffff8105809d <+13>:    sub    $0x18,%rsp
 ...  

Anyway, I'll take care of that.  

Thanks again,
  Dave




More information about the Crash-utility mailing list