[llvm] [SPARC][IAS] Add v8plus feature bit (PR #101367)

Sergei Barannikov via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 31 16:59:16 PDT 2024


================
@@ -21,11 +21,16 @@ using namespace llvm;
 namespace {
   class SparcELFObjectWriter : public MCELFObjectTargetWriter {
   public:
-    SparcELFObjectWriter(bool Is64Bit, bool HasV9, uint8_t OSABI)
+    SparcELFObjectWriter(bool Is64Bit, bool IsV8Plus, bool HasV9, uint8_t OSABI)
         : MCELFObjectTargetWriter(
               Is64Bit, OSABI,
-              Is64Bit ? ELF::EM_SPARCV9
-                      : (HasV9 ? ELF::EM_SPARC32PLUS : ELF::EM_SPARC),
+              Is64Bit
+                  ? ELF::EM_SPARCV9
+                  // Note that we still need to emit an EM_SPARC32PLUS object
+                  // even when V8+ isn't explicitly requested, if we're
+                  // targeting a V9-capable CPU. This matches GAS behavior upon
+                  // encountering any V9 instructions in its input.
+                  : ((IsV8Plus || HasV9) ? ELF::EM_SPARC32PLUS : ELF::EM_SPARC),
----------------
s-barannikov wrote:

This is a pretty surprising behavior given that there are assembler [options for V8+](https://sourceware.org/binutils/docs/as/Sparc_002dOpts.html) and a note:

> Use one of the ‘-A’ options to select one of the SPARC architectures explicitly. If you select an architecture explicitly, as reports a fatal error if it encounters an instruction or feature requiring an incompatible or higher level.

The thing that concerns me is that we unconditionally create SPARC32PLUS objects that the linker might reject to link with SPARC objects. Even if it does not complain, the resulting V8+ executable might be rejected by the loader if the OS does not support V8+.

With that said I think we should create V8+ objects only when explicitly requested. Can we do this or the kernel buildsystem relies on gas bumping ISA level? (Does it not pass -mv8plus to the compiler driver?)


https://github.com/llvm/llvm-project/pull/101367


More information about the llvm-commits mailing list