问题描述
似乎返回结构体的 C 函数有时使用 magic hidden return argument 携带指向某个内存的指针,该内存将被函数的返回值覆盖。
MyBuffer string_from_double(double d);
将出现在 LLVM 中,例如:
declare void @string_from_double(%struct.MyBuffer* sret align 8,double)
尽管表面上看,该函数实际上有两个参数而不是一个参数。魔术参数显然由它的 sret
tag 标识。
(令人困惑的是,LLVM 不会自动执行从按值返回的转换,即使对于 cdecl
约定函数也是如此。这肯定是有原因的,但对我来说似乎违反直觉)。
所以我的问题是:从编译器后端,我如何判断何时需要将 FFI 函数转换为“sret”形式?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)