On Sun, Mar 10, 2013 at 22:54, Matt Davis wrote:
> I have a particular instance of a
> function call within a function that I am analyzing (and
> transforming).  I want the address of that function call, for which I
> do have a gimple_call instance of.  I want to somehow create a symbol
> identifying that particular address/location for that instance of the
> function call.  I need this address at runtime. I was inserting labels
> just after each function call, but the placement of my label was not
> always immediately after the function call, even if I set the label as
> being addressable and/or volatile.

You have the GIMPLE_CALL gimple statement, and you can use
gsi_for_stmt to get an insertion point for the labels. But at this
point in the compilation chain, you can't expect this label to be the
exact call site, e.g. because arguments need to be set up, registers
saved/restored around the call, etc.  Also, a label will count as a
basic block split point, so your call and your label may end up being
separated by a jump when basic blocks are re-ordered.

If you want to get the address of the actual call site at runtime,
you're going to have to put the label before the call insn in the
"final" pass. Perhaps you could do that by inserting
NOTE_INSN_DELETED_LABEL notes before the call insn, or by modifying
the assembly output routines for calls to put a label just before the
call. But even this may not work reliable if a call output pattern
emits multiple assembly instructions for a single call RTL
instruction.

Ciao!
Steven

Reply via email to