This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] gdbserver fails on 32-bit ppc rfs running in a-64 bit 2.6 linux kernel


On Tue, Mar 15, 2005 at 10:16:09PM -0500, Daniel Jacobowitz wrote:
> On Tue, Mar 15, 2005 at 06:36:22PM +0530, Amit S. Kale wrote:
> > The strtoul change in my patch was already present. Sorry about that.
> > 
> > You have changed the data type of thread_resume::thread as well as cont_thread 
> > to unsigned long. "cont_thread = -1" and "(cont_thread > 0)" are still in 
> > place. How does this work?
> 
> Hmm, looks like you found a real problem here; would you like to fix
> it?  Modern GDBs don't heavily use this code, because of the vCont
> packet.  Otherwise I'll fix it, but I may not find time for a bit.
> 
> > Can we use a thread value of "0" to indicate all threads or no-thread instead 
> > of "-1"? The condition "cont_thread > 0" becomes valid if we do that.
> 
> This value can be set from the remote protocol, so we would have to
> transform it in Hc/Hg support also.

Better late than never: this patch eliminates the bogus -1 checks. 
Tested i686-linux, committed.

-- 
Daniel Jacobowitz
CodeSourcery, LLC

2005-06-16  Daniel Jacobowitz  <dan@codesourcery.com>

	* linux-low.c (linux_wait, linux_send_signal): Don't test
	an unsigned long variable for > 0 if it could be MAX_ULONG.
	* server.c (myresume): Likewise.
	* target.c (set_desired_inferior): Likewise.

Index: linux-low.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/linux-low.c,v
retrieving revision 1.37
diff -u -p -r1.37 linux-low.c
--- linux-low.c	13 Jun 2005 01:59:22 -0000	1.37
+++ linux-low.c	17 Jun 2005 03:51:05 -0000
@@ -667,7 +667,7 @@ retry:
      then we need to make sure we restart the other threads.  We could
      pick a thread at random or restart all; restarting all is less
      arbitrary.  */
-  if (cont_thread > 0)
+  if (cont_thread != 0 && cont_thread != -1)
     {
       child = (struct thread_info *) find_inferior_id (&all_threads,
 						       cont_thread);
@@ -1435,7 +1435,7 @@ linux_send_signal (int signum)
 {
   extern unsigned long signal_pid;
 
-  if (cont_thread > 0)
+  if (cont_thread != 0 && cont_thread != -1)
     {
       struct process_info *process;
 
Index: server.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/server.c,v
retrieving revision 1.26
diff -u -p -r1.26 server.c
--- server.c	13 Jun 2005 01:59:22 -0000	1.26
+++ server.c	17 Jun 2005 03:51:05 -0000
@@ -281,7 +281,7 @@ myresume (int step, int sig)
   struct thread_resume resume_info[2];
   int n = 0;
 
-  if (step || sig || cont_thread > 0)
+  if (step || sig || (cont_thread != 0 && cont_thread != -1))
     {
       resume_info[0].thread
 	= ((struct inferior_list_entry *) current_inferior)->id;
@@ -293,7 +293,7 @@ myresume (int step, int sig)
   resume_info[n].thread = -1;
   resume_info[n].step = 0;
   resume_info[n].sig = 0;
-  resume_info[n].leave_stopped = (cont_thread > 0);
+  resume_info[n].leave_stopped = (cont_thread != 0 && cont_thread != -1);
 
   (*the_target->resume) (resume_info);
 }
Index: target.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/target.c,v
retrieving revision 1.5
diff -u -p -r1.5 target.c
--- target.c	13 Jun 2005 01:59:22 -0000	1.5
+++ target.c	17 Jun 2005 03:51:05 -0000
@@ -42,7 +42,8 @@ set_desired_inferior (int use_general)
       /* If we are continuing any (all) thread(s), use step_thread
 	 to decide which thread to step and/or send the specified
 	 signal to.  */
-      if (step_thread > 0 && (cont_thread == 0 || cont_thread == -1))
+      if ((step_thread != 0 && step_thread != -1)
+	  && (cont_thread == 0 || cont_thread == -1))
 	found = (struct thread_info *) find_inferior_id (&all_threads,
 							 step_thread);
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]