[LLVMdev] builtin_apply?

Eric Christopher echristo at gmail.com
Tue Oct 1 22:21:38 PDT 2013


__builtin_apply is an abomination. Even in GCC it is held to have been a
bad idea.

--eric
On Oct 1, 2013 10:03 PM, "reed kotler" <rkotler at mips.com> wrote:

>  why does clang not support builtin_apply?
>
> 6.5 Constructing Function Calls
>
> Using the built-in functions described below, you can record the arguments
> a function received, and call another function with the same arguments,
> without knowing the number or types of the arguments.
>
> You can also record the return value of that function call, and later
> return that value, without knowing what data type the function tried to
> return (as long as your caller expects that data type).
>
> However, these built-in functions may interact badly with some
> sophisticated features or other extensions of the language. It is,
> therefore, not recommended to use them outside very simple functions acting
> as mere forwarders for their arguments.
> — Built-in Function: void * *__builtin_apply_args* ()
>
> This built-in function returns a pointer to data describing how to perform
> a call with the same arguments as are passed to the current function.
>
> The function saves the arg pointer register, structure value address, and
> all registers that might be used to pass arguments to a function into a
> block of memory allocated on the stack. Then it returns the address of that
> block.
>
>  — Built-in Function: void * *__builtin_apply* (void (*function)(), void
> *arguments, size_t size)
>
> This built-in function invokes function with a copy of the parameters
> described by arguments and size.
>
> The value of arguments should be the value returned by
> __builtin_apply_args. The argument size specifies the size of the stack
> argument data, in bytes.
>
> This function returns a pointer to data describing how to return whatever
> value is returned by function. The data is saved in a block of memory
> allocated on the stack.
>
> It is not always simple to compute the proper value for size. The value
> is used by __builtin_apply to compute the amount of data that should be
> pushed on the stack and copied from the incoming argument area.
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131001/6fdb458e/attachment.html>


More information about the llvm-dev mailing list