汇编程序是否可以在Linux发行版之间移植?
作者:互联网
汇编程序格式的程序是否可以在Linux发行版之间移植(模块化CPU架构差异)?
这是我的问题的背景:我正在研究一种新的编程语言(名为Aklo),其运作方式将是经典编译为.s并将结果提供给GNU汇编程序.
显然最终会有自己编写的实现很好,但是我已经辞职了,在C中维护它以解决鸡和蛋问题:假设你是第一次下载编译器并且它本身是用Aklo编写的,如何你编译它吗?据我了解,不同的Linux发行版和其他类UNIX系统对二进制格式有不同的约定.
但是我刚刚想到,一个解决方案可能是发送.s文件(好吧,每个CPU架构一个):假设你已经或可以安装GNU汇编程序是公平的.当然我还需要一个bootstrap编译器,但这不需要很快;我可以用Python编写它.
汇编程序是否可以以二进制文件的方式移植?还有其他我没想过的绊脚石吗?
添加回答一个答案:
我一直渴望LLVM,那里肯定有很多好东西,它会让我的生活变得更轻松 – 除了它会导致依赖正确安装的LLVM版本.拥有对开发机器的依赖性并不是那么糟糕,但在一个将程序作为源代码发送的世界中,对于在Aklo中编写的每个程序的每个用户都会产生相同的依赖关系,我认为这也是付出高昂的代价.
但是如果将编译后的程序作为汇编程序的解决方案起作用……那就解决了这个问题,毕竟我可以使用LLVM,这将是一个巨大的胜利.
所以关于汇编程序的可移植性的问题甚至比我最初意识到的要重要得多.
结论:从这里和LLVM邮件列表http://lists.cs.uiuc.edu/pipermail/llvmdev/2010-January/028991.html的答案来看,似乎坏消息是问题无法解决,但好消息是使用LLVM意味着它不会更糟,所以我可以自由地这样做并获得所有优势它们.
解决方法:
在很高的层次上,ABI由{指令集,系统调用,二进制格式,库}组成.
作为.s的分发可以让您从二进制格式中解脱出来.这仍然是毫无意义的,因为您已修复到特定的ISA并仍需要使用库和/或进行系统调用.库从分发到分发各不相同(尽管这并不是那么糟糕,特别是如果你只是使用libc)并且系统调用因操作系统而异.
标签:linux,portability,assembly,unix 来源: https://codeday.me/bug/20190730/1583383.html