【问题标题】:Is all MIPS code on Linux supposed to be PIC?Linux 上的所有 MIPS 代码都应该是 PIC 吗?
【发布时间】:2013-12-05 23:53:46
【问题描述】:

在 MIPS CPU(准确地说是 MIPSEL32)上的 Linux 中,是否所有用户态 SO 都应该是位置无关的(PIC)?来自权威来源的引用将是最好的。

Android 怎么样?

我的兴趣源于this

【问题讨论】:

  • amd64 要求所有共享库都是 PIC。没有理由怀疑 MIPS(规则可能是“当有足够的寄存器时,使用 PIC”)。
  • 按照惯例,MIPS 有一个用于全局指针的专用寄存器。不过,引用会很好。
  • 另一方面,ARM 具有与 x86_86 相同的 16 个通用寄存器(模 PC 并非完全通用),但它不需要 PIC。

标签: linux assembly linker shared-libraries mips


【解决方案1】:

Linux 上 PIC 代码的情况似乎有些有趣。过去(EGLIBC-2.9 之前)MIPS 上的所有二进制文件都应该是 PIC(应用程序和共享库)。但是,为了减小应用程序的大小,开发了 ABI 扩展以允许非 PIC 可执行文件(但共享对象仍保持 PIC,和以前一样):

此时我们不建议对位置无关进行任何更改 共享对象使用的寻址约定。相似地, 使用“-fpie”编译的与位置无关的可执行文件——根据需要 用于“硬化”Linux 发行版中的地址空间随机化—— 应继续使用现有的 psABI 寻址和呼叫 机制。

http://gcc.gnu.org/ml/gcc/2008-07/txt00000.txt

linux-mips.org 上的 wiki 页面声明 MIPS 上的所有二进制文件都必须是 PIC 似乎有些过时,因为 Linux 上最近的 GCC 和 EGLIBC 都支持非 PIC 可执行文件:http://www.linux-mips.org/wiki/PIC_code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 2011-10-15
    相关资源
    最近更新 更多