binutils/bfd 中的 elfnn-<arch>.c 和 elfxx-<arch>.c 是什么意思?

问题描述

我正在跟踪 binutils 源代码
我发现binutils/bfd中有名为Base Sub elfnn-<arch>.c文件
elfnn 和 elfxx 是什么意思?

谢谢。

解决方法

如果架构仅支持 32 位或 64 位基于 ELF 的 ABI,则该架构的代码位于名为 elf32-arch.c 或 elf64-arch.c,分别。在某些情况下,一个架构同时支持两者,但实现却大不相同,因此您会同时看到 elf32-arch.c 和 elf64-arch.c 源代码文件(例如,ppc、mips)。

但是一些更现代的架构,其中 32 位和 64 位支持是并行开发的,共享很多实现(例如,aarch64、ia64、riscv)。在这些情况下,您会看到一个 elfnn-arch.c 源文件。这个文件是一个模板;构建过程从模板自动生成文件的 elf32- 和 elf64- 特化。尽管如此,很多代码对于 32 位和 64 位来说都是通用的,不需要专门化,所以你会在 elfxx-arch.c 源文件中找到这些代码,这不是一个模板。