This is the mail archive of the gdb@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: probing GDB for MI versions


On Fri, Oct 08, 2004 at 08:29:01PM -0400, 'Bob Rossi' wrote:
> On Fri, Oct 08, 2004 at 10:36:45AM +0200, Eli Zaretskii wrote:
> > > Date: Thu, 7 Oct 2004 18:42:30 -0400
> > > From: 'Bob Rossi' <bob@brasko.net>
> > > Cc: Dave Korn <dk@artimi.com>, gdb@sources.redhat.com
> > > 
> > >    * Have GDB output it's last stable version of MI as the first thing
> > >      it outputs (subset of case above)
> > 
> > Will this solution be satisfactory for you?  That is, when invoked
> > with the -interpreter=mi<N> command-line switch, GDB will print the
> > last stable version of the MI protocol it supports.  This is actually
> > the way many protocol negotiations start, and I don't see why we
> > shouldn't behave the same.
> > 
> > Note that a front end which wants to support older GDB versions will
> > need to have a database of MI versions referenced by GDB versions,
> > because the old GDB versions will not print the MI version.
> > 
> > Are there any disadvantages to this solution?
> 
> Sorry for the delay, I am waiting on the answer for these questions
>    http://sources.redhat.com/ml/gdb/2004-10/msg00267.html
> before I can say if this will be OK for me.
> 
> Bob Rossi

OK, I have received an answer. Basically GDB has already, and may in the
future support multiple versions of MI. The solution above is perfect if
GDB supports one stable version of MI, however, if it supports multiple
versions of MI, the front end still needs to tell GDB which version it
wants to use. 

I have come up with a crude patch that makes GDB work like this,
the '>' means that GDB is outputting data to the front end, and the '<'
means that GDB is inputting data from the front end.

   $ ./gdb -i=mi-handshake
   >mi1
   >mi2
   >mi3
   <mi2
   >~"GNU gdb 6.2.50_2004-10-08-cvs\n"
   >...
   >(gdb)

Basically, just to get the idea, GDB outputs all of the MI front end's
that it supports, and then allows the front end to choose one. All of
this happens before GDB initializes the interpreter, so that after the
choice is made, GDB does not have to be restarted and will work with the
protocol selected by the front end.

Any ideas?

Obviously we could define the handshaking better, and allow for
development vs stable releases to be made clear. Also, make room for
future extensions and make a grammar, ..

Thanks,
Bob Rossi


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