diff --git a/llvm/include/llvm/BinaryFormat/ELF.h b/llvm/include/llvm/BinaryFormat/ELF.h index ad35d7f05d5da..749971e354f66 100644 --- a/llvm/include/llvm/BinaryFormat/ELF.h +++ b/llvm/include/llvm/BinaryFormat/ELF.h @@ -973,7 +973,10 @@ enum : unsigned { // SM based processor values. EF_CUDA_SM100 = 0x6400, + EF_CUDA_SM101 = 0x6500, + EF_CUDA_SM103 = 0x6700, EF_CUDA_SM120 = 0x7800, + EF_CUDA_SM121 = 0x7900, // Set when using an accelerator variant like sm_100a. EF_CUDA_ACCELERATORS = 0x8, diff --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp index 0919c6aad74f2..aff047c297cc2 100644 --- a/llvm/lib/Object/ELFObjectFile.cpp +++ b/llvm/lib/Object/ELFObjectFile.cpp @@ -688,11 +688,20 @@ StringRef ELFObjectFileBase::getNVPTXCPUName() const { case ELF::EF_CUDA_SM100: return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_100a" : "sm_100"; + case ELF::EF_CUDA_SM101: + return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_101a" + : "sm_101"; + case ELF::EF_CUDA_SM103: + return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_103a" + : "sm_103"; // Rubin architecture. case ELF::EF_CUDA_SM120: return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_120a" : "sm_120"; + case ELF::EF_CUDA_SM121: + return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_121a" + : "sm_121"; default: llvm_unreachable("Unknown EF_CUDA_SM value"); } diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/ELFDumper.cpp index 94ce38605f5c9..66153ad9c1336 100644 --- a/llvm/tools/llvm-readobj/ELFDumper.cpp +++ b/llvm/tools/llvm-readobj/ELFDumper.cpp @@ -1683,7 +1683,9 @@ const EnumEntry ElfHeaderNVPTXFlags[] = { ENUM_ENT(EF_CUDA_SM75, "sm_75"), ENUM_ENT(EF_CUDA_SM80, "sm_80"), ENUM_ENT(EF_CUDA_SM86, "sm_86"), ENUM_ENT(EF_CUDA_SM87, "sm_87"), ENUM_ENT(EF_CUDA_SM89, "sm_89"), ENUM_ENT(EF_CUDA_SM90, "sm_90"), - ENUM_ENT(EF_CUDA_SM100, "sm_100"), ENUM_ENT(EF_CUDA_SM120, "sm_120"), + ENUM_ENT(EF_CUDA_SM100, "sm_100"), ENUM_ENT(EF_CUDA_SM101, "sm_101"), + ENUM_ENT(EF_CUDA_SM103, "sm_103"), ENUM_ENT(EF_CUDA_SM120, "sm_120"), + ENUM_ENT(EF_CUDA_SM121, "sm_121"), }; const EnumEntry ElfHeaderRISCVFlags[] = { @@ -3659,8 +3661,10 @@ template void GNUELFDumper::printFileHeaders() { ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderXtensaFlags), unsigned(ELF::EF_XTENSA_MACH)); else if (e.e_machine == EM_CUDA) { - ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderNVPTXFlags), - unsigned(ELF::EF_CUDA_SM)); + unsigned Mask = e.e_ident[ELF::EI_ABIVERSION] == ELF::ELFABIVERSION_CUDA_V1 + ? ELF::EF_CUDA_SM + : ELF::EF_CUDA_SM_MASK; + ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderNVPTXFlags), Mask); if (e.e_ident[ELF::EI_ABIVERSION] == ELF::ELFABIVERSION_CUDA_V1 && (e.e_flags & ELF::EF_CUDA_ACCELERATORS_V1)) ElfFlags += "a";