Re: kgdb for mainline kernel: core-lite [patch 1/3]

From: George Anzinger
Date: Mon Mar 08 2004 - 17:20:58 EST


Amit S. Kale wrote:
On Monday 08 Mar 2004 4:50 pm, Amit S. Kale wrote:

On Monday 08 Mar 2004 4:37 pm, Andrew Morton wrote:

"Amit S. Kale" <amitkale@xxxxxxxxxxxxx> wrote:

On Monday 08 Mar 2004 3:56 pm, Andrew Morton wrote:
> "Amit S. Kale" <amitkale@xxxxxxxxxxxxx> wrote:
> > Here are features that are present only in full kgdb:
> > 1. Thread support (aka info threads)
>
> argh, disaster. I discussed this with Tom a week or so ago when it
> looked like this it was being chopped out and I recall being told
> that the discussion was referring to something else.
>
> Ho-hum, sorry. Can we please put this back in?

Err., well this is one of the particularly dirty parts of kgdb. That's
why it's been kept away. It takes care of correct thread backtraces in
some rare cases.

Let me just make sure we're taking about the same thing here. Are you
saying that with kgdb-lite, `info threads' is completely missing, or does
it just not work correctly with threads (as opposed to heavyweight
processes)?

info threads shows a list of threads. Heavy/light weight processes doesn't
matter. Thread frame shown is incorrect.

I looked at i386 dependent code again. Following code in it is incorrect. I
never noticed it because this code is rarely used in full version of kgdb:

+void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct
task_struct *p)
....
+ gdb_regs[_EBP] = *(int *)p->thread.esp;

We can't guss ebp this way. This line should be removed.

+ gdb_regs[_DS] = __KERNEL_DS;
+ gdb_regs[_ES] = __KERNEL_DS;
+ gdb_regs[_PS] = 0;
+ gdb_regs[_CS] = __KERNEL_CS;
+ gdb_regs[_PC] = p->thread.eip;
+ gdb_regs[_ESP] = p->thread.esp;

This should be gdb_regs[_ESP] = &p->thread.esp


That's not correct it. It should be gdb_regs[_ESP] = p->thread.esp;
Even with these changes I can't get thread listing correctly.

Here is the intrusive piece of code that helps get thread state correctly. Any ideas on cleaning it?

I wonder what version of gdb you are using. What is it that you see?

You really do need a gdb that handles the dwarft2 frames. This is a rather new gdb (I use the CVS version).

-g
~

--
George Anzinger george@xxxxxxxxxx
High-res-timers: http://sourceforge.net/projects/high-res-timers/
Preemption patch: http://www.kernel.org/pub/linux/kernel/people/rml

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/