This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Making a direct function call from inline assembly


On Thursday 12 August 2010 21:05:59 you wrote:
> On 08/12/2010 10:29 AM, Job Noorman wrote:
> > On Thursday 12 August 2010 19:10:58 you wrote:
> >> On 08/12/2010 09:44 AM, Job Noorman wrote:
> >>> Hi,
> >>> 
> >>> I am trying to make a direct function call from inline assembly like 
this:
> >>>       asm("call %0" : : "i"(func));
> >>> 
> >>> This doesn't work because GCC will generate something like
> >>> 
> >>>       call $mangledFunc
> >>> 
> >>> which will give an assembly error.
> >>> Is there a way to do this?
> >>> 
> >>> Thanks in advance!
> >>> Job
> >>> 
> >>> PS: I know I can do something like
> >>> 
> >>>       asm("call *%0" : : "r"(func));
> >>> 
> >>> But then it's not a direct call anymore.
> >>> 
> >>> PPS: I also posted this question on StackOverflow:
> >>> http://stackoverflow.com/questions/3467180/direct-call-using-gccs-inlin
> >>> e- assembly
> >> 
> >> Are you simply trying to do:
> >>       asm("call func");
> >> 
> >> That produces the assembly language (using -S option to gcc):
> >>       call func
> >> 
> >> --Bob
> > 
> > Sorry, I forgot to mention I'm using C++ and I would like to not have to
> > hard- code the mangled function name.
> > 
> > Job
> 
> I assume that you can't declare the function as a C function?
>     extern "C" void func(int x);
> 
> My simplistic answers are not meant to suggest that you lack
> understanding of C++. I just know that I sometimes go down a path in my
> thinking that causes me to overlook the simple solution. I'm a retired
> CS Prof. and have had students ask "dumb" questions that cause me to
> realize this. :-)
> 
> --Bob
Don't worry about it! It wouldn't be the first time I spent way too much time 
solving a way too simple problem. I'm glad you take the time to give an 
answer.

The function I'm trying to call is a non-static class member function so I 
cannot declare it extern "C", unfortunately.

Job


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]