Making a direct function call from inline assembly

Job Noorman jobnoorman@gmail.com
Fri Aug 13 09:57:00 GMT 2010


On Friday 13 August 2010 11:32:25 you wrote:
> On 08/13/2010 10:25 AM, Job Noorman wrote:
> > //file main.cpp
> > void func() {}
> > 
> > int main()
> > {
> > 
> >     //this works but GCC generates an indirect call:
> >     //    movl $_Z4funcv, %eax
> >     //    call *%eax
> >     asm("call *%0" : : "r"(func));
> >     
> >     //this is what I conceptually want to do but doesn't work because
> >     //GCC generates
> >     //    call $_Z4funcv
> >     //which gives an error from the assembler:
> >     //    main.cpp: Assembler messages:
> >     //    main.cpp:20: Error: suffix or operands invalid for `call'
> >     //I would like to find a way to make GCC generate the following:
> >     //    call _Z4funcv
> >     //(note there is no "$")
> >     asm("call %0" : : "i"(func));
> > 
> > }
> 
>     asm("call %P0" : : "i"(func));
> 
> Andrew.
Wow thanks a lot!
Is this feature documented somewhere? I've been looking through the manuals 
but haven't found it.



More information about the Gcc-help mailing list