This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: gdb doesn't work very well with dynamic linked binaries
- To: jcownie at etnus dot com
- Subject: Re: gdb doesn't work very well with dynamic linked binaries
- From: Mark Kettenis <kettenis at wins dot uva dot nl>
- Date: Thu, 7 Sep 2000 12:09:50 +0200 (MET DST)
- CC: gdb at sources dot redhat dot com, eliz at is dot elta dot co dot il
- References: <200009070855.EAA00749@albacore>
Date: Thu, 7 Sep 2000 04:55:38 -0400
From: James Cownie <jcownie@etnus.com>
Mark Kettenis wrote :-
I'm not sure whether the debug registers are
per-thread or per-VM-space in Linux. I'll probably need to look into
the kernel source.
To save you the time, they are per-thread, just like all the
other process' registers.
Thanks, that was what I suspected from looking at the code.
They are conceptually saved and restored on process scheduling
events (which for linuxthreads is the same thing as thread
scheduling events, since linuxthreads _are_ processes as far as
the scheduler is concerned).
Yep. This means that getting HW watchpoints working for
multi-threaded processes is a bit difficult, since GDB expects them to
be process-wide. So any HW watchpoints will have to be inserted in
*all* threads, not just one as we do now.
Eli, this probably means that adding the debugging registers to GDB's
register cache isn't a good idea. Something more specialized is
needed, i.e. a native-dependent interface that updates the address and
control register in all threads. This might implicate that keeping
the actual HW watchpoint support a native-only thing is a good idea.
The bug I mentioned previously is exactly that they're getting
cleared by the kernel and then not getting restored on return
to user space, leaving them wrong until the next reschedule :-(
I think I understand the problems now. It basically means that one
cannot reliably watch area's that are somehow used in system calls.
I suspect that Linux isn't the only kernel with this bug. AFAICS
FreeBSD also simply disables any (user-space) watchpoints triggered
from within the kernel. I don't know what the various x86 System V's
(Solaris, SCO Open Server 5) do, but I wouldn't be surprised if it is
broken there too.
Mark