[cfe-dev] source-to-source transformation to insert instrumentation calls

Ronan Keryell Ronan.Keryell at silkan.com
Mon Sep 24 09:57:17 PDT 2012

>>>>> On Mon, 24 Sep 2012 18:50:36 +0300, Dmitri Gribenko <gribozavr at gmail.com> said:

    Dmitri> On Mon, Sep 24, 2012 at 6:43 PM, Jan Smets <jan.smets at alcatel-lucent.com> wrote:
    >> That's OK. I'm aware that I won't be 100% accurate.

    Dmitri> OK, good to know.

    >> Now I just need to figure out a good location to insert the call!
    >> :)

    Dmitri> I think that there are cases where inserting instrumentation
    Dmitri> calls will require non-trivial rewriting.  For example:

    Dmitri> int f(int, int);
    Dmitri> int g(int *);
    Dmitri> int test(int *a) {
    Dmitri>    f(*a, g(a));
    Dmitri> }

    Dmitri> Function argument evaluation order is unspecified, so we can
    Dmitri> not simply insert an instrumentation call for *a before f()
    Dmitri> because *a can be evaluated after g(a), which can change *a.

    Dmitri> So we need to make an arbitrary decision ourselves and
    Dmitri> rewrite this to something like:

    Dmitri> int test(int *a) { int tmp1 = *a; int tmp2 = g(a); f(tmp1,
    Dmitri> tmp2); }

    Dmitri> I didn't give this much thought, but I suspect there are
    Dmitri> much more cases like this.

Yes, for example with side effect operators like ++ or -=, etc.

To deal with this kind of stuff in our own source-to-source compiler we
use the "," sequence operator to capture some values right from inside
the battle field.

For example you could compile this to:
int f(int, int);
int g(int *);
int test(int *a) {
   f((instrument_read(*a, 4), *a), (instrument_read(a, 4), g(a)));

That should work if the function formal argument evaluation order is
consistent for any call.

But, well, I guess we have enough work to deal with well-written
programs before dealing with all this wicked stuff... :-)
  Ronan KERYELL                            |\/  Phone:  +1 408 658 9453
  SILKAN Wild Systems                      |/)
  4962 El Camino Real #201                 K    Ronan.Keryell at silkan.com
  Los Altos, CA 94022                      |\   skype:keryell
  USA                                      | \  http://silkan.com

More information about the cfe-dev mailing list