This is the mail archive of the gdb@sourceware.org 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: C injection GDB project


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.
> 
> Hi
> 
> 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?
> C++!
> 
> 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:
> 
> https://sourceware.org/gdb/wiki/GCCCompileAndExecute#preview
> 
> There is also a talk given in the 2014 GNU Cauldron. You can find it
> here:
> 
> https://www.youtube.com/watch?v=YQATnypexbY
> 
> All discussion related to the project should be on gdb@sourceware.org
> and all patches to gdb-patches@sourceware.org
> 
> For historical review, the GDB parts of the project can be found here:
> 
> https://github.com/tromey/gdb/commits/gdbjit/gd
> 
> And the GCC bits here:
> 
> https://github.com/tromey/gcc/tree/submit/compile
> 
> 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
> <jan.kratochvil@redhat.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!

Thanks,
Pedro Alves


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