functions calls Vs calls using function pointers
Digvijoy Chatterjee
chatterjee.digvijoy@gmail.com
Thu May 25 11:07:00 GMT 2006
On 5/25/06, Andrew Haley <aph@redhat.com> wrote:
> Digvijoy Chatterjee writes:
>
> > I am trying to understand how cc1 works ,and was going through the
> > gcc-4.0.3 source , and after a lot of research , found functions
> > for parsing Declaration/Definitions(gcc-4.0.3/gcc/c-decl.c:
> > grokdeclarator) and "actual function calls" used inside a
> > translation unit ,in (gcc-4.0.3/gcc/calls.c:prepare_call_address
> > )in the C compilation process .
> >
> > The problem however is when i choose to call a function using
> > function-pointers ,the name of the function pointer appears as "-"
> > in this prepare_call_address function (as seen in gdb). Can anyone
> > point me to a C file/function in the gcc source tree where the
> > compiler knows the exact function-pointer name being used to call a
> > function.
>
> The problem I'm having with this (and probably everyone else is as
> well) is that I don't really know what you're asking.
>
> prepare_call_address() is called a long time after the C source code
> has been parsed. It's part of the code generation phase.
>
> prepare_call_address() isn't passed a variable, it's passed an RTX.
> That RTX can either be a symbol_ref or something more complex. As
> long as it, when executed, produces an address that's OK.
>
> If you want to see the expression that is used to form the address,
> put your breakpoint on expand_call() and look at the exp.
>
> > typedef void (*fptr) (int);
> > void A(int);
> > int main()
> > {
> > fptr fp;
> > fp=A;
> > fp();
> > }
> > void A(int i){printf("in A\n");}
> >
> > when i try and compile this , using gcc, its quick to point an error :
> > too few arguments to fp;
>
> Correct. What's your question?
>
> Andrew.
>
The question is which function in which .c file of the gcc source
tree , understands the fact that a call to fp is actually a call to A
, and therefore complains about wrong arguments.
I want the name of the function where the compiler while parsing a .c
file associates a function pointer ,to the function which will be
called at runtime.
As an example the "prepare_call_address" in line no:167(approx) in
gcc-4.0.3/gcc/calls.c in the gcc source knows when a certain function
A is called in main,but it doesnt know anything about fp, if i try to
print names of called functions in prepare_call_address it prints "-"
and not fp nor A, for an actual function call , it prints the name.
I hope i made myself clear.
Digz
More information about the Gcc-help
mailing list