This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [patch] gdbserver fails on 32-bit ppc rfs running in a-64 bit 2.6 linux kernel
- From: Daniel Jacobowitz <drow at false dot org>
- To: "Amit S. Kale" <amitkale at linsyssoft dot com>
- Cc: GDB patches <gdb-patches at sources dot redhat dot com>
- Date: Mon, 14 Mar 2005 11:22:52 -0500
- Subject: Re: [patch] gdbserver fails on 32-bit ppc rfs running in a-64 bit 2.6 linux kernel
- References: <200503142137.35799.amitkale@linsyssoft.com>
On Mon, Mar 14, 2005 at 09:37:35PM +0530, Amit S. Kale wrote:
> Hi,
>
> I found that gdbserver fails on a 32-bit ppc rfs running in a 64-bit 2.6 linux
"rfs"? It'd be nice to explain one's acronyms...
> kernel. The thread id's fetched from thread-db library are above 0x7fffffff.
> gdbserver has implicit assumptions that thread id's are "signed integers".
> This is true when running under a 32-bit kernel, but not true here. Attached
> patch fixes this problem by changing the "strtol" that scans the thread-id to
> "strtoul" and by changing the "cont_thread > 0" comparison to "cont_thread !=
> -1".
>
> Is there any likelyhood of this assumption being made in some other places in
> gdbserver or gdb?
Please see:
2005-03-03 Daniel Jacobowitz <dan@codesourcery.com>
* inferiors.c (change_inferior_id, add_thread, find_inferior_id):
Take unsigned long arguments for PIDs.
* linux-low.c (add_process, linux_attach_lwp, linux_attach)
(linux_thread_alive, linux_wait_for_event, kill_lwp, send_sigstop)
(wait_for_sigstop, linux_resume_one_process)
(regsets_fetch_inferior_registers, linux_send_signal)
(linux_read_auxv): Likewise. Update the types of variables holding
PIDs. Update format string specifiers.
* linux-low.h (struct process_info, linux_attach_lwp): Likewise.
* remote-utils.c (prepare_resume_reply): Likewise.
* server.c (cont_thread, general_thread, step_thread)
(thread_from_wait, old_thread_from_wait, signal_pid): Change type to
unsigned long.
(handle_query): Update format specifiers.
(handle_v_cont, main): Use strtoul for thread IDs.
* server.h (struct inferior_list_entry): Use unsigned long for ID.
(add_thread, find_inferior_id, change_inferior_id, cont_thread)
(general_thread, step_thread, thread_from_wait)
(old_thread_from_wait): Update.
* target.h (struct thread_resume): Use unsigned long for THREAD.
(struct target_ops): Use unsigned long for arguments to attach and
thread_alive.
Your sources are dated after this but don't seem to include this fix.
--
Daniel Jacobowitz
CodeSourcery, LLC