Making a direct function call from inline assembly

Andrew Haley aph@redhat.com
Fri Aug 13 09:38:00 GMT 2010


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.



More information about the Gcc-help mailing list