This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: gdbserver, NPTL pthreads and PEEKUSER based targets
- From: Daniel Jacobowitz <drow at false dot org>
- To: Daniel THOMPSON <daniel dot thompson at st dot com>
- Cc: gdb at sources dot redhat dot com
- Date: Thu, 31 Mar 2005 10:50:58 -0500
- Subject: Re: gdbserver, NPTL pthreads and PEEKUSER based targets
- References: <424C1A88.3000701@st.com>
On Thu, Mar 31, 2005 at 04:43:04PM +0100, Daniel THOMPSON wrote:
> Hi folks
>
> I am trying to port gdbserver to work on NPTL kernels on an architecture
> that fetchs registers using PTRACE_PEEKUSER rather than PTRACE_GETREGS
> (in my specific case the SH4).
>
> I have written a hacky but working implementation of ps_lgetregs(). This
> is sufficient to get through he shared library loading without spitting
> out invalid data packets and works well enough for the threads_db code
> to correctly identify the root thread triplet (pid, lwp, tid).
You should be able to provide gregset information even if ptrace can't
fetch them; the ps_lgetregs implementation uses the same machinery, but
it doesn't require the ptrace support.
> Unfortunately the gdbserver bails out inside pthread_create() with an
> SIGTRAP signal.
That will be an unrelated problem. It sounds like you may need a
reinsert_addr method.
> The other oddity I noted is that where the x86 does a
> PTRACE_ATTACH to LWP pid+4 inside pthread_create(), the SH4 is attaching
> to LWP pid+1 which does not seem right as this would not be the LWP of
> the spawned thread.
Why wouldn't it be?
--
Daniel Jacobowitz
CodeSourcery, LLC