[LLVMdev] builtin_apply?

reed kotler rkotler at mips.com
Tue Oct 1 21:58:38 PDT 2013


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 invokesfunctionwith a copy of the parameters
    described byargumentsandsize.

    The value ofargumentsshould be the value returned
    by|__builtin_apply_args|. The argumentsizespecifies the size of the
    stack argument data, in bytes.

    This function returns a pointer to data describing how to return
    whatever value is returned byfunction. The data is saved in a block
    of memory allocated on the stack.

    It is not always simple to compute the proper value forsize. 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.



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131001/84b195a6/attachment.html>


More information about the llvm-dev mailing list