Skip to content

Commit 4e596fc

Browse files
authored
[ELF] handle new NVIDIA GPU variants. (#151604)
1 parent 92ca087 commit 4e596fc

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

llvm/include/llvm/BinaryFormat/ELF.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -973,7 +973,10 @@ enum : unsigned {
973973

974974
// SM based processor values.
975975
EF_CUDA_SM100 = 0x6400,
976+
EF_CUDA_SM101 = 0x6500,
977+
EF_CUDA_SM103 = 0x6700,
976978
EF_CUDA_SM120 = 0x7800,
979+
EF_CUDA_SM121 = 0x7900,
977980

978981
// Set when using an accelerator variant like sm_100a.
979982
EF_CUDA_ACCELERATORS = 0x8,

llvm/lib/Object/ELFObjectFile.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,11 +688,20 @@ StringRef ELFObjectFileBase::getNVPTXCPUName() const {
688688
case ELF::EF_CUDA_SM100:
689689
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_100a"
690690
: "sm_100";
691+
case ELF::EF_CUDA_SM101:
692+
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_101a"
693+
: "sm_101";
694+
case ELF::EF_CUDA_SM103:
695+
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_103a"
696+
: "sm_103";
691697

692698
// Rubin architecture.
693699
case ELF::EF_CUDA_SM120:
694700
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_120a"
695701
: "sm_120";
702+
case ELF::EF_CUDA_SM121:
703+
return getPlatformFlags() & ELF::EF_CUDA_ACCELERATORS ? "sm_121a"
704+
: "sm_121";
696705
default:
697706
llvm_unreachable("Unknown EF_CUDA_SM value");
698707
}

llvm/tools/llvm-readobj/ELFDumper.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1683,7 +1683,9 @@ const EnumEntry<unsigned> ElfHeaderNVPTXFlags[] = {
16831683
ENUM_ENT(EF_CUDA_SM75, "sm_75"), ENUM_ENT(EF_CUDA_SM80, "sm_80"),
16841684
ENUM_ENT(EF_CUDA_SM86, "sm_86"), ENUM_ENT(EF_CUDA_SM87, "sm_87"),
16851685
ENUM_ENT(EF_CUDA_SM89, "sm_89"), ENUM_ENT(EF_CUDA_SM90, "sm_90"),
1686-
ENUM_ENT(EF_CUDA_SM100, "sm_100"), ENUM_ENT(EF_CUDA_SM120, "sm_120"),
1686+
ENUM_ENT(EF_CUDA_SM100, "sm_100"), ENUM_ENT(EF_CUDA_SM101, "sm_101"),
1687+
ENUM_ENT(EF_CUDA_SM103, "sm_103"), ENUM_ENT(EF_CUDA_SM120, "sm_120"),
1688+
ENUM_ENT(EF_CUDA_SM121, "sm_121"),
16871689
};
16881690

16891691
const EnumEntry<unsigned> ElfHeaderRISCVFlags[] = {
@@ -3659,8 +3661,10 @@ template <class ELFT> void GNUELFDumper<ELFT>::printFileHeaders() {
36593661
ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderXtensaFlags),
36603662
unsigned(ELF::EF_XTENSA_MACH));
36613663
else if (e.e_machine == EM_CUDA) {
3662-
ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderNVPTXFlags),
3663-
unsigned(ELF::EF_CUDA_SM));
3664+
unsigned Mask = e.e_ident[ELF::EI_ABIVERSION] == ELF::ELFABIVERSION_CUDA_V1
3665+
? ELF::EF_CUDA_SM
3666+
: ELF::EF_CUDA_SM_MASK;
3667+
ElfFlags = printFlags(e.e_flags, ArrayRef(ElfHeaderNVPTXFlags), Mask);
36643668
if (e.e_ident[ELF::EI_ABIVERSION] == ELF::ELFABIVERSION_CUDA_V1 &&
36653669
(e.e_flags & ELF::EF_CUDA_ACCELERATORS_V1))
36663670
ElfFlags += "a";

0 commit comments

Comments
 (0)