This is the mail archive of the
mailing list for the GDB project.
Re: C injection GDB project
- From: Pedro Alves <palves at redhat dot com>
- To: Phil Muldoon <pmuldoon at redhat dot com>, "Jose E. Marchesi" <jemarch at gnu dot org>, gdb <gdb at sourceware dot org>
- Date: Wed, 11 Feb 2015 13:53:49 +0000
- Subject: Re: C injection GDB project
- Authentication-results: sourceware.org; auth=none
- References: <877fvopv7x dot fsf at gnu dot org> <54DB37D0 dot 1010108 at redhat dot com> <54DB4767 dot 4060006 at redhat dot com>
On 02/11/2015 12:13 PM, Phil Muldoon wrote:
> On 11/02/15 11:06, Pedro Alves wrote:
>> On 02/11/2015 11:02 AM, Jose E. Marchesi wrote:
>>> I would like to work in the C injection GDB project.
> I CC'd the GDB mailing list and trimmed some of the post. I hope you
> do not mind. Pedro asked me to reply to you on this interest.
> You've picked an excellent time to show interest! Phase one is
> complete and we are just about starting phase two. What is phase two?
> The current status of the project is that the C parts of the injection
> process have been checked into both GCC and GDB. The GCC parts will be
> released in GCC 5. The GDB parts in the next GDB release.
> A brief overview of the mechanics and methods of the project can be
> found here:
> There is also a talk given in the 2014 GNU Cauldron. You can find it
> All discussion related to the project should be on email@example.com
> and all patches to firstname.lastname@example.org
> For historical review, the GDB parts of the project can be found here:
> And the GCC bits here:
> Note both of those branches are now defunct. All the code contained in
> them is checked in to the relevant upstream projects. I provide them
> purely for archaeological purposes.
> The people who work mostly on this project are: me, Jan Kratochvil
> <email@example.com> and Tom Tromey. Tom previously lead the
> effort, but has now moved on to other fun stuff. There have been many
> others who contributed in one way or another, not least of all
> the reviewers. Alas, they are too numerous to list here.
> A TODO (in summary):
> - Write the C++ plug-in for GCC. Re-architect and reuse the C plug-in
> code wherever possible.
> - Teach GDB to tell GCC about C++ types.
> Those two will take a lot of time. We have not started yet.
> Eventually we want to provide:
> - compile print
> - compile printf
> - compile cond (or some other interface for conditional breakpoints)
> - Maybe a fix-and-continue interface
> - Maybe intelligently design a way GDB can use GCC for parsing
> expressions in some case.
In addition (or maybe in expansion of that last point):
- Fully replace GDB's C and C++ parsers by calling into GCC/G++'s
parsers. IOW, make "(gdb) print EXPR" (and wherever else an EXPR
is evaluated) use gcc's frontend to parse EXPR. That can of course
be phased in, with e.g. a new "print -inject" switch to force it, and
a new global setting the user can use to select the mechanism GDB should
use to evaluate the expression.
- Related, to fully replace GDB's own built in parsers, we'll need to
be able to evaluate expressions using GCC's frontends, but without
injecting code in the inferior and calling it. Function calls can
potentially corrupt more an already corrupt inferior, so best
avoid that by default, and there's also debugging core dumps, which
obviously can't execute code. My idea for that would be to make
the GCC frontend stop compilation at the gimple level, and then
add a gimple interpreter (gimple == gcc's IR) to the gcc plugin, which
would callback into GDB whenever it needed to read memory or registers
out of the inferior. I'd be thrilled if someone picked up this project!