Articles of abi

为什么共享库的ELF标头指定Linux作为OSABI?

我的Linux系统上的所有标准共享库(Fedora 9)都将ELFOSABI_NONE(0)指定为它们的OSABI。 这很好 – 但是我收到了ELF头文件中给出的OSABI为ELFOSABI_LINUX(3)的共享库。 这对于一个用于Linux系统的共享库来说听起来并不合理,但是对于我的其他所有库来说这是一个不同的值 – 所以当我试图用dlopen()打开这个库时,我的其他库的这个失败,错误“ELF文件操作系统ABI无效”。 我编译了FreeBSD实用程序brandelf.c,并使用它将OSABItypes更改为0,现在该库似乎可以与其他所有程序一起使用。 我只是想知道 – 你为什么认为这个库被标记为ELFOSABI_LINUX? 我猜也许他们在另一个系统上交叉编译,并指定一些gcc标志,导致这个值被设置到ELF头? 我试图实现类似的东西,但无法确定适当的gcc标志或标志。 我想知道可能的原因是什么,因为这个特定的供应商不会做任何事情,没有很多的手,我想能够说“你可能在做X,但这意味着我们必须修改你的库我们接受了他们之后“。

amd64 psABI在哪里?

AMD64 psABI曾经被x86-64.org托pipe。 我有一个pdf文件的副本,它明确地说: 体系结构规范可在网站http://www.x86-64.org/documentation上find 。 但http://www.x86-64.org已经很长一段时间了。 至less几个月。 有谁知道最新的PSABI可以从哪里拿走?

ARM上TLS的代码序列

线程本地存储文档的ELF处理为各种体系结构提供了各种模型(本地执行/初始执行/通用dynamic)的汇编序列。 但不是ARM – 有没有我能看到这样的ARM代码序列的地方? 我正在编译器,并希望生成代码将与平台链接器(包括程序和dynamic)正常运行。 为了清楚起见,我们假设一个ARMv7 CPU和一个相当新的内核和glibc(比如说3.13+ / 2.19+),但是如果这很容易解释的话,我也会对旧的硬件/软件有什么改变感兴趣。

arm版本之间的区别?(仅适用于ARMv7)

基本上我想知道ARMv7l和ARMv7之间的区别吗? 我得到了armv7l的arm处理器,armv7 hl有很多rpm。 我不完全知道我必须search以获取有关信息。 这个叫“后缀”是什么? 还有其他types吗? 他们有什么不同?

每个cpu arch真正的ELF TLS ABI要求是什么?

Ulrich Drepper关于线程本地存储的论文概述了几种不同cpu体系结构的TLS ABI,但是我发现它不足以作为实现TLS的基础,原因有两个: 它省略了一些重要的拱形,如ARM,MIPS等(包括一堆完全无关的Itanium) 更重要的是,它将大量的实现细节与ABI混合在一起,所以很难说出哪些属性是互操作性所必需的,哪些是他实现的方面。 例如,i386的唯一实际ABI要求是: %gs:0指向自己的指针。 主要可执行文件的TLS段(如果有)必须位于固定的(通过链接器,负数)偏移量的地址。 初始加载的库的所有其他TLS段必须具有相对于此地址的运行时常量(即对于每个线程都是相同的,但在不同的程序运行中不一定是相同的)偏移量(并且dynamic链接程序必须能够填充重定位这些抵消)。 ___tls_get_addr和__tls_get_addr函数必须以正确的语义存在以查找任意TLS段。 特别是数字电视的存在或布局不是 ABI的一部分,也不是主节目以外的TLS部分的sorting/布局。 看起来,使用“TLS变体II”的任何拱都具有大致上述的ABI要求。 但我完全不了解“TLS变体I”的要求,而且从阅读来源(在uClibc和glibc中)看来甚至可能有几个变体“变体I”。 有没有更好的文件可以帮助我,或者熟悉TLS的人可以向我解释ABI的要求吗?

如何避免二进制文件中的STT_GNU_IFUNC符号?

我需要部署到一个红帽4.1.2框(其中有gcc 4.1.2)。 我在Ubuntu 11.10上使用GCC 4.6.1进行开发。 不幸的是我的构build过程创build的一些二进制文件在RedHat机器上不可用。 原因似乎是一个ABI更改,根据另一个Stackoverflow问题导致STT_GNU_IFUNC符号的引入。 有没有办法阻止导出任何这样的符号,以便我的二进制文件可以使用旧的ABI? 我使用nm在我的二进制文件中查找任何“我”types的符号,但没有find。 我问这是因为我的一些其他二进制文件以及一些第三方库(tbb,boost)没有使用新的ABI,因此在RedHat机器上运行良好。 希望是明确的。 提前致谢。

x86-64 System V ABI在哪里logging?

x86-64 System V ABI(用于Windows以外的所有应用程序)曾用于生存在http://x86-64.org/documentation/abi.pdf ,但是该网站现在已经从互联网上掉下来了。 这个文件是否有一个新的权威之家?

什么是x86_64 va_list结构的格式?

任何人都可以参考x86_64 ABI(在Linux上使用的)中的va_list的表示? 我试图debugging一些代码堆栈或参数似乎损坏,这将有助于了解我应该看到什么…

C运行时对象,dll边界

deviseC API的最佳方法是处理传递与C运行时相关的“对象”(FILE *,由malloc返回的指针等)的问题。 例如,如果两个DLL与不同版本的运行时间链接,我的理解是,您不能安全地将一个DLL从一个DLL传递给另一个DLL。 是唯一的解决scheme使用Windows相关的API(这是保证在DLL工作)? C API已经存在,并且已经成熟,但是主要是由unixdevise的(当然还是要在unix上工作)。

x86 Linux与Windows?

我正在寻找一本更加面向Windows的x86书籍(本书是一个非常出色的书籍,Irvine,x86处理器的汇编语言)。 我不想学习Windows特有的信息,只是各种指令是什么? 这本书似乎是最好的解释它 – 只是它不针对Linux(我开发)。 我会没事,因为x86和Windows上的指令是相同的,只是一些调用约定可能会不同呢? build议最受欢迎