2006-08-06 07:15:45

by Chuck Ebbert

[permalink] [raw]
Subject: Re: [patch] i386: fix one case of stuck dwarf2 unwinder II

In-Reply-To: <[email protected]>

On Sun, 6 Aug 2006 08:05:06 +0200, Andi Kleen wrote:

> Hmm, actually I applied it but then I had doubts it actually
> works -- I think you don't need _stext but the code before
> the first call in head. Since head.S doesn't do a call
> that's probably start_kernel

But head.S does do a call (on i386 but not x86_64 AFAICT):

| #ifdef CONFIG_SMP
| movb ready, %cl
| movb $1, ready
| cmpb $0,%cl
| je 1f # the first CPU calls start_kernel
| # all other CPUs call initialize_secondary
| call initialize_secondary
| jmp L6
| 1:
| #endif /* CONFIG_SMP */
| call start_kernel
| L6:
| jmp L6 # main should never return here, but
| # just in case, we know what happens.

And the backtraces I saw ended up at L6:

| DWARF2 unwinder stuck at 0xc0100210

System.map on i386 SMP says:

| c0100210 t L6

--
Chuck


2006-08-06 14:05:00

by Andi Kleen

[permalink] [raw]
Subject: Re: [patch] i386: fix one case of stuck dwarf2 unwinder II


> And the backtraces I saw ended up at L6:
>
> | DWARF2 unwinder stuck at 0xc0100210
>
> System.map on i386 SMP says:
>
> | c0100210 t L6


Yes that's the problem. If you check for <= stext/_stext then the unwinder
won't catch the L6 (which is above it) and report a "stuck" again

-Andi