gpt4 book ai didi

linux - 编写由 LLVM 后端编译的代码时,体系结构重要吗?

转载 作者:IT王子 更新时间:2023-10-29 00:14:26 26 4
gpt4 key购买 nike

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

在编写最终将编译为 LLVM 中间代码,然后从那里编译为机器语言的代码时,体系结构在什么时候重要?

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

  2. 或者可能是 Rust 标准库尚未“与 ARM 兼容”,所以即使 LLVM 以它为目标我也无法编译到 ARM?

  3. 如果我不使用任何标准库怎么办,我的整个程序只是一个立即返回的程序?难道即使没有任何库,即使 LLVM 以 Rust(或你拥有的)为目标,Rust(或你拥有的)也无法编译成 ARM(或你拥有的)?

  4. 如果以上所有示例都可以正常编译,我需要做什么才能让我的代码 在一种架构上中断 而不是编译到特定架构?

    <

同种类加分题:

  1. 假设标准库使用 OS 系统调用(确实如此)。进行系统调用时是否必须关心体系结构?或者操作系统(例如 Linux)是否也抽象出架构?

谢谢。

最佳答案

长话短说

根据我的理解,您可以编译 到 LLVM 支持的任何目标(这里可能仍然有一些注意事项,前端使用 inline assemblermodule level inline assembly ),但是,您无法保证它会正确执行。前端负责完成跨作者支持的平台移植的工作。

另请注意,作为前端开发人员,您有责任提供 data layouttarget triple .

另见:

您的问题:

Let's say I'm writing Rust (which uses LLVM as a backend). Am Iautomatically capable of compiling my Rust code to every architecturethat LLVM can target (assuming there's an OS on that machine that canrun it)?

这取决于 Rust 前端的作者。

Or could it be that the Rust standard library hasn't been made "ARMcompatible" yet, so I couldn't compile to ARM even if the LLVM targetsit?

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

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

What if I don't use any of the standard library, my entire program isjust a program that returns right away? Could it be the case that evenwithout any libraries, Rust (or what have you) can't compile to ARM(or what have you) even if the LLVM targets it?

这又取决于 Rust 前端发出的内容。甚至在为您的逻辑发出指令之前,它可能会发出一些样板设置逻辑。

我在 LLVM 中编写我自己的语言,它在名为“main”的特殊函数的情况下执行此操作。我的目标是 C ABI,因此它将使用适当的 C 样式 main 包装此 main 并使用一组更严格的参数调用它。

If all the above examples compile just fine, what do I have to do toget my code to break on one architecture not compile to a certainarchitecture?

llvm FAQ 中所述,考虑使用 Clang 的 C/C++ . Clang 是 LLVM 的前端,可能是最流行的前端,编写 C/C++ 的用户负责#include-ing 适当的平台特定功能。

某些语言的设计可能更独立于平台,然后前端可以为您处理这些工作。

Let's say the standard library makes use of OS system calls (which issurely does). Do you have to care about architecture when makingsystem calls? Or does the OS (Linux, for example) abstract awayarchitecture as well?

我假设你在谈论前端以 C 标准库为目标的情况,在这种情况下 LLVM 有 standard C library intrinsics可以被前端使用。然而,这不是唯一的方法,因为您可以使用 call instruction如果像 Kaleidoscope example 中那样以 C ABI 为目标,则直接调用 C 函数.

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

关于linux - 编写由 LLVM 后端编译的代码时,体系结构重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34306069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com