[llvm-dev] C returning struct by value

Michael Nicolella via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 29 22:14:20 PDT 2016


Appreciate all of the suggestions. I mostly like the idea of using clang to parse C and extract the info from there. I'm not ready to add clang as a dependency, so I'll take care of the ABI details myself for now.

Cheers

> On Mar 29, 2016, at 9:32 AM, Ahmed Bougacha <ahmed.bougacha at gmail.com> wrote:
> 
> On Tue, Mar 29, 2016 at 9:17 AM, James Y Knight via llvm-dev
> <llvm-dev at lists.llvm.org> wrote:
>> On Mon, Mar 28, 2016 at 5:14 PM, Michael Nicolella via llvm-dev
>> <llvm-dev at lists.llvm.org> wrote:
>>> 
>>> Thanks for the explanation. It's good to hear the situation isn't felt to
>>> be ideal.
>>> 
>>> The details here are going to be sensitive to the OS + target that I'm
>>> compiling for, right? So the effort here will be to understand and get right
>>> the calling convention details for each supported target, yes?
>> 
>> 
>> Yes, it is target specific. You should check
>> clang/lib/CodeGen/TargetInfo.cpp for details of how calls are lowered from C
>> for various targets. For some targets (e.g. x86-64), it's decidedly
>> non-trivial. You can also run clang -emit-llvm to see what actually gets
>> emitted for particular functions. If you stay away from passing
>> structs/unions by value, it becomes a *lot* simpler, though...
>> 
>> Some people have tried to make libraries for doing the ABI lowering
>> available in a way that's not tied to clang. Here's one:
>> <https://github.com/scross99/llvm-abi> (I have no idea how well, or if, it
>> works).
>> 
>> I think I've also seen mention of someone constructing the proper classes to
>> pass to clang to have it emit the C ABI calls from their non-C language,
>> although I'm not sure where I saw that.
> 
> There was an interesting talk a couple years ago about how Swift embeds clang:
>  http://llvm.org/devmtg/2014-10/Slides/Skip%20the%20FFI.pdf
> Now that it's open-source the code might be of interest.
> 
> -Ahmed
> 
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>> 


More information about the llvm-dev mailing list