Linux 在编写LLVM后端编译的代码时,架构是否重要?

Linux 在编写LLVM后端编译的代码时,架构是否重要?,linux,compiler-construction,llvm,Linux,Compiler Construction,Llvm,我的问题实际上比标题更笼统: 在编写最终将被编译成LLVM中间代码,然后再从那里编译成机器语言的代码时,架构在什么时候起作用 假设我正在编写Rust(它使用LLVM作为后端)。我是否能够自动将我的Rust代码编译到LLVM可以针对的每个体系结构(假设该机器上有一个操作系统可以运行它) 或者可能是Rust标准库还没有实现“ARM兼容”,所以即使LLVM针对它,我也无法编译到ARM 如果我不使用任何标准库,我的整个程序只是一个立即返回的程序,该怎么办?有没有可能即使没有任何库,Rust(或您拥有的东

我的问题实际上比标题更笼统:

在编写最终将被编译成LLVM中间代码,然后再从那里编译成机器语言的代码时,架构在什么时候起作用

  • 假设我正在编写Rust(它使用LLVM作为后端)。我是否能够自动将我的Rust代码编译到LLVM可以针对的每个体系结构(假设该机器上有一个操作系统可以运行它)

  • 或者可能是Rust标准库还没有实现“ARM兼容”,所以即使LLVM针对它,我也无法编译到ARM

  • 如果我不使用任何标准库,我的整个程序只是一个立即返回的程序,该怎么办?有没有可能即使没有任何库,Rust(或您拥有的东西)也无法编译到ARM(或您拥有的东西),即使LLVM以它为目标

  • 如果上面所有的例子都编译得很好,我该怎么做才能让我的代码在一个架构上突破,而不是编译成某个架构

  • 相同种类的奖金问题:

  • 假设标准库使用OS系统调用(这是肯定的)。在进行系统调用时,您是否必须关心体系结构?或者操作系统(例如Linux)也抽象出了体系结构
  • 谢谢。

    TL;博士 据我所知,您可以编译到任何目标LLVM支持(这里可能还有一些关于前端使用or的警告),但是,您不能保证它将实际正确执行。前端负责在作者支持的平台上进行可移植的工作

    还请注意,作为前端开发人员,您负责提供和

    另见:

    你的问题: 假设我正在编写Rust(它使用LLVM作为后端)。我是吗 能够自动将我的Rust代码编译到每个体系结构 LLVM可以作为目标(假设该机器上有一个操作系统可以 运行它吗

    这取决于Rust frontend的作者

    或者可能是锈蚀标准库没有被制成“手臂” “兼容”,所以即使LLVM的目标是 是吗

    我很确定LLVM能够发出指令,但在寻址方面可能不正确

    我自己还没有使用上面提到的内联汇编工具,但我假设如果它允许特定于平台的汇编,那么这也将打破平台无关的编译

    如果我不使用任何标准库,我的整个程序都是 只是一个马上返回的程序?会不会是这样呢 如果没有任何库,Rust(或您拥有的东西)无法编译到ARM (或者你有什么)即使LLVM瞄准了它

    这同样取决于前端生锈的程度。甚至在发出逻辑指令之前,它可能会发出一些样板设置逻辑

    我正在用LLVM编写自己的语言,它在一个名为“main”的特殊函数中实现了这一点。我的目标是C ABI,因此它将用一个合适的C风格的main来包装这个main,并用一组更严格的参数来调用它

    如果上面所有的例子都编译得很好,我该怎么做才能 让我的代码在一个架构上中断,而不是编译到某个特定的 建筑

    考虑一下C/C++中所提到的叮当声。Clang是LLVM的前端,可能是最流行的,编写C/C++的用户负责#包括适当的平台特定功能

    有些语言可能设计得更独立于平台,前端可以为您处理这些工作

    假设标准库使用OS系统调用(即 当然有)。在制作时,您是否必须关心架构 系统调用?或者操作系统(比如Linux)是抽象的吗 建筑也是如此

    我假设您讨论的是前端以C标准库为目标的情况,在这种情况下,LLVM具有前端可以使用的功能。但是,这不是唯一的方法,因为如果以中的C ABI为目标,则可以使用直接调用C函数

    最后,标准库可能是一个可移植性问题,必须由前端开发人员解决