This is the mail archive of the
mailing list for the GCC project.
Re: Fwd: GCC front end and GCC internals
- From: Martin Jambor <mjambor at suse dot cz>
- To: Andre Groenewald <adres dot is dot gevat at gmail dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Thu, 30 Mar 2017 16:03:10 +0200
- Subject: Re: Fwd: GCC front end and GCC internals
- Authentication-results: sourceware.org; auth=none
- References: <CAHDABscuC-y=FS6SPJ1L3LG2oasHP-NCqFpwGKaUNUBMg6aTDw@mail.gmail.com> <CAHDABscN8eEjGbBbF4wWYtWVf5s9nh9mY0k2YOJptCwHELYRTQ@mail.gmail.com>
I am not sure if I can help you but...
On Thu, Mar 30, 2017 at 08:05:07AM +0200, Andre Groenewald wrote:
> I am discovering the awesome world of GCC internals. I managed to
> develop a basic front end. It can call internal and external functions
> and link with standard libraries. All is good.
> The hunger for more does not end. I want to call c++ libraries and
> interact with c++ objects.
> My starting point was to call a test c++ method. I created a test c++
> class with a test method/function. It was compiled into a library. The
> library was tested with c++ program and it worked. I manage to call it
> from my front end, but the parameter I passed was messed up. It was
> some random value every time I called the method.
> I disassembled my program and the test c++ program, then compared the
> two. I found that it uses a different register as in the case when
> calling a standard c style function.
> It seems that methods are different in the calling convention than
> normal functions, which is fine. All that I need to do is set correct
> tree property and every will work, right? The question is what tree
> property should I set, which macro should I use to set that property?
...calling conventions (and anything defied in an Application Binary
Interface) is of course dependant on the architecture and operating
system you are compiling for, so you need to tell us that.
Having said that, the only target that I know about that uses
different argument passing for methods and for functions is
i686-mingw32 (MS Windows). If that is your case, make sure that the
type of the function being called is METHOD_TYPE and not FUNCTION_TYPE
(but that is actually good for consistency on any platform). Except
for static methods, those are functions in gcc internals.
If this does not help, you'll need to provide much more details about
your whole setup.