----- 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