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: [RFC] gdb.server testcases (resend)


On Mon, May 23, 2005 at 06:57:48AM -0700, Wu Zhou wrote:
> 
> > Yes, this will not work.  The correct way to handle this is to wait
> > until I have implemented the available target features proposal I've
> > posted on gdb@, and then I can make gdbserver inform GDB that 64-bit
> > registers are available so that it will expect them.
> 
> So you are going to add a command for gdbserver to notify remote gdb 
> the availability of 64-bit registers?  That is good.  But I am also
> thinking of other ways.  The first solution I thought of is to let 
> gdbserver choose which set of registers to use according to the
> arch (32-bit or 64-bit) of the debuggee.  The other solution I could 
> thought of is to let host-side gdb accept 64-bit register as well.
> I even tried some coding with the second method.  It seems that it 
> worked sorta, at least I can set breakpoint, continue the process 
> and so on.  But I did met problems with "next" and "step" commands,
> which didn't go on with executing the process at all.  
> 
> Because I am not that familar with the code of gdb/gdbserver, so I
> am not very sure where to find the root cause of these problems.  I
> am also not sure whether these two methods are workable?  Would you
> please help evaluate this?  If it is really workable, what is the 
> pros and cons of these methods compared to your proposal?  Thanks 
> a lot! 

Don't do that.  Please go read my proposal on gdb@, paying particular
attention to the description of the MIPS execution environment.  The
reason to always provide 64-bit registers if they are available is that
they are physically present; the upper 32 bits can affect the behavior
of the program in some cases.  So not displaying them can be very bad!

> That SIGFPE error disappeared after applying your patch to latest
> GDB cvs tree.  But I met with another strange problem when debugging
> gdb.base/break, which defines the following function:
> 
> int factorial (value)
> int value;
> #endif
> {
>   if (value > 1) {  /* set breakpoint 7 here */
>         value *= factorial (value - 1);
>     }
>     return (value); /* set breakpoint 19 here */
> }
> 
> normally factorial(6) will recursively call itself 5 times and return
> 720.  However while using 64-bit gdbserver on 64-bit binary, it doesn't
> call factorial(5) at all, return directly 6 as the result.
> 
> I am suspecting that "value > 1" doesn't get executed, so I change the
> conditional statement to "if (value - 1)", it worked!  So it turn out
> that "value > 1" always return 0 in this running context.  That is really
> odd.  Any clues you could thought of?  Thanks in advance.  

Um... your compiler must be broken, then.

-- 
Daniel Jacobowitz
CodeSourcery, LLC


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