【问题标题】:What is EM_SPARC32PLUS for?EM_SPARC32PLUS 有什么用途?
【发布时间】:2014-05-07 00:04:20
【问题描述】:

我发现 Linux 和 GNU Binutils 在 ELF 标头中定义了一个特殊的机器类型 EM_SPARC32PLUS。为什么需要它?是什么让 SPARC V8+ 如此特别以至于不能使用EM_SPARC

我认为新机器类型应该有一个重要原因,因为它破坏了与旧程序的兼容性,并且所有其他架构都倾向于尽可能长时间地使用旧机器类型。

【问题讨论】:

  • 我会立即怀疑它是一个新的、非向后兼容的指令集。 x86 和 SPARC 的机器类型不同的原因相同。
  • 来自维基百科,SPARC Version 8 (V8), an enhanced SPARC architecture definition, was released in 1990. The main differences between V7 and V8 were the addition of integer multiply and divide instructions, and an upgrade from 80-bit "extended precision" floating-point arithmetic to 128-bit "quad-precision" arithmetic. SPARC V8 served as the basis for IEEE Standard 1754-1994, an IEEE standard for a 32-bit microprocessor architecture.。看起来不像是向后不兼容的修订版。
  • 指的是V8,而不是V8 plus
  • 对我来说,v8+(任何 UltraSPARC)都有全套原子操作(实际上是 CAS),而真正的 v8 芯片(1990 年代初的 SuperSparc/HyperSparc)只有有限的 24 位交换。所以,v8 和 v8+ 是不同的指令集,v8+ 有更多可用的指令。任何 v9 芯片都可以执行 v8 和 v8+ 代码,但古代 SS10 只能与真正的 v8 代码一起工作,而不能与 v8+ 一起工作。

标签: elf sparc


【解决方案1】:

elf-em.h 开始,我们看到以下(精选)条目:

#define EM_SPARC        2
#define EM_SPARC32PLUS  18      /* Sun's "v8plus" */
#define EM_SPARCV9      43      /* SPARC v9 64-bit */

通过 Google 搜索,我找到了 Sun Studio 12 的 this reference page,上面写着:

v8plus

为 SPARC-V9 ISA 的 V8plus 版本编译。根据定义,V8plus 是指 V9 ISA,但仅限于 V8plus ISA 规范定义的 32 位子集,没有可视化指令集 (VIS),也没有其他特定于实现的 ISA 扩展。

此选项使编译器能够生成代码以在 V8plus ISA 上获得良好性能。

生成的目标代码采用 SPARC-V8+ ELF32 格式,仅在 Solaris UltraSPARC 环境中执行——它不在 V7 或 V8 处理器上运行。

示例:任何基于 UltraSPARC 芯片架构的系统

它似乎本质上是UltraSPARC 的 V9 架构的 32 位版本。

另见:

【讨论】:

  • 有道理。我认为v8plus 意味着v8 和更新。
  • @MaratDukhan 我添加了一个您可能也会感兴趣的链接。
  • 谢谢。 v8plus 看起来像 x32 ABI on x86-64,但与 v8plus 不同的是,x32 ABI 使用机器类型 EM_X86_64(与 x86-64 相同)和文件类 ELFCLASS32 来指示 32 位模式.
  • @MaratDukhan 好点。根据您的类比,我倾向于同意您的观点,即定义不同的机器类型似乎有点“沉重”。我想找到一个旧的邮件列表帖子或说明他们为什么走这条路的东西。顺便说一下,对有趣的问题 +1。
猜你喜欢
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2019-04-16
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多