linux – 编写LLVM后端编译的代码时,架构是否重要?
我的问题实际上比标题更通用:
在编写最终将编译为LLVM中间代码,然后从那里到机器语言的代码时,架构在什么时候起作用? >假设我正在编写Rust(它使用LLVM作为后端).我是否能自动将Rust代码编译为LLVM可以定位的每个体系结构(假设该机器上有可以运行它的操作系统)? 相同品种的奖金问题: >假设标准库使用OS系统调用(肯定会这样).在进行系统调用时,您是否需要关心架构?或者OS(例如Linux)是否也抽象了架构呢? 谢谢. 解决方法
TL; DR
根据我的理解,你可以编译到任何目标LLVM支持(这里可能仍有一些注意事项使用inline assembler或module level inline assembly前端),但是,你不能保证它实际上会正确执行.前端负责在作者支持的平台上进行可移植的工作. 另请注意,作为前端开发人员,您负责提供data layout和target triple. 也可以看看: > llvm-bitcode-cross-platform 你的问题:
这取决于Rust前端的作者.
我很确定LLVM能够发出指令,但在寻址方面可能不正确. 我自己没有使用上面提到的内联汇编程序设备,但我认为如果它允许特定于平台的程序集,那么这也会破坏平台不可知的编译.
这又取决于Rust前端发出的内容.甚至在它发出逻辑指令之前,它可能会发出一些样板设置逻辑. 我在LLVM中编写自己的语言,在称为“main”的特殊函数的情况下执行此操作.我的目标是C ABI,因此它将使用适当的C样式main来包装此main,并使用更严格的参数集调用它.
考虑使用Clang中的C/C++,如llvm FAQ中所述.Clang是LLVM的前端,可能是最受欢迎的,并且编写C/C++的用户负责#included-ing适当的平台特定功能. 有些语言可能设计得更加独立于平台,而前端可以为您处理工作.
我假设您正在讨论前端针对C标准库的情况,在这种情况下,LLVM具有可由前端使用的standard C library intrinsics.但是,这不是唯一的方法,因为如果在Kaleidoscope example中定位C ABI,则可以使用call instruction直接调用C函数. 最后,标准库可能是一个可移植性问题,必须由前端开发人员解决. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |