Question

I found that Linux and GNU Binutils define a special machine type EM_SPARC32PLUS in ELF header. Why is it needed? What makes SPARC V8+ so special that it can not use EM_SPARC?

I think there should be an important reason for new machine type, because it breaks compatibility with old programs, and all other architectures tend to use the old machine type as long as possible.

Was it helpful?

Solution

Starting with elf-em.h, we see the following (cherry-picked) entries:

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

Some Googling led me to this reference page for Sun Studio 12, which says:

v8plus

Compile for the V8plus version of the SPARC-V9 ISA. By definition, V8plus means the V9 ISA, but limited to the 32–bit subset defined by the V8plus ISA specification, without the Visual Instruction Set (VIS), and without other implementation-specific ISA extensions.

This option enables the compiler to generate code for good performance on the V8plus ISA.

The resulting object code is in SPARC-V8+ ELF32 format and only executes in a Solaris UltraSPARC environment—it does not run on a V7 or V8 processor.

Example: Any system based on the UltraSPARC chip architecture

It seems to be essentially the 32-bit version of the V9 architecture for the UltraSPARC.

See also:

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top