This is the mail archive of the libffi-discuss@sourceware.org mailing list for the libffi 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: [gofrontend-dev] Re: [PATCH 03/13] HACK! Allow the static chain to be set from C


On Fri, Oct 10, 2014 at 6:06 PM, Peter Collingbourne <pcc@google.com> wrote:
> On Fri, Oct 10, 2014 at 5:33 PM, 'Ian Lance Taylor' via gofrontend-dev
> <gofrontend-dev@googlegroups.com> wrote:
>>
>> On Fri, Oct 10, 2014 at 1:42 PM, Richard Henderson <rth@redhat.com> wrote:
>> >
>> > This is awful syntax, and therefore contains no documentation.
>> > But we'll need to be able to set the static chain on a few calls
>> > within the Go runtime, so we need to expose this by some means.
>> >
>> > It currently looks like
>> >
>> >         function(args...) __builtin_call_chain(pointer)
>> >
>> > because that was easy to parse.
>>
>> How crazy would it be to move __builtin_call_chain into the function
>> arguments, as in
>>     function(a1, a2, __builtin_call_chain(pointer))
>> This __builtin_call_chain call would be removed from the argument list
>> so type checking would only look at a1, a2.  It would just set the
>> static chain value.  That at least puts the call_chain in the right
>> place, which is a special kind of function argument.
>
>
> Clang will need to be able to parse this syntax too, so let's not do
> anything that diverges too much from the standard.
>
> Can we perhaps make this look like a new calling convention? So e.g. you
> could do:
>
> (((void (__attribute__((chaincall)) *)(void *, int, int)))function)(pointer,
> a1, a2);

A colleague has suggested a perhaps nicer syntax:

__builtin_call_chain(pointer, call) where call must be a call expression

Peter


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