--- llvm-16.0.6.src/lib/TargetParser/Triple.cpp.vanilla 2023-09-13 15:15:52.392714120 +0200 +++ llvm-16.0.6.src/lib/TargetParser/Triple.cpp 2023-09-13 15:24:29.312680134 +0200 @@ -67,7 +67,7 @@ case shave: return "shave"; case sparc: return "sparc"; case sparcel: return "sparcel"; - case sparcv9: return "sparcv9"; + case sparcv9: return "sparc64"; case spir64: return "spir64"; case spir: return "spir"; case spirv32: return "spirv32"; @@ -341,8 +341,10 @@ .Case("riscv64", riscv64) .Case("hexagon", hexagon) .Case("sparc", sparc) + .Case("sparcv8", sparc) + .Case("sparcv9", sparc) .Case("sparcel", sparcel) - .Case("sparcv9", sparcv9) + .Case("sparc64", sparcv9) .Case("s390x", systemz) .Case("systemz", systemz) .Case("tce", tce) @@ -487,9 +489,9 @@ .Case("riscv64", Triple::riscv64) .Case("hexagon", Triple::hexagon) .Cases("s390x", "systemz", Triple::systemz) - .Case("sparc", Triple::sparc) + .Cases("sparc", "sparcv8", "sparcv9", Triple::sparc) .Case("sparcel", Triple::sparcel) - .Cases("sparcv9", "sparc64", Triple::sparcv9) + .Case("sparc64", Triple::sparcv9) .Case("tce", Triple::tce) .Case("tcele", Triple::tcele) .Case("xcore", Triple::xcore) --- llvm-16.0.6.src/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp.vanilla 2023-09-13 15:46:09.137594674 +0200 +++ llvm-16.0.6.src/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp 2023-09-13 15:47:21.636589907 +0200 @@ -23,7 +23,7 @@ public: SparcELFObjectWriter(bool Is64Bit, uint8_t OSABI) : MCELFObjectTargetWriter(Is64Bit, OSABI, - Is64Bit ? ELF::EM_SPARCV9 : ELF::EM_SPARC, + Is64Bit ? ELF::EM_SPARCV9 : ELF::EM_SPARC32PLUS, /*HasRelocationAddend*/ true) {} ~SparcELFObjectWriter() override = default; --- llvm-17.0.1.src/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp.vanilla 2023-10-13 12:25:43.204399146 +0200 +++ llvm-17.0.1.src/lib/Target/Sparc/MCTargetDesc/SparcTargetStreamer.cpp 2023-10-13 14:00:47.012548704 +0200 @@ -13,6 +13,9 @@ #include "SparcTargetStreamer.h" #include "SparcInstPrinter.h" #include "llvm/MC/MCRegister.h" +#include "llvm/MC/MCAsmBackend.h" +#include "llvm/MC/MCAsmInfo.h" +#include "llvm/MC/MCAssembler.h" #include "llvm/Support/FormattedStream.h" using namespace llvm; @@ -39,7 +42,13 @@ } SparcTargetELFStreamer::SparcTargetELFStreamer(MCStreamer &S) - : SparcTargetStreamer(S) {} + : SparcTargetStreamer(S) { + MCAssembler &MCA = getStreamer().getAssembler(); + + unsigned EFlags = MCA.getELFHeaderEFlags(); + + MCA.setELFHeaderEFlags(EFlags | 0x100); // TOOD: conditional on target, options? EF_SPARC_32PLUS 0x000100 /* generic V8+ features */ +} MCELFStreamer &SparcTargetELFStreamer::getStreamer() { return static_cast(Streamer);