问题描述
我正在跟踪 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 源文件中找到这些代码,这不是一个模板。